Browse Source

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 10 years ago
parent
commit
fe1ec8f11a
10 changed files with 163 additions and 29 deletions
  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;
+					}
 				}
 			}
 		}