Skip to content

Commit 012c316

Browse files
committed
added archive project feature
1 parent c01f229 commit 012c316

File tree

7 files changed

+67
-12
lines changed

7 files changed

+67
-12
lines changed

appinfo/database.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@
6969
<default>0</default>
7070
<length>4</length>
7171
</field>
72+
<field>
73+
<name>archived</name>
74+
<type>integer</type>
75+
<notnull>false</notnull>
76+
<default>0</default>
77+
<length>4</length>
78+
</field>
7279
<field>
7380
<name>created_at</name>
7481
<type>integer</type>

appinfo/info.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<name>Time Tracker</name>
66
<summary>Time Tracker App</summary>
77
<description><![CDATA[Time Tracker App]]></description>
8-
<version>0.0.32</version>
8+
<version>0.0.33</version>
99
<licence>agpl</licence>
1010
<author mail="[email protected]" >MTier Ltd.</author>
1111
<namespace>TimeTracker</namespace>

js/projects.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@
4040

4141
getProjects();
4242
});
43+
$('#show-archived-projects').change(function (e){
44+
getProjects();
45+
});
4346
$("#new-project-submit").click(function (e) {
4447
e.preventDefault();
4548
var selectedClient = $('#client-select').select2('data');
@@ -257,7 +260,7 @@
257260
target = dialogProjectEditForm.target;
258261
form = dialogProjectEditForm.find( "form" );
259262
var baseUrl = OC.generateUrl('/apps/timetracker/ajax/edit-project/'+target.getData().id);
260-
var jqxhr = $.post( baseUrl, {name:form.find("#name").val(), clientId:form.find("#client-select-popup").val(), locked:form.find("#locked").is(':checked')?'1':'0', allowedTags:form.find("#locked-select-tags").val(), allowedUsers:form.find("#locked-select-users").val() },function() {
263+
var jqxhr = $.post( baseUrl, {name:form.find("#name").val(), clientId:form.find("#client-select-popup").val(), locked:form.find("#locked").is(':checked')?'1':'0',archived:form.find("#archived").is(':checked')?'1':'0', allowedTags:form.find("#locked-select-tags").val(), allowedUsers:form.find("#locked-select-users").val() },function() {
261264
getProjects();
262265
$(dialogProjectEditForm).dialog("close");
263266
})
@@ -331,9 +334,12 @@
331334
if (isAdmin()){
332335
columns = columns.concat(adminColumns);
333336
}
337+
if ($("#show-archived-projects").is(':checked')){
338+
columns = columns.concat([{title:"Archived", field:"archived", widthGrow:1, formatter:"tickCross"}]);
339+
}
334340

335341
var table = new Tabulator("#projects", {
336-
ajaxURL:baseUrl,
342+
ajaxURL:baseUrl+"?archived="+($("#show-archived-projects").is(':checked')?'1':'0'),
337343
layout:"fitColumns",
338344
columns:columns,
339345
rowClick:function(e, row){
@@ -359,6 +365,7 @@
359365
// }];
360366

361367
form.find("#client-select-popup").select2("val",JSON.stringify(clientSelectData));
368+
form.find("#archived").prop('checked', row.getData().archived);
362369
if (isAdmin()){
363370
var tags = row.getData().origAllowedTags.map(function(e){ return e.id;});
364371
var users = row.getData().allowedUsers;

lib/Controller/AjaxController.php

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,15 @@ public function editProject($id) {
540540
$this->userToProjectMapper->insert($up);
541541
}
542542
}
543+
if (isset($this->request->archived) && $p->getArchived() != $this->request->archived){
544+
if (($this->isThisAdminUser() || $p->createdByUserUid == $this->userId) ){
545+
546+
$archived = $this->request->archived;
547+
$p->setArchived($archived);
548+
} else {
549+
return new JSONResponse(["Error" => "You cannot archive/unarchive projects created by somebody else"]);
550+
}
551+
}
543552

544553
$this->projectMapper->update($p);
545554

@@ -561,7 +570,8 @@ public function deleteProject($id) {
561570
}
562571
return $this->getProjects();
563572
}
564-
573+
574+
565575
/**
566576
*
567577
* @NoAdminRequired
@@ -583,17 +593,23 @@ public function getProjects(){
583593
* @NoCSRFRequired
584594
*/
585595
public function getProjectsTable(){
596+
$getArchived = 0;
597+
if (isset($this->request->archived)){
598+
$getArchived = $this->request->archived;
599+
}
600+
586601
if ($this->isThisAdminUser()){
587-
$projects = $this->projectMapper->findAllAdmin();
602+
$projects = $this->projectMapper->findAllAdmin($getArchived);
588603
} else {
589-
$projects = $this->projectMapper->findAll($this->userId);
604+
$projects = $this->projectMapper->findAll($this->userId,$getArchived);
590605
}
591606
$outProjects = [];
592607
foreach($projects as $p){
593608
$out = [];
594609
$out['id'] = $p->id;
595610
$out['name'] = $p->name;
596611
$out['locked'] = $p->locked;
612+
$out['archived'] = $p->archived;
597613
$out['client'] = null;
598614
$tags = $this->tagMapper->findAllAlowedForProject($p->id);
599615
$users = array_map(function ($utop) { return $utop->userUid;},$this->userToProjectMapper->findAllForProject($p->id));

lib/Db/Project.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class Project extends Entity {
1212
public $createdByUserUid;
1313
public $createdAt;
1414
public $locked;
15+
public $archived;
1516

1617

1718
public function __construct() {
@@ -23,5 +24,6 @@ public function __construct() {
2324
$this->addType('createdByUserUid', 'string');
2425
$this->addType('createdAt', 'integer');
2526
$this->addType('locked', 'integer');
27+
$this->addType('archived', 'integer');
2628
}
2729
}

lib/Db/ProjectMapper.php

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,22 @@ public function find($id) {
3737
}
3838

3939

40-
public function findAll($user){
41-
42-
$sql = 'SELECT tp.* FROM `*PREFIX*timetracker_project` tp left join `*PREFIX*timetracker_user_to_project` up '.
40+
public function findAll($user,$getArchived = 0){
41+
if ($getArchived) {
42+
$sql = 'SELECT tp.* FROM `*PREFIX*timetracker_project` tp left join `*PREFIX*timetracker_user_to_project` up '.
4343
'on up.project_id = tp.id where up.user_uid = ? order by tp.name asc';
44+
} else {
45+
$sql = 'SELECT tp.* FROM `*PREFIX*timetracker_project` tp left join `*PREFIX*timetracker_user_to_project` up '.
46+
'on up.project_id = tp.id where up.user_uid = ? and tp.archived != 1 order by tp.name asc';
47+
}
4448
return $this->findEntities($sql, [$user]);
4549
}
46-
public function findAllAdmin(){
47-
48-
$sql = 'SELECT tp.* FROM `*PREFIX*timetracker_project` tp order by tp.name asc';
50+
public function findAllAdmin($getArchived = 0){
51+
if ($getArchived) {
52+
$sql = 'SELECT tp.* FROM `*PREFIX*timetracker_project` tp order by tp.name asc';
53+
} else {
54+
$sql = 'SELECT tp.* FROM `*PREFIX*timetracker_project` tp where tp.archived != 1 order by tp.name asc';
55+
}
4956
return $this->findEntities($sql, []);
5057
}
5158

templates/content/projects.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,17 @@
88
<input type="submit" value="Add project" id="new-project-submit" class='ui-button primary'>
99
</form>
1010
</div>
11+
<div id="project-filter-container" class='left'>
12+
13+
<div class="checkbox">
14+
<label>
15+
<input id='show-archived-projects' type="checkbox" value="">
16+
Show archived projects
17+
</label>
18+
</div>
19+
20+
</div>
21+
1122
<div id="dialog-confirm" title="Confirmation Required" class='hidden'>
1223
Are you sure you want to delete this project?
1324
</div>
@@ -24,6 +35,10 @@
2435
<label for="locked">Locked</label>
2536
<input type="checkbox" name="locked" id="locked" value="" class="text ui-widget-content ui-corner-all">
2637
</div>
38+
<div class='' id='archived-div'>
39+
<label for="archived">Archived</label>
40+
<input type="checkbox" name="archived" id="archived" value="" class="text ui-widget-content ui-corner-all">
41+
</div>
2742
<div class='hidden' id='locked-options'>
2843
<label for="locked-select-tags">Allowed Tags</label>
2944
<div class="form-control" id="locked-select-tags"></div>
@@ -40,6 +55,7 @@
4055
</form>
4156
</div>
4257
<div class="clearfix"> </div>
58+
4359
<div id="projects">
4460
</div>
4561
</div>

0 commit comments

Comments
 (0)