Nathaniel van Diepen 8 éve
szülő
commit
299d6270e3

+ 24 - 0
lib/bugs.class.php

@@ -251,6 +251,30 @@
 				}
 			}
 		}
+		static function options_statuses(){
+			$res = static::$sql->query("
+				SELECT	id,
+						name
+				FROM statuses
+			")->assoc_results;
+			$ret = array();
+			foreach($res as $row){
+				$ret[$row['id']] = $row['name'];
+			}
+			return $ret;
+		}
+		static function options_priorities(){
+			$res = static::$sql->query("
+				SELECT	id,
+						name
+				FROM priorities
+			")->assoc_results;
+			$ret = array();
+			foreach($res as $row){
+				$ret[$row['id']] = $row['name'];
+			}
+			return $ret;
+		}
 	}
 	register_shutdown_function(function(){
 		$emails = Bugs::$sql->query("

+ 26 - 3
lib/project.class.php

@@ -152,9 +152,25 @@
 				case 'issue_ids':
 					return array_column(
 						Bugs::$sql->query("
-							SELECT id
-							FROM issues
-							WHERE p_id = ?
+							SELECT i.id
+							FROM issues i
+							JOIN statuses s
+								ON s.id = i.s_id
+							WHERE i.p_id = ?
+							AND s.open = 1
+						",'i',$this->id)->assoc_results,
+						'id'
+					);
+				break;
+				case 'closed_issue_ids':
+					return array_column(
+						Bugs::$sql->query("
+							SELECT i.id
+							FROM issues i
+							JOIN statuses s
+								ON s.id = i.s_id
+							WHERE i.p_id = ?
+							AND s.open = 0
 						",'i',$this->id)->assoc_results,
 						'id'
 					);
@@ -166,6 +182,13 @@
 					}
 					return $issues;
 				break;
+				case 'closed_issues':
+					$issues = array();
+					foreach($this->closed_issue_ids as $id){
+						array_push($issues,Bugs::issue($id));
+					}
+					return $issues;
+				break;
 				case 'status':
 					return Bugs::status($this->s_id);
 				break;

+ 52 - 6
lib/user.class.php

@@ -137,9 +137,25 @@
 				case 'project_ids':
 					return array_column(
 						Bugs::$sql->query("
-							SELECT id
-							FROM projects
-							where u_id = ?
+							SELECT p.id
+							FROM projects p
+							JOIN statuses s
+								ON s.id = p.s_id
+							WHERE p.u_id = ?
+							AND s.open = 1
+						",'i',$this->id)->assoc_results,
+						'id'
+					);
+				break;
+				case 'closed_project_ids':
+					return array_column(
+						Bugs::$sql->query("
+							SELECT p.id
+							FROM projects p
+							JOIN statuses s
+								ON s.id = p.s_id
+							WHERE p.u_id = ?
+							AND s.open = 0
 						",'i',$this->id)->assoc_results,
 						'id'
 					);
@@ -151,12 +167,35 @@
 					}
 					return $projects;
 				break;
+				case 'closed_projects':
+					$projects = array();
+					foreach($this->closed_project_ids as $id){
+						array_push($projects,Bugs::project($id));
+					}
+					return $projects;
+				break;
 				case 'issue_ids':
 					return array_column(
 						Bugs::$sql->query("
-							SELECT id
-							FROM issues
-							where u_id = ?
+							SELECT i.id
+							FROM issues i
+							JOIN statuses s
+								ON s.id =  i.s_id
+							WHERE i.u_id = ?
+							AND s.open = 1
+						",'i',$this->id)->assoc_results,
+						'id'
+					);
+				break;
+				case 'closed_issue_ids':
+					return array_column(
+						Bugs::$sql->query("
+							SELECT i.id
+							FROM issues i
+							JOIN statuses s
+								ON s.id =  i.s_id
+							WHERE i.u_id = ?
+							AND s.open = 0
 						",'i',$this->id)->assoc_results,
 						'id'
 					);
@@ -168,6 +207,13 @@
 					}
 					return $issues;
 				break;
+				case 'closed_issues':
+					$issues = array();
+					foreach($this->closed_issue_ids as $id){
+						array_push($issues,Bugs::issue($id));
+					}
+					return $issues;
+				break;
 				default:
 					if(isset($this->cache)){
 						return $this->cache[$name];

+ 3 - 1
paths/issue.path.php

@@ -18,10 +18,12 @@
 		'/issue/{issue}/update'=>function($res,$args){
 			error_handle_type('json');
 			Bugs::authorized('issue.update');
-			if(!empty($_POST['name'])&&!empty($_POST['description'])){
+			if(!empty($_POST['name'])&&!empty($_POST['description'])&&!empty($_POST['status'])&&!empty($_POST['priority'])){
 				$issue = Bugs::issue($args->issue);
 				$issue->name = $_POST['name'];
 				$issue->description = $_POST['description'];
+				$issue->s_id = $_POST['status'];
+				$issue->pr_id = $_POST['priority'];
 				$res->json(array(
 					'id'=>$issue->id
 				));

+ 2 - 1
paths/project.path.php

@@ -23,10 +23,11 @@
 		'/project/{project}/update'=>function($res,$args){
 			error_handle_type('json');
 			Bugs::authorized('project.update');
-			if(!empty($_POST['name'])&&!empty($_POST['description'])){
+			if(!empty($_POST['name'])&&!empty($_POST['description'])&&!empty($_POST['status'])){
 				$project = Bugs::project(is_numeric($args->project)?intval($args->project):$args->project);
 				$project->name = $_POST['name'];
 				$project->description = $_POST['description'];
+				$project->s_id = $_POST['status'];
 				$res->json(array(
 					'name'=>$project->name
 				));

+ 33 - 22
templates/issue.php

@@ -1,18 +1,15 @@
 <?php
 	// Expecting the context to be a issue or nothing at all
 	global $context;
-	($context?$context->permission('read'):Bugs::permission('issue.read')) or trigger_error('You are not allowed to view this issue');
-	$update = $context?$context->permission('update'):Bugs::permission('issue.create');
-	$delete = $context?$context->permission('delete'):Bugs::permission('issue.delete');
-	function getval($name){
-		global $context;
-		return $context?$context->{$name}:null;
-	}
+	$ctx = $context;
+	($ctx?$ctx->permission('read'):Bugs::permission('issue.read')) or trigger_error('You are not allowed to view this issue');
+	$update = $ctx?$ctx->permission('update'):Bugs::permission('issue.create');
+	$delete = $ctx?$ctx->permission('delete'):Bugs::permission('issue.delete');
 ?>
 <!doctype html>
 	<head>
 		<meta charset="utf8"/>
-		<title>Issue <?=getval('name');?></title>
+		<title>Issue <?=($ctx?$ctx->name:null);?></title>
 		<script src="<?=Router::url(Router::$base)?>/js/juju/core.js"></script>
 		<script src="<?=Router::url(Router::$base)?>/js/juju/page.js"></script>
 		<script src="<?=Router::url(Router::$base)?>/js/juju/dom.js"></script>
@@ -29,36 +26,50 @@
 		<form id="form-issue" method="post">
 			<div>
 				<label for="name">Name:</label>
-				<input value="<?=getval('name');?>" <?=$update?'name="name"':'disabled="disabled"';?>/>
+				<input value="<?=($ctx?$ctx->name:null);?>" <?=$update?'name="name"':'disabled="disabled"';?>/>
 			</div>
 			<div>
 				<label for="description">Description:</label>
-				<input type="description" value="<?=getval('description');?>" <?=$update?'name="description"':'disabled="disabled"';?>/>
+				<input type="description" value="<?=($ctx?$ctx->description:null);?>" <?=$update?'name="description"':'disabled="disabled"';?>/>
 			</div>
 			<?php
-				if($context){
+				if($ctx){
 			?>
 				<div>
 					<label>Status:</label>
-					<?=getval('status')?>
+					<?=
+						Bugs::template("subs/dropdown")
+							->run(array(
+								'value'=> $ctx?$ctx->s_id:null,
+								'options'=> Bugs::options_statuses(),
+								'name'=> 'status'
+							))
+					?>
 				</div>
 				<div>
 					<label>Priority:</label>
-					<?=getval('priority')?>
+					<?=
+						Bugs::template("subs/dropdown")
+							->run(array(
+								'value'=> $ctx?$ctx->pr_id:null,
+								'options'=> Bugs::options_priorities(),
+								'name'=> 'priority'
+							))
+					?>
 				</div>
 				<div>
 					<label>User:</label>
-					<a href="<?=Router::url(Router::$base.'/~'.getval('user')->name)?>">
-						<?=getval('user')->name;?>
+					<a href="<?=Router::url(Router::$base.'/~'.($ctx?$ctx->user->name:null))?>">
+						<?=$ctx?$ctx->user->name:null;?>
 					</a>
 				</div>
 				<?php
-					if($context->project){
+					if($ctx->project){
 				?>
 					<div>
 						<label>Project:</label>
-						<a href="<?=Router::url(Router::$base.'/project/'.getval('project')->name)?>">
-							<?=getval('project')->name;?>
+						<a href="<?=Router::url(Router::$base.'/project/'.($ctx?$ctx->project->name:null))?>">
+							<?=($ctx?$ctx->project->name:null);?>
 						</a>
 					</div>
 				<?php
@@ -66,18 +77,18 @@
 				?>
 				<div>
 					<label>Date Registered:</label>
-					<time datetime="<?=date('c',getval('date_created'));?>"><?=date('Y-m-d',getval('date_created'));?></time>
+					<time datetime="<?=date('c',($ctx?$ctx->date_created:null));?>"><?=date('Y-m-d',($ctx?$ctx->date_created:null));?></time>
 				</div>
 				<div>
 					<label>Date Modified:</label>
-					<time datetime="<?=date('c',getval('date_modified'));?>"><?=date('Y-m-d',getval('date_modified'));?></time>
+					<time datetime="<?=date('c',($ctx?$ctx->date_modified:null));?>"><?=date('Y-m-d',($ctx?$ctx->date_modified:null));?></time>
 				</div>
-				<input type="hidden" name="id" value="<?=getval('id')?>"/>
+				<input type="hidden" name="id" value="<?=($ctx?$ctx->id:null)?>"/>
 			<?php
 				}
 				if($update){
 			?>
-				<input type="submit" value="<?=$context?'Update':'Create'?>"/>
+				<input type="submit" value="<?=$ctx?'Update':'Create'?>"/>
 			<?php
 				}
 			?>

+ 24 - 20
templates/project.php

@@ -1,18 +1,15 @@
 <?php
 	// Expecting the context to be a project or nothing at all
 	global $context;
-	($context?$context->permission('read'):Bugs::permission('project.read')&&Bugs::permission('project.create')) or trigger_error('You are not allowed to view this project');
-	$update = $context?$context->permission('update'):Bugs::permission('project.create');
-	$delete = $context?$context->permission('delete'):Bugs::permission('project.delete');
-	function getval($name){
-		global $context;
-		return $context?$context->{$name}:null;
-	}
+	$ctx = $context;
+	($ctx?$ctx->permission('read'):Bugs::permission('project.read')&&Bugs::permission('project.create')) or trigger_error('You are not allowed to view this project');
+	$update = $ctx?$ctx->permission('update'):Bugs::permission('project.create');
+	$delete = $ctx?$ctx->permission('delete'):Bugs::permission('project.delete');
 ?>
 <!doctype html>
 	<head>
 		<meta charset="utf8"/>
-		<title>Project <?=getval('name');?></title>
+		<title>Project <?=($ctx?$ctx->name:null);?></title>
 		<script src="<?=Router::url(Router::$base)?>/js/juju/core.js"></script>
 		<script src="<?=Router::url(Router::$base)?>/js/juju/page.js"></script>
 		<script src="<?=Router::url(Router::$base)?>/js/juju/dom.js"></script>
@@ -29,47 +26,54 @@
 		<form id="form-project" method="post">
 			<div>
 				<label for="name">Name:</label>
-				<input value="<?=getval('name');?>" <?=$update?'name="name"':'disabled="disabled"';?>/>
+				<input value="<?=($ctx?$ctx->name:null);?>" <?=$update?'name="name"':'disabled="disabled"';?>/>
 			</div>
 			<div>
 				<label for="description">Description:</label>
-				<input type="description" value="<?=getval('description');?>" <?=$update?'name="description"':'disabled="disabled"';?>/>
+				<input type="description" value="<?=($ctx?$ctx->description:null);?>" <?=$update?'name="description"':'disabled="disabled"';?>/>
 			</div>
 			<?php
-				if($context){
+				if($ctx){
 			?>
 				<div>
 					<label>Status:</label>
-					<?=getval('status')?>
+					<?=
+						Bugs::template("subs/dropdown")
+							->run(array(
+								'value'=> $ctx?$ctx->s_id:null,
+								'options'=> Bugs::options_statuses(),
+								'name'=> 'status'
+							))
+					?>
 				</div>
 				<div>
 					<label>User:</label>
-					<a href="<?=Router::url(Router::$base.'/~'.getval('user')->name)?>">
-						<?=getval('user')->name;?>
+					<a href="<?=Router::url(Router::$base.'/~'.($ctx?$ctx->user->name:null))?>">
+						<?=($ctx?$ctx->user->name:null)?>
 					</a>
 				</div>
 				<div>
 					<label>Date Registered:</label>
-					<time datetime="<?=date('c',getval('date_created'));?>"><?=date('Y-m-d',getval('date_created'));?></time>
+					<time datetime="<?=date('c',($ctx?$ctx->date_created:null));?>"><?=date('Y-m-d',($ctx?$ctx->date_created:null));?></time>
 				</div>
 				<div>
 					<label>Date Modified:</label>
-					<time datetime="<?=date('c',getval('date_modified'));?>"><?=date('Y-m-d',getval('date_modified'));?></time>
+					<time datetime="<?=date('c',($ctx?$ctx->date_modified:null));?>"><?=date('Y-m-d',($ctx?$ctx->date_modified:null));?></time>
 				</div>
-				<input type="hidden" name="id" value="<?=getval('id')?>"/>
+				<input type="hidden" name="id" value="<?=($ctx?$ctx->id:null)?>"/>
 			<?php
 				}
 				if($update){
 			?>
-				<input type="submit" value="<?=$context?'Update':'Create'?>"/>
+				<input type="submit" value="<?=$ctx?'Update':'Create'?>"/>
 			<?php
 				}
 			?>
 		</form>
 		<?php
-			if($context){
+			if($ctx){
 				echo Bugs::template('subs/issues')
-						->run($context);
+						->run($ctx);
 			}
 		?>
 	</body>

+ 15 - 1
templates/subs/dropdown.php

@@ -1,3 +1,17 @@
 <?php
 	global $context;
-?>
+	if(!($context instanceof Arguments)){
+		$context = new Arguments($context);
+	}
+?>
+<select name="<?=$context->name?>">
+	<?php
+		foreach($context->options as $id => $desc){
+			echo "<option value=\"{$id}\"";
+			if(intval($id) == intval($context->value)){
+				echo " selected=\"selected\"";
+			}
+			echo ">{$desc}</option>";
+		}
+	?>
+</select>