Browse Source

Add issue creation.

Nathaniel van Diepen 10 years ago
parent
commit
e616926b07
5 changed files with 79 additions and 6 deletions
  1. 19 0
      api.php
  2. 4 0
      data/pages/newissue.options
  3. 45 0
      data/pages/newissue.template
  4. 1 1
      js/index.js
  5. 10 5
      php/issue.php

+ 19 - 0
api.php

@@ -306,6 +306,25 @@
 								}
 								retj($ret,$id);
 							break;
+							case 'issue':
+								back(true);
+								$ret['state'] = array(
+									'data'=>array(
+										'type'=>'page',
+										'id'=>$id,
+									)
+								);
+								if(isset($_GET['pid'])){
+									$ret['error'] = 'Invalid Action';
+								}elseif(is_valid('title')&&is_valid('description')){
+									if(!newIssue($_GET['title'],$_GET['description'])){
+										$ret['error'] = 'Unable to create issue. ';
+									}
+								}else{
+									$ret['error'] = 'Fill in all the details.';
+								}
+								retj($ret,$id);
+							break;
 							case 'message':
 								back(true);
 								if(isset($_GET['to'])&&isset($_GET['message'])){

+ 4 - 0
data/pages/newissue.options

@@ -0,0 +1,4 @@
+{
+	"title": "New Issue",
+	"secure": true
+}

+ 45 - 0
data/pages/newissue.template

@@ -0,0 +1,45 @@
+{{#if key}}
+	<form id="form">
+		<div>
+			<input type="text" name="title" class="fill-width" placeholder="Title"/>
+		</div>
+		<div>
+			<textarea type="text" name="description" class="fill-width" placeholder="Description"/></textarea>
+		</div>
+		<div>
+			<input type="button" value="cancel" class="cancel"/>
+			<input type="submit" value="create"/>
+		</div>
+	</form>
+	<script>
+		$(document).ready(function(){
+			$('form#form').submit(function(){
+				var data = $(this).serializeObject(),
+					State = History.getState();
+				for(var i in State.data){
+					data[i] = State.data;
+				}
+				data.type = 'action';
+				data.id = 'issue';
+				apiCall(data,function(d){
+					if(!d.error){
+						back();
+					}else{
+						$('#loading').hide();
+					}
+					return false;
+				});
+				return false;
+			}).find('.cancel').click(function(){
+				back();
+				return false;
+			});
+		});
+	</script>
+{{else}}
+	<script>
+		$(document).ready(function(){
+			back();
+		});
+	</script>
+{{/if}}

+ 1 - 1
js/index.js

@@ -221,7 +221,7 @@
 		error = window.error = function(e,callback){
 			if(!flag('error')){
 				flag('error',true);
-				var msg = '['+State.url+'] '+e;
+				var msg = '['+State.url+'] '+(typeof e.error != 'undefined'?e.error:e);
 				console.error((msg.trim()+"\n"+(exists(e.state)?JSON.stringify(e.state):'')).trim());
 				alert(msg.trim(),'Error',callback);
 				console.trace();

+ 10 - 5
php/issue.php

@@ -13,7 +13,7 @@
 		}
 		return false;
 	}
-	function newIssue($title,$description,$user=null){
+	function newIssue($title,$description,$user=null,$sid=null){
 		global $LOGGEDIN;
 		global $mysqli;
 		if($LOGGEDIN){
@@ -22,16 +22,21 @@
 			}
 			$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 = query("SELECT id FROM `issues` WHERE title = '%s' AND u_id = %d",array($title,$user,$sid))){
 					if($res->num_rows){
 						return false;
 					}
 				}
-				if(query("INSERT INTO `projects` (title,description,u_id) VALUES ('%s','%s',%d)",array($title,$description,$user))){
-					if($res = query("SELECT id FROM `projects` WHERE title = '%s' AND description = '%s' AND u_id = %d",array($title,$description,$user))){
+				if(is_null($sid)){
+					$sid = 'null';
+				}else{
+					$sid = intval($sid);
+				}
+				if(query("INSERT INTO `issues` (title,description,u_id,s_id,st_id) VALUES ('%s','%s',%d,%s,1)",array($title,$description,$user,$sid))){
+					if($res = query("SELECT id FROM `issues` WHERE title = '%s' AND description = '%s' AND u_id = %d",array($title,$description,$user,$sid))){
 						if($res->num_rows == 1){
 							$res = $res->fetch_assoc();
-							project_comment($res['id'],'Project created');
+							project_comment($res['id'],'Issue created');
 						}
 						return true;
 					}