changed the project home view to show open issue count

This commit is contained in:
hyung-hwan 2016-01-19 04:58:34 +00:00
parent eeac9d2a5f
commit 8b65c652f0
7 changed files with 144 additions and 32 deletions

View File

@ -21,6 +21,9 @@ class Project extends Controller
$this->load->library ('Language', 'lang'); $this->load->library ('Language', 'lang');
$this->lang->load ('common', CODEPOT_LANG); $this->lang->load ('common', CODEPOT_LANG);
$this->lang->load ('project', CODEPOT_LANG); $this->lang->load ('project', CODEPOT_LANG);
$this->load->library ('IssueHelper', 'issuehelper');
$this->lang->load ('issue', CODEPOT_LANG);
} }
function catalog ($filter = '', $offset = '') function catalog ($filter = '', $offset = '')
@ -118,6 +121,7 @@ class Project extends Controller
{ {
$this->load->model ('ProjectModel', 'projects'); $this->load->model ('ProjectModel', 'projects');
$this->load->model ('LogModel', 'logs'); $this->load->model ('LogModel', 'logs');
$this->load->model ('IssueModel', 'issues');
$login = $this->login->getUser (); $login = $this->login->getUser ();
if (CODEPOT_SIGNIN_COMPULSORY && $login['id'] == '') if (CODEPOT_SIGNIN_COMPULSORY && $login['id'] == '')
@ -155,6 +159,19 @@ class Project extends Controller
} }
else else
{ {
$total_open_issue_count = $this->issues->countIssues ('', $projectid, $this->issuehelper->_get_open_status_array($this->lang), 0);
if ($total_open_issue_count === FALSE) $open_issue_count = 0;
$data['total_open_issue_count'] = $total_open_issue_count;
if ($login['id'] != '')
{
$your_open_issue_count = $this->issues->countIssues ($login['id'], $projectid, $this->issuehelper->_get_open_status_array($this->lang), 0);
if ($your_open_issue_count === FALSE) $your_open_issue_count = 0;
}
else $your_open_issue_count = 0;
$data['your_open_issue_count'] = $your_open_issue_count;
$data['project'] = $project; $data['project'] = $project;
$data['log_entries'] = $log_entries; $data['log_entries'] = $log_entries;
$this->load->view ($this->VIEW_HOME, $data); $this->load->view ($this->VIEW_HOME, $data);

View File

@ -60,16 +60,16 @@ if ( ! function_exists('codepot_unixtimetodbdate'))
if ( ! function_exists('codepot_dbdatetodispdate')) if ( ! function_exists('codepot_dbdatetodispdate'))
{ {
function codepot_dbdatetodispdate($dbdate) function codepot_dbdatetodispdate($dbdate, $format = NULL)
{ {
// display time is in the local time zone. // display time is in the local time zone.
if (CODEPOT_DATABASE_STORE_GMT) if (CODEPOT_DATABASE_STORE_GMT)
{ {
return strftime('%Y-%m-%d %H:%M:%S %z', strtotime($dbdate . ' +0000')); return strftime(($format == NULL? '%Y-%m-%d %H:%M:%S %z': $format), strtotime($dbdate . ' +0000'));
} }
else else
{ {
return strftime('%Y-%m-%d %H:%M:%S %z', strtotime($dbdate)); return strftime(($format == NULL? '%Y-%m-%d %H:%M:%S %z': $format), strtotime($dbdate));
} }
} }
} }

View File

@ -137,4 +137,7 @@ $lang['MSG_SIGNIN_FAILURE'] = 'Cannot sign in';
$lang['MSG_PROJECT_MEMBERSHIP_REQUIRED'] = 'You have to be a member of the %s project to perform this task'; $lang['MSG_PROJECT_MEMBERSHIP_REQUIRED'] = 'You have to be a member of the %s project to perform this task';
$lang['MSG_FORM_INPUT_INCOMPLETE'] = 'Your input is incomplete'; $lang['MSG_FORM_INPUT_INCOMPLETE'] = 'Your input is incomplete';
$lang['MSG_DISCARD_CHANGES?'] = 'Do you want to discard changes?'; $lang['MSG_DISCARD_CHANGES?'] = 'Do you want to discard changes?';
$lang['FMT_TOTAL_OPEN_ISSUES_X'] = 'Total %d open issues';
$lang['FMT_YOUR_OPEN_ISSUES_X'] = '%d open issues assigned to you';
?> ?>

View File

@ -127,14 +127,14 @@ class IssueModel extends Model
return $query->result (); return $query->result ();
} }
function getMyIssues ($userid, $filter, $hour_limit = 0) function getMyIssues ($userid, $status_filter, $hour_limit = 0)
{ {
$this->db->trans_start (); $this->db->trans_start ();
if (strlen($userid) > 0) $this->db->where ('owner', $userid); if (strlen($userid) > 0) $this->db->where ('owner', $userid);
if (is_array($filter)) if (is_array($status_filter))
{ {
$this->db->where_in ('status', array_keys($filter)); $this->db->where_in ('status', array_keys($status_filter));
} }
if ($hour_limit > 0) if ($hour_limit > 0)
@ -160,6 +160,43 @@ class IssueModel extends Model
return $query->result (); return $query->result ();
} }
function countIssues ($userid, $projectid, $status_filter, $hour_limit = 0)
{
$this->db->trans_begin ();
if (strlen($userid) > 0) $this->db->where ('owner', $userid);
if (strlen($projectid) > 0) $this->db->where ('projectid', $projectid);
if (is_array($status_filter))
{
$this->db->where_in ('status', array_keys($status_filter));
}
if ($hour_limit > 0)
{
//$this->db->where ("updatedon >= SYSDATE() - INTERVAL {$hour_limit} HOUR");
$this->db->where ("updatedon >= CURRENT_TIMESTAMP - INTERVAL '{$hour_limit}' HOUR");
}
$this->db->select ('COUNT(id) AS issue_count');
$query = $this->db->get ('issue');
if ($this->db->trans_status() === FALSE)
{
$this->errmsg = $this->db->_error_message();
$this->db->trans_rollback ();
return FALSE;
}
$this->db->trans_commit();
$result = $query->result ();
if (empty($result))
{
// weird error but return 0.
return 0;
}
return $result[0]->issue_count;
}
function getFile ($userid, $project, $issueid, $filename) function getFile ($userid, $project, $issueid, $filename)
{ {
$this->db->trans_start (); $this->db->trans_start ();
@ -184,14 +221,15 @@ class IssueModel extends Model
$now = codepot_nowtodbdate(); $now = codepot_nowtodbdate();
// TODO: check if userid can do this.. // TODO: check if userid can do this..
$this->db->trans_start (); $this->db->trans_begin ();
$this->db->where ('projectid', $issue->projectid); $this->db->where ('projectid', $issue->projectid);
$this->db->select ('MAX(id) as maxid'); $this->db->select ('MAX(id) as maxid');
$query = $this->db->get ('issue'); $query = $this->db->get ('issue');
if ($this->db->trans_status() === FALSE) if ($this->db->trans_status() === FALSE)
{ {
$this->db->trans_complete (); $this->errmsg = $this->db->_error_message();
$this->db->trans_rollback ();
return FALSE; return FALSE;
} }
@ -213,6 +251,12 @@ class IssueModel extends Model
$this->db->set ('createdby', $userid); $this->db->set ('createdby', $userid);
$this->db->set ('updatedby', $userid); $this->db->set ('updatedby', $userid);
$this->db->insert ('issue'); $this->db->insert ('issue');
if ($this->db->trans_status() === FALSE)
{
$this->errmsg = $this->db->_error_message();
$this->db->trans_rollback ();
return FALSE;
}
$this->db->set ('projectid', $issue->projectid); $this->db->set ('projectid', $issue->projectid);
$this->db->set ('id', $newid); $this->db->set ('id', $newid);
@ -227,6 +271,12 @@ class IssueModel extends Model
$this->db->set ('updatedon', $now); $this->db->set ('updatedon', $now);
$this->db->set ('updatedby', $userid); $this->db->set ('updatedby', $userid);
$this->db->insert ('issue_change'); $this->db->insert ('issue_change');
if ($this->db->trans_status() === FALSE)
{
$this->errmsg = $this->db->_error_message();
$this->db->trans_rollback ();
return FALSE;
}
$this->db->set ('createdon', $now); $this->db->set ('createdon', $now);
$this->db->set ('type', 'issue'); $this->db->set ('type', 'issue');
@ -235,10 +285,14 @@ class IssueModel extends Model
$this->db->set ('userid', $userid); $this->db->set ('userid', $userid);
$this->db->set ('message', $newid); $this->db->set ('message', $newid);
$this->db->insert ('log'); $this->db->insert ('log');
if ($this->db->trans_status() === FALSE)
{
$this->errmsg = $this->db->_error_message();
$this->db->trans_rollback ();
return FALSE;
}
$this->db->trans_complete (); $this->db->trans_commit ();
if ($this->db->trans_status() === FALSE) return FALSE;
return $newid; return $newid;
} }

View File

@ -39,19 +39,30 @@ function render_wiki()
prettyPrint (); prettyPrint ();
$("#project_home_sidebar_info_box").accordion ({ $("#project_home_sidebar_info_box").accordion ({
collapsible: true collapsible: true,
heightStyle: "content"
}); });
<?php if ($total_open_issue_count > 0): ?>
$("#project_home_sidebar_issue_box").accordion ({
collapsible: true,
heightStyle: "content"
});
<?php endif; ?>
$("#project_home_sidebar_member_box").accordion ({ $("#project_home_sidebar_member_box").accordion ({
collapsible: true collapsible: true,
heightStyle: "content"
}); });
$("#project_home_sidebar_repo_box").accordion ({ $("#project_home_sidebar_repo_box").accordion ({
collapsible: true collapsible: true,
heightStyle: "content"
}); });
$("#project_home_sidebar_log_box").accordion ({ $("#project_home_sidebar_log_box").accordion ({
collapsible: true collapsible: true,
heightStyle: "content"
}); });
$("#project_home_sidebar_log_all_button").button ().click (function () { $("#project_home_sidebar_log_all_button").button ().click (function () {
@ -104,9 +115,9 @@ $this->load->view (
<!-- /////////////////////////////////////////////////////////////////////// --> <!-- /////////////////////////////////////////////////////////////////////// -->
<div class="codepot-sidebar" id="project_home_sidebar"> <div class="codepot-sidebar" id="project_home_sidebar">
<div id="project_home_sidebar_info_box" class="collapsible-box"> <div id="project_home_sidebar_info_box" class="collapsible-box">
<div id="project_home_sidebar_info_header" class="collapsible-box-header"><?php print $this->lang->line('Summary')?></div> <div id="project_home_sidebar_info_header" class="collapsible-box-header"><?php print $this->lang->line('Summary')?></div>
<ul id="project_home_sidebar_info_list" class="collapsible-box-list"> <ul id="project_home_sidebar_info_list" class="collapsible-box-list">
<li><?php print $this->lang->line('Created on')?> <?php print codepot_dbdatetodispdate($project->createdon);?></li> <li><?php print $this->lang->line('Created on')?> <?php print codepot_dbdatetodispdate($project->createdon);?></li>
<li><?php print $this->lang->line('Created by')?> <?php print $project->createdby;?></li> <li><?php print $this->lang->line('Created by')?> <?php print $project->createdby;?></li>
@ -115,6 +126,17 @@ $this->load->view (
</ul> </ul>
</div> </div>
<?php if ($total_open_issue_count > 0): ?>
<div id="project_home_sidebar_issue_box" class="collapsible-box">
<div id="project_home_sidebar_issue_header" class="collapsible-box-header"><?php print $this->lang->line('Issues')?></div>
<ul id="project_home_issue_stat_list" class="collapsible-box-list">
<li><a href='<?php print site_url() . "/issue/home/{$project->id}"; ?>'><?php printf ($this->lang->line('FMT_TOTAL_OPEN_ISSUES_X'), $total_open_issue_count); ?></a></li>
<li><a href='<?php print site_url() . "/issue/home/{$project->id}"; ?>'><?php printf ($this->lang->line('FMT_YOUR_OPEN_ISSUES_X'), $your_open_issue_count); ?></a></li>
</ul>
</div>
<?php endif; ?>
<div id="project_home_sidebar_member_box" class="collapsible-box"> <div id="project_home_sidebar_member_box" class="collapsible-box">
<div id="project_home_sidebar_member_header" class="collapsible-box-header"><?php print $this->lang->line('Members')?></div> <div id="project_home_sidebar_member_header" class="collapsible-box-header"><?php print $this->lang->line('Members')?></div>
<ul id="project_home_sidebar_member_list" class="collapsible-box-list"> <ul id="project_home_sidebar_member_list" class="collapsible-box-list">
@ -192,10 +214,8 @@ foreach ($urls as $url)
$xdot = $this->converter->AsciiToHex ('.'); $xdot = $this->converter->AsciiToHex ('.');
foreach ($log_entries as $log) foreach ($log_entries as $log)
{ {
if (CODEPOT_DATABASE_STORE_GMT)
$createdon = $log['createdon'] . ' +0000'; $createdon_mmdd = codepot_dbdatetodispdate ($log['createdon'], '%m-%d');
else
$createdon = $log['createdon'];
if ($log['type'] == 'code') if ($log['type'] == 'code')
{ {
@ -203,7 +223,7 @@ foreach ($urls as $url)
print '<tr class="odd">'; print '<tr class="odd">';
print '<td class="date">'; print '<td class="date">';
print strftime ('%m-%d', strtotime($createdon)); print $createdon_mmdd;
print '</td>'; print '</td>';
print '<td class="object">'; print '<td class="object">';
print anchor ( print anchor (
@ -247,7 +267,7 @@ foreach ($urls as $url)
{ {
print '<tr class="odd">'; print '<tr class="odd">';
print '<td class="date">'; print '<td class="date">';
print strftime ('%m-%d', strtotime($createdon)); print $createdon_mmdd;
print '</td>'; print '</td>';
print '<td class="object">'; print '<td class="object">';

View File

@ -6,6 +6,24 @@
* project home view * project home view
*-----------------------------------------------*/ *-----------------------------------------------*/
#project_home_issue_stat_list li {
margin-top: 0.1em;
margin-bottom: 0.1em;
line-height: 2em;
background-color: #BB4444;
border: none;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
}
#project_home_issue_stat_list a {
color: white;
font-weight: bold;
}
#project_home_sidebar_log_all_button { #project_home_sidebar_log_all_button {
color: #1C94C4; color: #1C94C4;
} }