فهرست منبع

Lots of changes

Comments work on projects.
New projects have a comment added by default.
Internal overhaul for php errors, they now get passed to the client
side.
Nathaniel van Diepen 11 سال پیش
والد
کامیت
fe1ec8f11a
10فایلهای تغییر یافته به همراه163 افزوده شده و 29 حذف شده
  1. 92 20
      api.php
  2. 1 1
      bugs.appcache
  3. 1 1
      config.default.json
  4. 1 1
      data/version
  5. 13 2
      index.php
  6. 5 2
      js/index.js
  7. 30 0
      php/config.php
  8. 2 1
      php/functions.php
  9. 6 0
      php/messages.php
  10. 12 1
      php/project.php

+ 92 - 20
api.php

@@ -12,50 +12,100 @@
 					if(!isset($_GET['template'])){
 						$ret['template'] = file_get_contents(PATH_DATA.'pages/user.template');
 					}
-					$user = userObj($id);
-					$context = Array(
-						'name'=>$user['name'],
-						'email'=>$user['email']
-					);
-					if($LOGGEDIN){
-						$context['key'] = true;
-						$context['user'] = userObj($_SESSION['username']);
-					};
-					$ret['context'] = $context;
+					if($user = userObj($id)){
+						$context = Array(
+							'name'=>$user['name'],
+							'email'=>$user['email']
+						);
+						if($LOGGEDIN){
+							$context['key'] = true;
+							$context['user'] = userObj($_SESSION['username']);
+						};
+						$ret['context'] = $context;
+					}else{
+						$ret['state'] = Array(
+							'url'=>isset($_GET['back'])?$_GET['back']:'page-index'
+						);
+					}
 					retj($ret,'User - '.$context['name']);
 				break;
 				case 'group':
 					back(true);
 					// TODO - handle group requests
+					if(false){
+						// TODO
+					}else{
+						$ret['state'] = Array(
+							'url'=>isset($_GET['back'])?$_GET['back']:'page-index'
+						);
+					}
+					retj($ret,'Project - '.$context['title']);
 				break;
 				case 'issue':
 					back(true);
 					// TODO - handle issue requests
+					if(false){
+						// TODO
+					}else{
+						$ret['state'] = Array(
+							'url'=>isset($_GET['back'])?$_GET['back']:'page-index'
+						);
+					}
+					retj($ret,'Project - '.$context['title']);
 				break;
 				case 'scrum':
 					back(true);
 					// TODO - handle scrum requests
+					if(false){
+						// TODO
+					}else{
+						$ret['state'] = Array(
+							'url'=>isset($_GET['back'])?$_GET['back']:'page-index'
+						);
+					}
+					retj($ret,'Project - '.$context['title']);
 				break;
 				case 'project':
 					back(true);
 					if(!isset($_GET['template'])){
 						$ret['template'] = file_get_contents(PATH_DATA.'pages/project.template');
 					}
-					$context = projectObj($id);
-					$context['user'] = userObj($context['user']);
-					if($LOGGEDIN){
-						$context['key'] = true;
-						$context['user'] = userObj($_SESSION['username']);
-					};
-					$ret['context'] = $context;
+					if($context = projectObj($id)){
+						$context['user'] = userObj($context['user']);
+						if($LOGGEDIN){
+							$context['key'] = true;
+							$context['user'] = userObj($_SESSION['username']);
+						};
+						$ret['context'] = $context;
+					}else{
+						$ret['state'] = Array(
+							'url'=>isset($_GET['back'])?$_GET['back']:'page-index'
+						);
+					}
 					retj($ret,'Project - '.$context['title']);
 				break;
 				case 'message':
 					// TODO - handle message requests
+					if(false){
+						// TODO
+					}else{
+						$ret['state'] = Array(
+							'url'=>isset($_GET['back'])?$_GET['back']:'page-index'
+						);
+					}
+					retj($ret,'Project - '.$context['title']);
 				break;
 				case 'admin':
 					back(true);
 					// TODO - handle admin requests
+					if(false){
+						// TODO
+					}else{
+						$ret['state'] = Array(
+							'url'=>isset($_GET['back'])?$_GET['back']:'page-index'
+						);
+					}
+					retj($ret,'Project - '.$context['title']);
 				break;
 				case 'page':
 					$title = $id;
@@ -178,9 +228,31 @@
 								retj($ret,$id);
 							break;
 							case 'comment':
-								$ret = Array(
-									'state'=>stateObj($_GET['comment_type'],$_GET['comment_id'])
-								);
+								if(isset($_GET['comment_type'])&&isset($_GET['comment_id'])&&isset($_GET['message'])){
+									$cid = $_GET['comment_id'];
+									$ret = Array(
+										'state'=>stateObj($_GET['comment_type'],$cid)
+									);
+									switch($_GET['comment_type']){
+										case 'project':
+											if(!function_exists('project_comment')){
+												$ret['error'] = "fn doesn't exist!";
+											}
+											if(!project_comment($cid,$_GET['message'])){
+												$ret = Array(
+													'error'=>'Could not comment on project'
+												);
+											}
+										break;
+										default:
+											$ret['error'] = 'Comment type not implemented';
+									}
+								}else{
+									$ret['error'] = 'Missing comment paremeters';
+									$ret['state'] = Array(
+										'title'=>'error'
+									);
+								}
 								retj($ret,$ret['state']['title']);
 							break;
 							default:

+ 1 - 1
bugs.appcache

@@ -111,4 +111,4 @@ NETWORK:
 *
 
 FALLBACK:
-Version Wed Nov 20 10:53:51 MST 2013
+Version Sun Nov 24 17:28:22 MST 2013

+ 1 - 1
config.default.json

@@ -1 +1 @@
-{"host":"localhost","user":"bugs","password":"bugs","database":"bugs","expire":86400,"email":"eeems@omnimaga.org"}
+{"host":"localhost","user":"bugs","password":"bugs","database":"bugs","expire":86400,"email":"eeems[email protected]"}

+ 1 - 1
data/version

@@ -1 +1 @@
-Wed Nov 20 10:53:51 MST 2013
+Sun Nov 24 17:28:22 MST 2013

+ 13 - 2
index.php

@@ -47,6 +47,15 @@
 			case 'captcha':
 				generate_captcha();
 			break;
+			case 'error':
+				die(
+					json_encode(
+						Array(
+							'error'=>isset($_GET['error'])?$_GET['error']:'Error'
+						)
+					)
+				);
+			break;
 		}
 	}
 	if(!isset($_GET['type'])||!isset($_GET['id'])){
@@ -98,7 +107,9 @@
 				window.applicationCache.addEventListener('updateready',function(){
 					location.reload();
 				});
-				window.screen.lockOrientation('portrait');
+				if(typeof window.screen.lockOrientation != 'undefined'){
+					window.screen.lockOrientation('portrait');
+				}
 			})(window,Modernizr);
 		</script>
 		<script src="js/jquery.min.js"></script>
@@ -117,7 +128,7 @@
 		<div id="content" class="container"></div>
 		<div id="loading"></div>
 		<div id="dialog"></div>
-		<div id="comment">
+		<div id="comment" style="display:none;">
 			<form>
 				<input type="hidden" name="comment_type"/>
 				<input type="hidden" name="comment_id"/>

+ 5 - 2
js/index.js

@@ -214,8 +214,9 @@
 			if(!flag('error')){
 				flag('error',true);
 				var msg = '['+State.url+']'+e.error;
-				console.error(msg.trim()+"\n"+(exists(e.state)?JSON.stringify(e.state):''));
+				console.error((msg.trim()+"\n"+(exists(e.state)?JSON.stringify(e.state):'')).trim());
 				alert(msg.trim(),'Error',callback);
+				console.trace();
 			}
 		},
 		getNewState = function(state){
@@ -382,7 +383,7 @@
 											if(!exists(d.error)){
 												diag.dialog('close');
 												flag('ignore_statechange',false);
-												loading(false);
+												$('.topbar-current').click();
 											}
 										});
 									}
@@ -486,6 +487,8 @@
 									$(window).resize();
 								}else if($(this).hasClass('topbar-history')){
 									back();
+								}else if($(this).hasClass('topbar-current')){
+									replaceState(href);
 								}else{
 									loadState(href);
 								}

+ 30 - 0
php/config.php

@@ -1,4 +1,34 @@
 <?php
+	error_reporting(0);
+	ob_start();
+	// START ERROR HANDLING
+	function shutdown_handler(){
+		$error = error_get_last();
+		if ($error['type'] == 1) {
+			ob_end_clean();
+			switch($error['type']){
+				case E_USER_ERROR:$errnostr='Fatal Error';break;
+				case E_USER_WARNING:$errnostr='Warning';break;
+				case E_USER_NOTICE:$errnostr='Notice';break;
+				case E_ERROR:$errnostr='Error';break;
+				case E_PARSE:$errnostr='Parse Error';break;
+				case E_CORE_ERROR:$errnostr='Core Error';break;
+				case E_CORE_WARNING:$errnostr='Core Warning';break;
+				case E_COMPILE_ERROR:$errnostr='Compile Error';break;
+				case E_COMPILE_WARNING:$errnostr='Compile Warning';break;
+				//case E_:$errnostr='';break;
+				default:$errnostr='Unkown Error';
+			}
+			echo json_encode(Array(
+				'error'=>"\n{$errnostr}: {$error['message']} on {$error['file']}[{$error['line']}]"
+			));
+		}else{
+			obj_end_flush();
+		}
+		echo $error['type'].PHP_EOL;
+	}
+	register_shutdown_function('shutdown_handler');
+	// END ERROR HANDLING
 	@session_start();
 	define('PATH_ROOT',realpath(dirname(__FILE__)).'/../');
 	define('PATH_CONFIG',PATH_ROOT.'config.json');

+ 2 - 1
php/functions.php

@@ -64,7 +64,8 @@
 			'template'=>$topbar,
 			'context'=>$context
 		);
-		die(json_encode($json));
+		echo json_encode($json);
+		die();
 	}
 	function is_valid($col,$v=null){
 		if($v == null){

+ 6 - 0
php/messages.php

@@ -16,4 +16,10 @@
 		}
 		return Array();
 	}
+	function project_comment($project,$message){
+		if(query("INSERT INTO `bugs`.`messages` (`id`,`timestamp`,`from_id`,`to_id`,`p_id`,`s_id`,`i_id`,`message`) VALUES(NULL,CURRENT_TIMESTAMP,'%d',NULL,'%d',NULL,NULL,'%s');",Array(userId($_SESSION['username']),$project,$message))){
+			return true;
+		}
+		return false;
+	}
 ?>

+ 12 - 1
php/project.php

@@ -22,8 +22,19 @@
 			}
 			$user = userId($user);
 			if(false != $user){
+				if($res = query("SELECT id FROM `projects` WHERE title = '%s' AND u_id = %d",Array($title,$user))){
+					if($res->num_rows){
+						return false;
+					}
+				}
 				if(query("INSERT INTO `projects` (title,description,u_id) VALUES ('%s','%s',%d)",Array($title,$description,$user))){
-					return true;
+					if($res = query("SELECT id FROM `projects` WHERE title = '%s' AND description = '%s' AND u_id = %d",Array($title,$description,$user))){
+						if($res->num_rows == 1){
+							$res = $res->fetch_assoc();
+							project_comment($res['id'],'Project created');
+						}
+						return true;
+					}
 				}
 			}
 		}