* delete useless mobile web file.
This commit is contained in:
@@ -1,27 +0,0 @@
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
</div>
|
||||
<form method='post' enctype='multipart/form-data' target='hiddenwin'>
|
||||
<h3><?php echo "BUG#$bug->id $bug->title";?></h3>
|
||||
<table class='table-1'>
|
||||
<tr>
|
||||
<td class='w-80px'><?php echo $lang->bug->assignedTo?></td>
|
||||
<td><?php echo html::select('assignedTo', $users, $bug->resolvedBy, "class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo $lang->bug->openedBuild;?></td>
|
||||
<td><?php echo html::select('openedBuild[]', $builds, $bug->openedBuild, 'size=4 multiple=multiple class=select-3');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo $lang->comment;?></td>
|
||||
<td><?php echo html::textarea('comment', '');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='text-center' colspan='2'>
|
||||
<?php echo html::submitButton($lang->bug->buttonConfirm, 'data-inline="true" data-theme="b"');?>
|
||||
<?php echo html::linkButton($lang->goback, $this->createLink('bug', 'view', "bugID=$bug->id"), 'self', "data-inline='true'");?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<?php include '../../common/view/m.action.html.php';?>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1 +0,0 @@
|
||||
<?php include '../../common/view/m.action.html.php';?>
|
||||
@@ -1,23 +0,0 @@
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
</div>
|
||||
<form class='form-condensed' method='post' target='hiddenwin'>
|
||||
<h3><?php echo "BUG#$bug->id " . $bug->title;?></h3>
|
||||
<table class='table-1'>
|
||||
<tr>
|
||||
<td class='w-60px'><?php echo $lang->bug->assignedTo;?></td>
|
||||
<td><?php echo html::select('assignedTo', $users, $bug->assignedTo, "class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='w-60px'><?php echo $lang->comment;?></td>
|
||||
<td><?php echo html::textarea('comment', '', "data-mini='true'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='text-center' colspan='2'>
|
||||
<?php echo html::submitButton('', 'data-inline="true" data-theme="b"'); ?>
|
||||
<?php echo html::linkButton($lang->goback, $this->createLink('bug', 'view', "bugID=$bug->id"), 'self', "data-inline='true'");?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<?php include '../../common/view/m.action.html.php';?>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1,39 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The browse view file of bug module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package bug
|
||||
* @version $Id: browse.html.php 4660 2013-04-17 08:22:02Z chencongzhi520@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
</div>
|
||||
<?php $this->session->set('bugType', '');?>
|
||||
<?php foreach($bugs as $bug):?>
|
||||
<?php if($bug->status == 'closed') continue;?>
|
||||
<div data-role="collapsible-set">
|
||||
<div data-role="collapsible" data-collapsed="<?php echo $this->session->bugID == $bug->id ? 'false' : 'true'?>" class='collapsible'>
|
||||
<?php if($this->session->bugID == $bug->id) echo "<script>showDetail('bug', $bug->id);</script>";?>
|
||||
<h1 onClick="showDetail('bug', <?php echo $bug->id;?>)"><?php echo $bug->title;?></h1>
|
||||
<div><?php echo $bug->steps;?></div>
|
||||
<div id='item<?php echo $bug->id;?>'><?php echo $bug->steps;?></div>
|
||||
<div data-role='navbar'>
|
||||
<ul>
|
||||
<?php
|
||||
common::printIcon('bug', 'confirmBug', "bugID=$bug->id", $bug, 'button', '', '', 'iframe');
|
||||
common::printIcon('bug', 'assignTo', "bugID=$bug->id", '', 'button', '', '', 'iframe');
|
||||
common::printIcon('bug', 'resolve', "bugID=$bug->id", $bug, 'button', '', '', 'iframe');
|
||||
common::printIcon('bug', 'close', "bugID=$bug->id", $bug, 'button', '', '', 'iframe');
|
||||
common::printIcon('bug', 'activate', "bugID=$bug->id", $bug, 'button', '', '', 'iframe');
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
<?php $pager->show('left', 'mobile')?>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1,19 +0,0 @@
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
</div>
|
||||
<form class='form-condensed' method='post' target='hiddenwin'>
|
||||
<h3><?php echo "BUG#$bug->id $bug->title";?></h3>
|
||||
<table class='table-1'>
|
||||
<tr>
|
||||
<td class='w-60px'><?php echo $lang->comment;?></td>
|
||||
<td><?php echo html::textarea('comment', '');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='text-center' colspan='2'>
|
||||
<?php echo html::submitButton('', 'data-inline="true" data-theme="b"');?>
|
||||
<?php echo html::linkButton($lang->goback, $this->createLink('bug', 'view', "bugID=$bug->id"), 'self', "data-inline='true'");?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<?php include '../../common/view/m.action.html.php';?>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1,23 +0,0 @@
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
</div>
|
||||
<form class='form-condensed' method='post' target='hiddenwin'>
|
||||
<h3><?php echo "BUG#$bug->id $bug->title";?></h3>
|
||||
<table class='table-1'>
|
||||
<tr>
|
||||
<td class='w-60px'><?php echo $lang->bug->assignedTo;?></td>
|
||||
<td><?php echo html::select('assignedTo', $users, $bug->assignedTo);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='w-60px'><?php echo $lang->comment;?></td>
|
||||
<td><?php echo html::textarea('comment', '');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='text-center' colspan='2'>
|
||||
<?php echo html::submitButton($lang->bug->buttonConfirm, 'data-inline="true" data-theme="b"');?>
|
||||
<?php echo html::linkButton($lang->goback, $this->createLink('bug', 'view', "bugID=$bug->id"), 'self', "data-inline='true'");?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<?php include '../../common/view/m.action.html.php';?>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1,39 +0,0 @@
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
</div>
|
||||
<form class='form-condensed' method='post' target='hiddenwin'>
|
||||
<h3><?php echo "BUG#$bug->id $bug->title";?></h3>
|
||||
<table class='table-1'>
|
||||
<tr>
|
||||
<td class='w-80px'><?php unset($lang->bug->resolutionList['tostory']); echo $lang->bug->resolution ;?></td>
|
||||
<td><?php echo html::select('resolution', $lang->bug->resolutionList, '', 'class=form-control onchange=setDuplicate(this.value)');?></div>
|
||||
</tr>
|
||||
<tr id='duplicateBugBox' style='display:none'>
|
||||
<td class='w-80px'><?php echo $lang->bug->duplicateBug;?></td>
|
||||
<td><?php echo $lang->bug->duplicateBug . html::input('duplicateBug');?></div>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='w-80px'><?php echo $lang->bug->resolvedBuild?></td>
|
||||
<td><?php echo html::select('resolvedBuild', $builds);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo $lang->bug->resolvedDate?></div>
|
||||
<td><?php echo html::input('resolvedDate', helper::now());?></div>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo $lang->bug->assignedTo?></div>
|
||||
<td><?php echo html::select('assignedTo', $users, $assignedTo);?></div>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo $lang->comment;?></td>
|
||||
<td><?php echo html::textarea('comment');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='text-center' colspan='2'>
|
||||
<?php echo html::submitButton('', 'data-inline="true" data-theme="b"');?>
|
||||
<?php echo html::linkButton($lang->goback, $this->createLink('bug', 'view', "bugID=$bug->id"), 'self', "data-inline='true'");?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<?php include '../../common/view/m.action.html.php';?>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1,2 +0,0 @@
|
||||
<?php
|
||||
include "./sendmail.html.php";
|
||||
@@ -1,5 +0,0 @@
|
||||
<?php
|
||||
$this->session->set('bugID', $bug->id);
|
||||
if($this->session->bugType) die($this->locate($this->createLink('my', 'bug', "type={$this->session->bugType}")));
|
||||
die($this->locate($this->createLink('bug', 'browse', "productID=$productID")));
|
||||
?>
|
||||
@@ -1,25 +0,0 @@
|
||||
<div id='actionbox'>
|
||||
<fieldset>
|
||||
<hr color='#dddddd'/>
|
||||
|
||||
<ol id='historyItem' style='padding-left:20px; font-size:11px'>
|
||||
<?php $i = 1; ?>
|
||||
<?php foreach($actions as $action):?>
|
||||
<li value='<?php echo $i ++;?>'>
|
||||
<?php
|
||||
if(isset($users[$action->actor])) $action->actor = $users[$action->actor];
|
||||
if($action->action == 'assigned' and isset($users[$action->extra]) ) $action->extra = $users[$action->extra];
|
||||
if(strpos($action->actor, ':') !== false) $action->actor = substr($action->actor, strpos($action->actor, ':') + 1);
|
||||
?>
|
||||
<span><?php $this->action->printAction($action);?></span>
|
||||
<?php if(!empty($action->comment) or !empty($action->history)):?>
|
||||
<?php if(!empty($action->comment)) echo "<div class='history'>";?>
|
||||
<?php if($action->comment) echo strip_tags($action->comment) == $action->comment ? nl2br($action->comment) : $action->comment; ?>
|
||||
<?php if(!empty($action->comment)) echo "</div>";?>
|
||||
<?php endif;?>
|
||||
</li>
|
||||
<?php endforeach;?>
|
||||
</ol>
|
||||
|
||||
</fieldset>
|
||||
</div>
|
||||
@@ -1,20 +0,0 @@
|
||||
<?php if($extView = $this->getExtViewFile(__FILE__)){include $extView; return helper::cd();}?>
|
||||
<iframe frameborder='0' name='hiddenwin' id='hiddenwin' scrolling='no' class='hidden'></iframe>
|
||||
<?php
|
||||
if(isset($pageJS)) js::execute($pageJS); // load the js for current page.
|
||||
|
||||
/* Load hook files for current page. */
|
||||
$extPath = dirname(dirname(dirname(realpath($viewFile)))) . '/common/ext/view/';
|
||||
$extHookRule = $extPath . 'm.footer.*.hook.php';
|
||||
$extHookFiles = glob($extHookRule);
|
||||
if($extHookFiles) foreach($extHookFiles as $extHookFile) include $extHookFile;
|
||||
?>
|
||||
<?php if($this->server->HTTP_X_PJAX == false):?>
|
||||
<script>
|
||||
/* May be fix bug #576. */
|
||||
$(function(){$("#main").css('padding-top', $("div[data-role='header']").height() + 'px')})
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<?php endif;?>
|
||||
@@ -1,8 +0,0 @@
|
||||
</div>
|
||||
<?php if($extView = $this->getExtViewFile(__FILE__)){include $extView; return helper::cd();}?>
|
||||
<iframe frameborder='0' name='hiddenwin' id='hiddenwin' scrolling='no' class='hidden'></iframe>
|
||||
<script laguage='Javascript'>
|
||||
<?php if(isset($pageJS)) echo $pageJS;?>
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,12 +0,0 @@
|
||||
<?php
|
||||
if($extView = $this->getExtViewFile(__FILE__)){include $extView; return helper::cd();}
|
||||
include 'm.header.lite.html.php';
|
||||
?>
|
||||
<div data-role="header" data-position='fixed' style='border-bottom:1px solid #ddd'>
|
||||
<?php echo html::a($this->createLink('my', 'index', '', 'html'), $lang->goPC, '', "id='goPC' data-icon='forward' class='ui-btn-left'")?>
|
||||
<h1 style='margin-left:0px'><?php echo $app->company->name?></h1>
|
||||
<?php echo html::a($this->createLink('user', 'logout'), $lang->logout, '', "id='logout' data-icon='delete' class='ui-btn-right'")?>
|
||||
<div data-role="navbar" id='mainMenu'>
|
||||
<?php commonModel::printMainmenu($this->moduleName, $this->methodName)?>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -1,44 +0,0 @@
|
||||
<?php if($extView = $this->getExtViewFile(__FILE__)){include $extView; return helper::cd();}?>
|
||||
<?php
|
||||
$webRoot = $this->app->getWebRoot();
|
||||
$jsRoot = $webRoot . "js/";
|
||||
$themeRoot = $webRoot . "theme/";
|
||||
$defaultTheme = $webRoot . 'theme/default/';
|
||||
$langTheme = $themeRoot . 'lang/' . $app->getClientLang() . '.css';
|
||||
$clientTheme = $this->app->getClientTheme();
|
||||
?>
|
||||
<?php if($this->server->HTTP_X_PJAX == false):?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<?php
|
||||
echo html::title($title . ' - ' . $lang->zentaoPMS);
|
||||
|
||||
js::exportConfigVars();
|
||||
if($config->debug)
|
||||
{
|
||||
js::import($jsRoot . 'jquery/mobile/jquery-1.10.1.min.js');
|
||||
js::import($jsRoot . 'm.my.full.js');
|
||||
js::import($jsRoot . 'jquery/mobile/jquery.mobile.min.js');
|
||||
js::import($jsRoot . 'jquery/jquery.pjax.js');
|
||||
|
||||
css::import($defaultTheme . 'jquery.mobile.css');
|
||||
css::import($defaultTheme . 'm.style.css');
|
||||
css::import($langTheme);
|
||||
}
|
||||
else
|
||||
{
|
||||
js::import($jsRoot . 'm.all.js');
|
||||
css::import($defaultTheme . 'm.' . $this->cookie->lang . '.default.css');
|
||||
}
|
||||
|
||||
if(isset($pageCSS)) css::internal($pageCSS);
|
||||
|
||||
echo html::favicon($webRoot . 'favicon.ico');
|
||||
?>
|
||||
</head>
|
||||
<body>
|
||||
<div data-role="page" id='main'>
|
||||
<?php endif;?>
|
||||
@@ -1,38 +0,0 @@
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
<div data-role='navbar' id='subMenu'>
|
||||
<ul>
|
||||
<?php foreach($config->mobile->bugBar as $menu):?>
|
||||
<?php $active = $type == $menu ? 'ui-btn-active' : ''?>
|
||||
<li>
|
||||
<?php
|
||||
$subMenuName = $menu == 'assignedTo' ? $lang->bug->assignToMe : $lang->bug->{$menu . 'Me'};
|
||||
echo html::a($this->createLink('my', 'bug', "type=$menu"), $subMenuName, '', "class='$active' data-theme='d'");
|
||||
?>
|
||||
</li>
|
||||
<?php endforeach;?>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<?php $this->session->set('bugType', $type);?>
|
||||
<?php foreach($bugs as $bug):?>
|
||||
<div data-role="collapsible-set">
|
||||
<div data-role="collapsible" data-collapsed="<?php echo $this->session->bugID == $bug->id ? 'false' : 'true'?>" class='collapsible'>
|
||||
<?php if($this->session->bugID == $bug->id) echo "<script>showDetail('bug', $bug->id);</script>";?>
|
||||
<h1 onClick="showDetail('bug', <?php echo $bug->id;?>)"><?php echo $bug->title;?></h1>
|
||||
<div><?php echo $bug->steps;?></div>
|
||||
<div id='item<?php echo $bug->id;?>'></div>
|
||||
<div data-role='content' class='text-center'>
|
||||
<?php
|
||||
common::printIcon('bug', 'confirmBug', "bugID=$bug->id", $bug, 'button', '', '', 'iframe');
|
||||
common::printIcon('bug', 'assignTo', "bugID=$bug->id", '', 'button', '', '', 'iframe');
|
||||
common::printIcon('bug', 'resolve', "bugID=$bug->id", $bug, 'button', '', '', 'iframe');
|
||||
common::printIcon('bug', 'close', "bugID=$bug->id", $bug, 'button', '', '', 'iframe');
|
||||
common::printIcon('bug', 'activate', "bugID=$bug->id", $bug, 'button', '', '', 'iframe');
|
||||
?>
|
||||
</div>
|
||||
<?php if(end($bugs) == $bug) echo "<hr />";?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
<?php $pager->show('left', 'mobile')?>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1,44 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The story view file of dashboard module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package my
|
||||
* @version $Id: story.html.php 4735 2013-05-03 08:30:02Z chencongzhi520@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
<div data-role='navbar' id='subMenu'>
|
||||
<ul>
|
||||
<?php foreach($config->mobile->storyBar as $menu):?>
|
||||
<?php $active = $type == $menu ? 'ui-btn-active' : ''?>
|
||||
<li><?php echo html::a($this->createLink('my', 'story', "type=$menu"), $lang->my->storyMenu->{$menu . 'Me'}, '', "class='$active' data-theme='d'")?></li>
|
||||
<?php endforeach;?>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<?php foreach($stories as $story):?>
|
||||
<div data-role="collapsible-set">
|
||||
<div data-role="collapsible" data-collapsed="true">
|
||||
<?php if($this->session->storyID == $story->id) echo "<script>showDetail('story', $story->id);</script>";?>
|
||||
<h1 onClick="showDetail('story', <?php echo $story->id;?>)"><?php echo $story->title;?></h1>
|
||||
<div id='item<?php echo $story->id;?>'></div>
|
||||
<div data-role='content' class='text-center'>
|
||||
<?php
|
||||
if(!$story->deleted)
|
||||
{
|
||||
common::printIcon('story', 'review', "storyID=$story->id", $story);
|
||||
common::printIcon('story', 'close', "storyID=$story->id", $story);
|
||||
common::printIcon('story', 'activate', "storyID=$story->id", $story);
|
||||
common::printIcon('story', 'delete', "storyID=$story->id", '', '', '', 'hiddenwin');
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
<?php $pager->show('left', 'mobile')?>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1,46 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The task view file of dashboard module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package my
|
||||
* @version $Id: task.html.php 4735 2013-05-03 08:30:02Z chencongzhi520@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
<div data-role='navbar' id='subMenu'>
|
||||
<ul>
|
||||
<?php foreach($config->mobile->taskBar as $menu):?>
|
||||
<?php $active = $type == $menu ? 'ui-btn-active' : ''?>
|
||||
<li><?php echo html::a($this->createLink('my', 'task', "type=$menu"), $lang->my->taskMenu->{$menu . 'Me'}, '', "class='$active' data-theme='d'")?></li>
|
||||
<?php endforeach;?>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<?php $this->session->set('taskType', $type);?>
|
||||
<?php foreach($tasks as $task):?>
|
||||
<div data-role="collapsible-set">
|
||||
<div data-role="collapsible" data-collapsed="<?php echo $this->session->taskID == $task->id ? 'false' : 'true'?>" class='collapsible'>
|
||||
<?php if($this->session->taskID == $task->id) echo "<script>showDetail('task', $task->id);</script>";?>
|
||||
<h1 onClick="showDetail('task', <?php echo $task->id;?>)"><?php echo $task->name;?></h1>
|
||||
<div><?php echo $task->desc;?></div>
|
||||
<div id='item<?php echo $task->id;?>'><?php echo $task->desc;?></div>
|
||||
<div data-role='content' class='text-center'>
|
||||
<?php
|
||||
common::printIcon('task', 'assignTo', "projectID=$task->project&taskID=$task->id", $task);
|
||||
common::printIcon('task', 'start', "taskID=$task->id", $task);
|
||||
common::printIcon('task', 'recordEstimate', "taskID=$task->id", $task);
|
||||
common::printIcon('task', 'finish', "taskID=$task->id", $task);
|
||||
common::printIcon('task', 'close', "taskID=$task->id", $task);
|
||||
common::printIcon('task', 'activate', "taskID=$task->id", $task);
|
||||
?>
|
||||
</div>
|
||||
<?php if(end($tasks) == $task) echo "<hr />";?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
<?php $pager->show('left', 'mobile')?>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1,54 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The todo view file of dashboard module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package my
|
||||
* @version $Id: todo.html.php 4735 2013-05-03 08:30:02Z chencongzhi520@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
<div data-role='navbar' id='subMenu'>
|
||||
<ul>
|
||||
<?php foreach($config->mobile->todoBar as $period):?>
|
||||
<?php $active = $type == $period ? 'ui-btn-active' : ''?>
|
||||
<li><?php echo html::a($this->createLink('my', 'todo', "type=$period"), $lang->todo->periods[$period], '', "class='$active' data-theme='d'")?></li>
|
||||
<?php endforeach;?>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<?php $this->session->set('todoType', $type);?>
|
||||
<?php foreach($todos as $todo):?>
|
||||
<?php if(!$todo->private or ($todo->private and $todo->account == $app->user->account)):?>
|
||||
<div data-role="collapsible-set">
|
||||
<div data-role="collapsible" data-collapsed="true" class='collapsible'>
|
||||
<h1 onClick="showDetail('todo', <?php echo $todo->id;?>)"><?php echo $todo->name;?></h1>
|
||||
<div><?php echo $todo->desc;?></div>
|
||||
<div id='item<?php echo $todo->id;?>'><?php echo $todo->desc;?></div>
|
||||
<div data-role='content' class='text-center'>
|
||||
<?php
|
||||
common::printIcon('todo', 'finish', "id=$todo->id", $todo, 'button', '', 'hiddenwin');
|
||||
if($todo->account == $app->user->account)
|
||||
{
|
||||
if($type != 'today') common::printIcon('todo', 'import2Today', "todoID=$todo->id");
|
||||
common::printIcon('todo', 'delete', "todoID=$todo->id", '', 'button', '', 'hiddenwin');
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php if(end($todos) == $todo) echo "<hr />";?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php endforeach;?>
|
||||
<?php echo $pager->show('left', 'mobile')?>
|
||||
<div data-role='footer' data-position='fixed'>
|
||||
<div data-role='navbar' data-iconpos="left">
|
||||
<ul>
|
||||
<li><?php echo html::a($this->createLink('todo', 'batchCreate'), $lang->todo->create, '', "data-icon='plus' data-theme='e'")?></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1,29 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The html template file of index method of index module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
||||
* @author Yangyang Shi <shiyangyang@cnezsoft.com>
|
||||
* @package ZenTaoPMS
|
||||
* @version $Id$
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
</div>
|
||||
<ul data-role='listview'>
|
||||
<?php foreach($productStats as $product):?>
|
||||
<li>
|
||||
<table class='table table-fixed'>
|
||||
<tr>
|
||||
<td><h3><?php echo $product->name?></h3></td>
|
||||
<td width='120'>
|
||||
<?php echo html::a($this->createLink('product', 'browse', "productID=$product->id"), $lang->story->common, '', "data-role='button' data-mini='true' data-inline='true'")?>
|
||||
<?php echo html::a($this->createLink('bug', 'browse', "productID=$product->id"), $lang->bug->common, '', "data-role='button' data-mini='true' data-inline='true'")?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</li>
|
||||
<?php endforeach;?>
|
||||
</ul>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1,26 +0,0 @@
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
</div>
|
||||
<?php foreach($stories as $story):?>
|
||||
<?php if($story->status == 'closed') continue;?>
|
||||
<div data-role="collapsible-set">
|
||||
<div data-role="collapsible" data-collapsed="<?php echo $this->session->storyID == $story->id ? 'false' : 'true'?>" class='collapsible'>
|
||||
<?php if($this->session->storyID == $story->id) echo "<script>showDetail('story', $story->id);</script>";?>
|
||||
<h1 onClick="showDetail('story', <?php echo $story->id;?>)"><?php echo $story->title;?></h1>
|
||||
|
||||
<div id='item<?php echo $story->id;?>'></div>
|
||||
<div data-role='content' class='text-center'>
|
||||
<?php
|
||||
if(!$story->deleted)
|
||||
{
|
||||
common::printIcon('story', 'review', "storyID=$story->id", $story);
|
||||
common::printIcon('story', 'close', "storyID=$story->id", $story);
|
||||
common::printIcon('story', 'delete', "storyID=$story->id", '', '', '', 'hiddenwin');
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
<?php $pager->show('left', 'mobile')?>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1,19 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The html template file of index method of index module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package ZenTaoPMS
|
||||
* @version $Id: index.html.php 4129 2013-01-18 01:58:14Z wwccss $
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
</div>
|
||||
<ul data-role='listview'>
|
||||
<?php foreach($projectStats as $project):?>
|
||||
<li><?php echo html::a($this->createLink('project', 'task', "projectID=$project->id"), $project->name)?></li>
|
||||
<?php endforeach;?>
|
||||
</ul>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1,26 +0,0 @@
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
</div>
|
||||
<?php $this->session->set('taskType', '');?>
|
||||
<?php foreach($tasks as $task):?>
|
||||
<div data-role="collapsible-set">
|
||||
<div data-role="collapsible" data-collapsed="<?php echo $this->session->taskID == $task->id ? 'false' : 'true'?>" class='collapsible'>
|
||||
<?php if($this->session->taskID == $task->id) echo "<script>showDetail('task', $task->id);</script>";?>
|
||||
<h1 onClick="showDetail('task', <?php echo $task->id;?>)"><?php echo $task->name;?></h1>
|
||||
<div><?php echo $task->desc?></div>
|
||||
<div id='item<?php echo $task->id;?>'></div>
|
||||
<div data-role='content' class='text-center'>
|
||||
<?php
|
||||
common::printIcon('task', 'assignTo', "projectID=$task->project&taskID=$task->id", $task);
|
||||
common::printIcon('task', 'start', "taskID=$task->id", $task);
|
||||
common::printIcon('task', 'recordEstimate', "taskID=$task->id", $task);
|
||||
common::printIcon('task', 'finish', "taskID=$task->id", $task);
|
||||
common::printIcon('task', 'close', "taskID=$task->id", $task);
|
||||
common::printIcon('task', 'activate', "taskID=$task->id", $task);
|
||||
?>
|
||||
</div>
|
||||
<?php if(end($tasks) == $task) echo "<hr />";?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
<?php $pager->show('left', 'mobile')?>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1,18 +0,0 @@
|
||||
function setStory(reason)
|
||||
{
|
||||
if(reason == 'duplicate')
|
||||
{
|
||||
$('#duplicateStoryBox').show();
|
||||
$('#childStoriesBox').hide();
|
||||
}
|
||||
else if(reason == 'subdivided')
|
||||
{
|
||||
$('#duplicateStoryBox').hide();
|
||||
$('#childStoriesBox').show();
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#duplicateStoryBox').hide();
|
||||
$('#childStoriesBox').hide();
|
||||
}
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
function switchShow(result)
|
||||
{
|
||||
if(result == 'reject')
|
||||
{
|
||||
$('#rejectedReasonBox').show();
|
||||
$('#preVersionBox').hide();
|
||||
$('#assignedTo').val('closed');
|
||||
}
|
||||
else if(result == 'revert')
|
||||
{
|
||||
$('#preVersionBox').show();
|
||||
$('#rejectedReasonBox').hide();
|
||||
$('#duplicateStoryBox').hide();
|
||||
$('#childStoriesBox').hide();
|
||||
$('#assignedTo').val(assignedTo);
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#preVersionBox').hide();
|
||||
$('#rejectedReasonBox').hide();
|
||||
$('#duplicateStoryBox').hide();
|
||||
$('#childStoriesBox').hide();
|
||||
$('#rejectedReasonBox').hide();
|
||||
$('#assignedTo').val(assignedTo);
|
||||
}
|
||||
}
|
||||
|
||||
function setStory(reason)
|
||||
{
|
||||
if(reason == 'duplicate')
|
||||
{
|
||||
$('#duplicateStoryBox').show();
|
||||
$('#childStoriesBox').hide();
|
||||
}
|
||||
else if(reason == 'subdivided')
|
||||
{
|
||||
$('#duplicateStoryBox').hide();
|
||||
$('#childStoriesBox').show();
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#duplicateStoryBox').hide();
|
||||
$('#childStoriesBox').hide();
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
<div>
|
||||
<p><strong><?php echo $lang->story->spec?><strong></p>
|
||||
<?php echo $story->spec;?>
|
||||
</div>
|
||||
<div>
|
||||
<p><strong><?php echo $lang->story->verify?><strong></p>
|
||||
<?php echo $story->verify;?>
|
||||
</div>
|
||||
<?php include '../../common/view/m.action.html.php'?>
|
||||
@@ -1,44 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The close view file of story module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package story
|
||||
* @version $Id: close.html.php 4129 2013-01-18 01:58:14Z wwccss $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
</div>
|
||||
<form class='form-condensed' method='post' target='hiddenwin'>
|
||||
<h3><?php echo $lang->story->close . $lang->colon . $story->title;?></h3>
|
||||
<table class='table-1'>
|
||||
<tr>
|
||||
<td class='w-70px'><?php echo $lang->story->closedReason;?></td>
|
||||
<td><?php echo html::select('closedReason', $lang->story->reasonList, '', 'onchange="setStory(this.value)"');?></td>
|
||||
</tr>
|
||||
<tr id='duplicateStoryBox' class='hide'>
|
||||
<td><?php echo $lang->story->duplicateStory;?></td>
|
||||
<td><?php echo html::input('duplicateStory', '');?></td>
|
||||
</tr>
|
||||
<tr id='childStoriesBox' class='hide'>
|
||||
<td><?php echo $lang->story->childStories;?></td>
|
||||
<td><?php echo html::input('childStories', '');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo $lang->story->comment;?></td>
|
||||
<td><?php echo html::textarea('comment', '');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='text-center' colspan='2'>
|
||||
<?php
|
||||
echo html::submitButton('', "data-inline='true' data-theme='b'");
|
||||
echo html::linkButton($lang->goback, $this->createLink('story', 'view', "storyID=$story->id"), 'self', "data-inline='true'");
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1,66 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The view file of review method of story module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package story
|
||||
* @version $Id: review.html.php 4129 2013-01-18 01:58:14Z wwccss $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
</div>
|
||||
<h3><?php echo $lang->story->review . $lang->colon . $story->title?></h3>
|
||||
<form class='form-condensed' method='post' target='hiddenwin'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<td class='w-70px'><?php echo $lang->story->reviewedDate;?></td>
|
||||
<td><?php echo html::input('reviewedDate', helper::today());?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo $lang->story->reviewResult;?></td>
|
||||
<td><?php echo html::select('result', $lang->story->reviewResultList, '', 'onchange="switchShow(this.value)"');?></td>
|
||||
</tr>
|
||||
<tr id='rejectedReasonBox' class='hide'>
|
||||
<td><?php echo $lang->story->rejectedReason;?></td>
|
||||
<td><?php echo html::select('closedReason', $lang->story->reasonList, '', 'onchange="setStory(this.value)"');?></td>
|
||||
</tr>
|
||||
<tr id='duplicateStoryBox' class='hide'>
|
||||
<td><?php echo $lang->story->duplicateStory;?></td>
|
||||
<td><?php echo html::input('duplicateStory', '');?></td>
|
||||
</tr>
|
||||
<tr id='childStoriesBox' class='hide'>
|
||||
<td><?php echo $lang->story->childStories;?></td>
|
||||
<td><?php echo html::input('childStories', '');?></td>
|
||||
</tr>
|
||||
<?php if($story->status == 'changed' or ($story->status == 'draft' and $story->version > 1)):?>
|
||||
<tr id='preVersionBox' class='hide'>
|
||||
<td><?php echo $lang->story->preVersion;?></td>
|
||||
<td><?php echo html::radio('preVersion', array_combine(range($story->version - 1, 1), range($story->version - 1, 1)), $story->version - 1);?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<td><?php echo $lang->story->assignedTo;?></td>
|
||||
<td><?php echo html::select('assignedTo', $users, $story->lastEditedBy ? $story->lastEditedBy : $story->openedBy);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo $lang->story->reviewedBy;?></td>
|
||||
<td><?php echo html::input('reviewedBy', $app->user->account . ', ');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo $lang->story->comment;?></td>
|
||||
<td><?php echo html::textarea('comment', '');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='text-center' colspan='2'>
|
||||
<?php
|
||||
echo html::submitButton('', "data-inline='true' data-theme='b'");
|
||||
echo html::linkButton($lang->goback, $this->createLink('story', 'view', "storyID=$story->id"), 'self', "data-inline='true'");
|
||||
?>
|
||||
</td>
|
||||
<tr>
|
||||
</table>
|
||||
</form>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1,2 +0,0 @@
|
||||
<?php
|
||||
include "./sendmail.html.php";
|
||||
@@ -1,2 +0,0 @@
|
||||
<?php $this->session->set('storyID', $story->id);?>
|
||||
<?php die($this->locate($this->createLink('product', 'browse', "productID=$product->id")));?>
|
||||
@@ -1,16 +0,0 @@
|
||||
/* If left = 0, warning. */
|
||||
function checkLeft()
|
||||
{
|
||||
value = $("#left").val();
|
||||
if(isNaN(parseInt(value)) || value == 0)
|
||||
{
|
||||
if(confirm(confirmFinish))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
</div>
|
||||
<form method='post' target='hiddenwin' onsubmit='return checkLeft();'>
|
||||
<h3><?php echo $lang->task->activate . $this->lang->colon . $task->name;?></h3>
|
||||
<table class='table-1'>
|
||||
<tr>
|
||||
<td class="w-70px"><?php echo $lang->task->assignedTo;?></td>
|
||||
<td><?php echo html::select('assignedTo', $members, $task->openedBy);?>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo $lang->task->left;?></td>
|
||||
<td><?php echo html::input('left', '');?>
|
||||
</div>
|
||||
<tr>
|
||||
<td><?php echo $lang->comment;?></td>
|
||||
<td><?php echo html::textarea('comment', '', "data-mini='true'");?></td>
|
||||
</tr>
|
||||
<tr class="a-center">
|
||||
<td colspan="2">
|
||||
<?php
|
||||
echo html::submitButton('', 'data-inline="true" data-theme="b"');
|
||||
echo html::linkButton($lang->goback, $this->createLink('task', 'view', "taskID=$task->id"), 'self', "data-inline='true'");
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<?php include '../../common/view/m.action.html.php';?>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1 +0,0 @@
|
||||
<?php include '../../common/view/m.action.html.php';?>
|
||||
@@ -1,29 +0,0 @@
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
</div>
|
||||
<form class='form-condensed' method='post' target='hiddenwin'>
|
||||
<h3><?php echo $lang->task->assignTo . $this->lang->colon . $task->name;?></h3>
|
||||
<table class='table-1'>
|
||||
<tr>
|
||||
<td class="w-70px"><?php echo $lang->task->assignedTo;?></td>
|
||||
<td><?php echo html::select('assignedTo', $users, $task->openedBy);?>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo $lang->task->left;?></td>
|
||||
<td><?php echo html::input('left', $task->left);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo $lang->comment;?></td>
|
||||
<td><?php echo html::textarea('comment', '', "data-mini='true'");?></td>
|
||||
</tr>
|
||||
<tr class='text-center'>
|
||||
<td colspan="2">
|
||||
<?php
|
||||
echo html::submitButton('', 'data-inline="true" data-theme="b"');
|
||||
echo html::linkButton($lang->goback, $this->createLink('task', 'view', "taskID=$task->id"), 'self', "data-inline='true'");
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<?php include '../../common/view/m.action.html.php';?>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1,22 +0,0 @@
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
</div>
|
||||
<form method='post' target='hiddenwin' onsubmit='return checkLeft();'>
|
||||
<h3><?php echo $lang->task->close . $this->lang->colon . $task->name;?></h3>
|
||||
|
||||
<table class='table-1'>
|
||||
<tr>
|
||||
<td class='w-70px'><?php echo $lang->comment;?></td>
|
||||
<td><?php echo html::textarea('comment', '', "data-mini='true'");?></td>
|
||||
</tr>
|
||||
<tr class='text-center'>
|
||||
<td colspan="2">
|
||||
<?php
|
||||
echo html::submitButton('', 'data-inline="true" data-theme="b"');
|
||||
echo html::linkButton($lang->goback, $this->createLink('task', 'view', "taskID=$task->id"), 'self', "data-inline='true'");
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<?php include '../../common/view/m.action.html.php';?>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1,30 +0,0 @@
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
</div>
|
||||
<form method='post' target='hiddenwin' onsubmit='return checkLeft();'>
|
||||
<h3><?php echo $lang->task->finish . $this->lang->colon . $task->name;?></h3>
|
||||
<table class='table-1'>
|
||||
<tr>
|
||||
<td class="w-70px"><?php echo $lang->task->consumed;?></td>
|
||||
<td><?php echo html::input('consumed', $task->consumed);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo $lang->task->assignedTo;?></td>
|
||||
<td><?php echo html::select('assignedTo', $users, $task->openedBy);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo $lang->comment;?></td>
|
||||
<td><?php echo html::textarea('comment', '', "data-mini='true'");?></td>
|
||||
</tr>
|
||||
<tr class='text-center'>
|
||||
<td colspan="2">
|
||||
<?php
|
||||
echo html::submitButton('', 'data-inline="true" data-theme="b"');
|
||||
echo html::linkButton($lang->goback, $this->createLink('task', 'view', "taskID=$task->id"), 'self', "data-inline='true'");
|
||||
echo html::hidden('finishedDate', $date);
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<?php include '../../common/view/m.action.html.php';?>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1,43 +0,0 @@
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
</div>
|
||||
<form class='form-condensed' method='post' target='hiddenwin'>
|
||||
<h3><?php echo $lang->task->recordEstimate . $this->lang->colon . $task->name;?></h3>
|
||||
<?php
|
||||
$allConsumed = 0;
|
||||
$allLeft = 0;
|
||||
foreach($estimates as $estimate)
|
||||
{
|
||||
$allConsumed += $estimate->consumed;
|
||||
$allLeft = $estimate->left;
|
||||
}
|
||||
?>
|
||||
<table class='table-1'>
|
||||
<tr>
|
||||
<td colspan="2"><?php echo $lang->task->consumed . ':' . $allConsumed . $lang->task->hour . ', ' . $lang->task->left . ':' . $allLeft . $lang->task->hour;?></td>
|
||||
</tr>
|
||||
<?php if($task->status == 'wait' or $task->status == 'doing'):?>
|
||||
<tr>
|
||||
<td class="w-70px"><?php echo $lang->task->consumedThisTime;?></td>
|
||||
<td><?php echo html::input('consumed[1]', '');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="w-70px"><?php echo $lang->task->left;?></td>
|
||||
<td><?php echo html::input('left[1]', '');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='w-70px'><?php echo $lang->comment;?></td>
|
||||
<td><?php echo html::textarea('comment', '', "data-mini='true'");?></td>
|
||||
</tr>
|
||||
<tr class="a-center">
|
||||
<td colspan="2">
|
||||
<?php
|
||||
echo html::submitButton('', 'data-inline="true" data-theme="b"');
|
||||
echo html::linkButton($lang->goback, $this->createLink('task', 'view', "taskID=$task->id"), 'self', "data-inline='true'");
|
||||
echo html::hidden('dates[1]', helper::today()) . html::hidden("id[1]", 1);
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<table>
|
||||
</form>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1,2 +0,0 @@
|
||||
<?php
|
||||
include './sendmail.html.php';
|
||||
@@ -1,30 +0,0 @@
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
</div>
|
||||
<form method='post' target='hiddenwin' onsubmit='return checkLeft();'>
|
||||
<h3><?php echo $lang->task->start . $this->lang->colon . $task->name;?></h3>
|
||||
<table class='table-1'>
|
||||
<tr>
|
||||
<td class='w-70px'><?php echo $lang->task->consumed;?></td>
|
||||
<td><?php echo html::input('consumed', $task->consumed);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo $lang->task->left;?></td>
|
||||
<td><?php echo html::input('left', $task->left);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo $lang->comment;?></td>
|
||||
<td><?php echo html::textarea('comment', '', "data-mini='true'");?></td>
|
||||
</tr>
|
||||
<tr class="a-center">
|
||||
<td colspan="2">
|
||||
<?php
|
||||
echo html::submitButton('', 'data-inline="true" data-theme="b"');
|
||||
echo html::linkButton($lang->goback, $this->createLink('task', 'view', "taskID=$task->id"), 'self', "data-inline='true'");
|
||||
echo html::hidden('realStarted', helper::today());
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<?php include '../../common/view/m.action.html.php';?>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1,5 +0,0 @@
|
||||
<?php
|
||||
$this->session->set('taskID', $task->id);
|
||||
if($this->session->taskType) die($this->locate($this->createLink('my', 'task', "type={$this->session->taskType}")));
|
||||
die($this->locate($this->createLink('project', 'task', "projectID=$project->id")));
|
||||
?>
|
||||
@@ -1,2 +0,0 @@
|
||||
<?php include '../../common/view/m.action.html.php';?>
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The batch create view of todo module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
||||
* @author Congzhi Chen <congzhi@cnezsoft.com>
|
||||
* @package todo
|
||||
* @version $Id: create.html.php 2741 2012-04-07 07:24:21Z areyou123456 $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/m.header.html.php';?>
|
||||
</div>
|
||||
<form class='form-condensed' method='post' target='hiddenwin'>
|
||||
<?php
|
||||
echo html::hidden("date", date('Y-m-d'));
|
||||
for($i = 1; $i <= 5; $i++)
|
||||
{
|
||||
echo html::input("names[$i]", '', "placeholder='{$lang->todo->common}{$lang->todo->name}'");
|
||||
echo html::hidden("types[$i]", 'custom');
|
||||
echo html::hidden("pris[$i]", 3);
|
||||
echo html::hidden("descs[$i]", '');
|
||||
echo html::hidden("begins[$i]", '2400');
|
||||
echo html::hidden("ends[$i]", '2400');
|
||||
}
|
||||
?>
|
||||
<p class='text-center'>
|
||||
<?php
|
||||
echo html::submitButton('', "data-inline='true' data-theme='b'");
|
||||
echo html::linkButton($lang->goback, $this->createLink('my', 'todo', "type={$this->session->todoType}"), 'self', "data-inline='true'");
|
||||
?>
|
||||
</p>
|
||||
</form>
|
||||
<?php include '../../common/view/m.footer.html.php';?>
|
||||
@@ -1 +0,0 @@
|
||||
function setForm(){}
|
||||
@@ -1,39 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The html template file of login method of user module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package ZenTaoPMS
|
||||
* @version $Id: login.html.php 4612 2013-03-18 07:46:16Z wwccss $
|
||||
*/
|
||||
?>
|
||||
<?php
|
||||
include '../../common/view/m.header.lite.html.php';
|
||||
$lang->user->placeholder->account = $lang->user->account;
|
||||
$lang->user->placeholder->password = $lang->user->password;
|
||||
js::set('holders', $lang->user->placeholder) ;
|
||||
?>
|
||||
<div data-role="header" data-position="fixed">
|
||||
<h1 style='margin-left:0px;margin-right:0px'><?php echo $app->company->name;?></h1>
|
||||
</div>
|
||||
<div data-role="content" >
|
||||
<form class='form-condensed' method='post' target='hiddenwin'>
|
||||
<table align='center'>
|
||||
<tr><td><?php echo html::input('account')?></td></tr>
|
||||
<tr><td><?php echo html::password('password')?></td></tr>
|
||||
<tr><td><?php echo html::select('lang', $config->langs, $this->app->getClientLang(), 'class=select-2 onchange=selectLang(this.value)');?></td></tr>
|
||||
<tr>
|
||||
<td align='center'>
|
||||
<?php
|
||||
echo html::submitButton($lang->login, "data-inline='true' data-theme='b'");
|
||||
if($app->company->guest) echo html::linkButton($lang->user->asGuest, $this->createLink($config->default->module), '', "data-inline='true'");
|
||||
echo html::hidden('referer', $referer);
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<?php include '../../common/view/m.footer.lite.html.php';?>
|
||||
@@ -1,822 +0,0 @@
|
||||
// jquery.pjax.js
|
||||
// copyright chris wanstrath
|
||||
// https://github.com/defunkt/jquery-pjax
|
||||
|
||||
(function($){
|
||||
|
||||
// When called on a container with a selector, fetches the href with
|
||||
// ajax into the container or with the data-pjax attribute on the link
|
||||
// itself.
|
||||
//
|
||||
// Tries to make sure the back button and ctrl+click work the way
|
||||
// you'd expect.
|
||||
//
|
||||
// Exported as $.fn.pjax
|
||||
//
|
||||
// Accepts a jQuery ajax options object that may include these
|
||||
// pjax specific options:
|
||||
//
|
||||
//
|
||||
// container - Where to stick the response body. Usually a String selector.
|
||||
// $(container).html(xhr.responseBody)
|
||||
// (default: current jquery context)
|
||||
// push - Whether to pushState the URL. Defaults to true (of course).
|
||||
// replace - Want to use replaceState instead? That's cool.
|
||||
//
|
||||
// For convenience the second parameter can be either the container or
|
||||
// the options object.
|
||||
//
|
||||
// Returns the jQuery object
|
||||
function fnPjax(selector, container, options) {
|
||||
var context = this
|
||||
return this.on('click.pjax', selector, function(event) {
|
||||
var opts = $.extend({}, optionsFor(container, options))
|
||||
if (!opts.container)
|
||||
opts.container = $(this).attr('data-pjax') || context
|
||||
handleClick(event, opts)
|
||||
})
|
||||
}
|
||||
|
||||
// Public: pjax on click handler
|
||||
//
|
||||
// Exported as $.pjax.click.
|
||||
//
|
||||
// event - "click" jQuery.Event
|
||||
// options - pjax options
|
||||
//
|
||||
// Examples
|
||||
//
|
||||
// $(document).on('click', 'a', $.pjax.click)
|
||||
// // is the same as
|
||||
// $(document).pjax('a')
|
||||
//
|
||||
// $(document).on('click', 'a', function(event) {
|
||||
// var container = $(this).closest('[data-pjax-container]')
|
||||
// $.pjax.click(event, container)
|
||||
// })
|
||||
//
|
||||
// Returns nothing.
|
||||
function handleClick(event, container, options) {
|
||||
options = optionsFor(container, options)
|
||||
|
||||
var link = event.currentTarget
|
||||
|
||||
if (link.tagName.toUpperCase() !== 'A')
|
||||
throw "$.fn.pjax or $.pjax.click requires an anchor element"
|
||||
|
||||
// Middle click, cmd click, and ctrl click should open
|
||||
// links in a new tab as normal.
|
||||
if ( event.which > 1 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey )
|
||||
return
|
||||
|
||||
// Ignore cross origin links
|
||||
if ( location.protocol !== link.protocol || location.hostname !== link.hostname )
|
||||
return
|
||||
|
||||
// Ignore anchors on the same page
|
||||
if (link.hash && link.href.replace(link.hash, '') ===
|
||||
location.href.replace(location.hash, ''))
|
||||
return
|
||||
|
||||
// Ignore empty anchor "foo.html#"
|
||||
if (link.href === location.href + '#')
|
||||
return
|
||||
|
||||
var defaults = {
|
||||
url: link.href,
|
||||
container: $(link).attr('data-pjax'),
|
||||
target: link,
|
||||
fragment: null
|
||||
}
|
||||
|
||||
var opts = $.extend({}, defaults, options)
|
||||
var clickEvent = $.Event('pjax:click')
|
||||
$(link).trigger(clickEvent, [opts])
|
||||
|
||||
if (!clickEvent.isDefaultPrevented()) {
|
||||
pjax(opts)
|
||||
event.preventDefault()
|
||||
}
|
||||
}
|
||||
|
||||
// Public: pjax on form submit handler
|
||||
//
|
||||
// Exported as $.pjax.submit
|
||||
//
|
||||
// event - "click" jQuery.Event
|
||||
// options - pjax options
|
||||
//
|
||||
// Examples
|
||||
//
|
||||
// $(document).on('submit', 'form', function(event) {
|
||||
// var container = $(this).closest('[data-pjax-container]')
|
||||
// $.pjax.submit(event, container)
|
||||
// })
|
||||
//
|
||||
// Returns nothing.
|
||||
function handleSubmit(event, container, options) {
|
||||
options = optionsFor(container, options)
|
||||
|
||||
var form = event.currentTarget
|
||||
|
||||
if (form.tagName.toUpperCase() !== 'FORM')
|
||||
throw "$.pjax.submit requires a form element"
|
||||
|
||||
var defaults = {
|
||||
type: form.method.toUpperCase(),
|
||||
url: form.action,
|
||||
data: $(form).serializeArray(),
|
||||
container: $(form).attr('data-pjax'),
|
||||
target: form,
|
||||
fragment: null
|
||||
}
|
||||
|
||||
pjax($.extend({}, defaults, options))
|
||||
|
||||
event.preventDefault()
|
||||
}
|
||||
|
||||
// Loads a URL with ajax, puts the response body inside a container,
|
||||
// then pushState()'s the loaded URL.
|
||||
//
|
||||
// Works just like $.ajax in that it accepts a jQuery ajax
|
||||
// settings object (with keys like url, type, data, etc).
|
||||
//
|
||||
// Accepts these extra keys:
|
||||
//
|
||||
// container - Where to stick the response body.
|
||||
// $(container).html(xhr.responseBody)
|
||||
// push - Whether to pushState the URL. Defaults to true (of course).
|
||||
// replace - Want to use replaceState instead? That's cool.
|
||||
//
|
||||
// Use it just like $.ajax:
|
||||
//
|
||||
// var xhr = $.pjax({ url: this.href, container: '#main' })
|
||||
// console.log( xhr.readyState )
|
||||
//
|
||||
// Returns whatever $.ajax returns.
|
||||
function pjax(options) {
|
||||
options = $.extend(true, {}, $.ajaxSettings, pjax.defaults, options)
|
||||
|
||||
if ($.isFunction(options.url)) {
|
||||
options.url = options.url()
|
||||
}
|
||||
|
||||
var target = options.target
|
||||
|
||||
var hash = parseURL(options.url).hash
|
||||
|
||||
var context = options.context = findContainerFor(options.container)
|
||||
|
||||
// We want the browser to maintain two separate internal caches: one
|
||||
// for pjax'd partial page loads and one for normal page loads.
|
||||
// Without adding this secret parameter, some browsers will often
|
||||
// confuse the two.
|
||||
if (!options.data) options.data = {}
|
||||
options.data._pjax = context.selector
|
||||
|
||||
function fire(type, args) {
|
||||
var event = $.Event(type, { relatedTarget: target })
|
||||
context.trigger(event, args)
|
||||
return !event.isDefaultPrevented()
|
||||
}
|
||||
|
||||
var timeoutTimer
|
||||
|
||||
options.beforeSend = function(xhr, settings) {
|
||||
// No timeout for non-GET requests
|
||||
// Its not safe to request the resource again with a fallback method.
|
||||
if (settings.type !== 'GET') {
|
||||
settings.timeout = 0
|
||||
}
|
||||
|
||||
xhr.setRequestHeader('X-PJAX', 'true')
|
||||
xhr.setRequestHeader('X-PJAX-Container', context.selector)
|
||||
|
||||
if (!fire('pjax:beforeSend', [xhr, settings]))
|
||||
return false
|
||||
|
||||
if (settings.timeout > 0) {
|
||||
timeoutTimer = setTimeout(function() {
|
||||
if (fire('pjax:timeout', [xhr, options]))
|
||||
xhr.abort('timeout')
|
||||
}, settings.timeout)
|
||||
|
||||
// Clear timeout setting so jquerys internal timeout isn't invoked
|
||||
settings.timeout = 0
|
||||
}
|
||||
|
||||
options.requestUrl = parseURL(settings.url).href
|
||||
}
|
||||
|
||||
options.complete = function(xhr, textStatus) {
|
||||
if (timeoutTimer)
|
||||
clearTimeout(timeoutTimer)
|
||||
|
||||
fire('pjax:complete', [xhr, textStatus, options])
|
||||
|
||||
fire('pjax:end', [xhr, options])
|
||||
}
|
||||
|
||||
options.error = function(xhr, textStatus, errorThrown) {
|
||||
var container = extractContainer("", xhr, options)
|
||||
|
||||
var allowed = fire('pjax:error', [xhr, textStatus, errorThrown, options])
|
||||
if (options.type == 'GET' && textStatus !== 'abort' && allowed) {
|
||||
locationReplace(container.url)
|
||||
}
|
||||
}
|
||||
|
||||
options.success = function(data, status, xhr) {
|
||||
// If $.pjax.defaults.version is a function, invoke it first.
|
||||
// Otherwise it can be a static string.
|
||||
var currentVersion = (typeof $.pjax.defaults.version === 'function') ?
|
||||
$.pjax.defaults.version() :
|
||||
$.pjax.defaults.version
|
||||
|
||||
var latestVersion = xhr.getResponseHeader('X-PJAX-Version')
|
||||
|
||||
var container = extractContainer(data, xhr, options)
|
||||
|
||||
// If there is a layout version mismatch, hard load the new url
|
||||
if (currentVersion && latestVersion && currentVersion !== latestVersion) {
|
||||
locationReplace(container.url)
|
||||
return
|
||||
}
|
||||
|
||||
// If the new response is missing a body, hard load the page
|
||||
if (!container.contents) {
|
||||
locationReplace(container.url)
|
||||
return
|
||||
}
|
||||
|
||||
pjax.state = {
|
||||
id: options.id || uniqueId(),
|
||||
url: container.url,
|
||||
title: container.title,
|
||||
container: context.selector,
|
||||
fragment: options.fragment,
|
||||
timeout: options.timeout
|
||||
}
|
||||
|
||||
if (options.push || options.replace) {
|
||||
window.history.replaceState(pjax.state, container.title, container.url)
|
||||
}
|
||||
|
||||
if (container.title) document.title = container.title
|
||||
context.html(container.contents)
|
||||
executeScriptTags(container.scripts)
|
||||
|
||||
// Scroll to top by default
|
||||
if (typeof options.scrollTo === 'number')
|
||||
$(window).scrollTop(options.scrollTo)
|
||||
|
||||
// If the URL has a hash in it, make sure the browser
|
||||
// knows to navigate to the hash.
|
||||
if ( hash !== '' ) {
|
||||
// Avoid using simple hash set here. Will add another history
|
||||
// entry. Replace the url with replaceState and scroll to target
|
||||
// by hand.
|
||||
//
|
||||
// window.location.hash = hash
|
||||
var url = parseURL(container.url)
|
||||
url.hash = hash
|
||||
|
||||
pjax.state.url = url.href
|
||||
window.history.replaceState(pjax.state, container.title, url.href)
|
||||
|
||||
var target = $(url.hash)
|
||||
if (target.length) $(window).scrollTop(target.offset().top)
|
||||
}
|
||||
|
||||
fire('pjax:success', [data, status, xhr, options])
|
||||
}
|
||||
|
||||
|
||||
// Initialize pjax.state for the initial page load. Assume we're
|
||||
// using the container and options of the link we're loading for the
|
||||
// back button to the initial page. This ensures good back button
|
||||
// behavior.
|
||||
if (!pjax.state) {
|
||||
pjax.state = {
|
||||
id: uniqueId(),
|
||||
url: window.location.href,
|
||||
title: document.title,
|
||||
container: context.selector,
|
||||
fragment: options.fragment,
|
||||
timeout: options.timeout
|
||||
}
|
||||
window.history.replaceState(pjax.state, document.title)
|
||||
}
|
||||
|
||||
// Cancel the current request if we're already pjaxing
|
||||
var xhr = pjax.xhr
|
||||
if ( xhr && xhr.readyState < 4) {
|
||||
xhr.onreadystatechange = $.noop
|
||||
xhr.abort()
|
||||
}
|
||||
|
||||
pjax.options = options
|
||||
var xhr = pjax.xhr = $.ajax(options)
|
||||
|
||||
if (xhr.readyState > 0) {
|
||||
if (options.push && !options.replace) {
|
||||
// Cache current container element before replacing it
|
||||
cachePush(pjax.state.id, context.clone().contents())
|
||||
|
||||
window.history.pushState(null, "", stripPjaxParam(options.requestUrl))
|
||||
}
|
||||
|
||||
fire('pjax:start', [xhr, options])
|
||||
fire('pjax:send', [xhr, options])
|
||||
}
|
||||
|
||||
return pjax.xhr
|
||||
}
|
||||
|
||||
// Public: Reload current page with pjax.
|
||||
//
|
||||
// Returns whatever $.pjax returns.
|
||||
function pjaxReload(container, options) {
|
||||
var defaults = {
|
||||
url: window.location.href,
|
||||
push: false,
|
||||
replace: true,
|
||||
scrollTo: false
|
||||
}
|
||||
|
||||
return pjax($.extend(defaults, optionsFor(container, options)))
|
||||
}
|
||||
|
||||
// Internal: Hard replace current state with url.
|
||||
//
|
||||
// Work for around WebKit
|
||||
// https://bugs.webkit.org/show_bug.cgi?id=93506
|
||||
//
|
||||
// Returns nothing.
|
||||
function locationReplace(url) {
|
||||
window.history.replaceState(null, "", "#")
|
||||
window.location.replace(url)
|
||||
}
|
||||
|
||||
|
||||
var initialPop = true
|
||||
var initialURL = window.location.href
|
||||
var initialState = window.history.state
|
||||
|
||||
// Initialize $.pjax.state if possible
|
||||
// Happens when reloading a page and coming forward from a different
|
||||
// session history.
|
||||
if (initialState && initialState.container) {
|
||||
pjax.state = initialState
|
||||
}
|
||||
|
||||
// Non-webkit browsers don't fire an initial popstate event
|
||||
if ('state' in window.history) {
|
||||
initialPop = false
|
||||
}
|
||||
|
||||
// popstate handler takes care of the back and forward buttons
|
||||
//
|
||||
// You probably shouldn't use pjax on pages with other pushState
|
||||
// stuff yet.
|
||||
function onPjaxPopstate(event) {
|
||||
var state = event.state
|
||||
|
||||
if (state && state.container) {
|
||||
// When coming forward from a separate history session, will get an
|
||||
// initial pop with a state we are already at. Skip reloading the current
|
||||
// page.
|
||||
if (initialPop && initialURL == state.url) return
|
||||
|
||||
var container = $(state.container)
|
||||
if (container.length) {
|
||||
var direction, contents = cacheMapping[state.id]
|
||||
|
||||
if (pjax.state) {
|
||||
// Since state ids always increase, we can deduce the history
|
||||
// direction from the previous state.
|
||||
direction = pjax.state.id < state.id ? 'forward' : 'back'
|
||||
|
||||
// Cache current container before replacement and inform the
|
||||
// cache which direction the history shifted.
|
||||
cachePop(direction, pjax.state.id, container.clone().contents())
|
||||
}
|
||||
|
||||
var popstateEvent = $.Event('pjax:popstate', {
|
||||
state: state,
|
||||
direction: direction
|
||||
})
|
||||
container.trigger(popstateEvent)
|
||||
|
||||
var options = {
|
||||
id: state.id,
|
||||
url: state.url,
|
||||
container: container,
|
||||
push: false,
|
||||
fragment: state.fragment,
|
||||
timeout: state.timeout,
|
||||
scrollTo: false
|
||||
}
|
||||
|
||||
if (contents) {
|
||||
container.trigger('pjax:start', [null, options])
|
||||
|
||||
if (state.title) document.title = state.title
|
||||
container.html(contents)
|
||||
pjax.state = state
|
||||
|
||||
container.trigger('pjax:end', [null, options])
|
||||
} else {
|
||||
pjax(options)
|
||||
}
|
||||
|
||||
// Force reflow/relayout before the browser tries to restore the
|
||||
// scroll position.
|
||||
container[0].offsetHeight
|
||||
} else {
|
||||
locationReplace(location.href)
|
||||
}
|
||||
}
|
||||
initialPop = false
|
||||
}
|
||||
|
||||
// Fallback version of main pjax function for browsers that don't
|
||||
// support pushState.
|
||||
//
|
||||
// Returns nothing since it retriggers a hard form submission.
|
||||
function fallbackPjax(options) {
|
||||
var url = $.isFunction(options.url) ? options.url() : options.url,
|
||||
method = options.type ? options.type.toUpperCase() : 'GET'
|
||||
|
||||
var form = $('<form>', {
|
||||
method: method === 'GET' ? 'GET' : 'POST',
|
||||
action: url,
|
||||
style: 'display:none'
|
||||
})
|
||||
|
||||
if (method !== 'GET' && method !== 'POST') {
|
||||
form.append($('<input>', {
|
||||
type: 'hidden',
|
||||
name: '_method',
|
||||
value: method.toLowerCase()
|
||||
}))
|
||||
}
|
||||
|
||||
var data = options.data
|
||||
if (typeof data === 'string') {
|
||||
$.each(data.split('&'), function(index, value) {
|
||||
var pair = value.split('=')
|
||||
form.append($('<input>', {type: 'hidden', name: pair[0], value: pair[1]}))
|
||||
})
|
||||
} else if (typeof data === 'object') {
|
||||
for (key in data)
|
||||
form.append($('<input>', {type: 'hidden', name: key, value: data[key]}))
|
||||
}
|
||||
|
||||
$(document.body).append(form)
|
||||
form.submit()
|
||||
}
|
||||
|
||||
// Internal: Generate unique id for state object.
|
||||
//
|
||||
// Use a timestamp instead of a counter since ids should still be
|
||||
// unique across page loads.
|
||||
//
|
||||
// Returns Number.
|
||||
function uniqueId() {
|
||||
return (new Date).getTime()
|
||||
}
|
||||
|
||||
// Internal: Strips _pjax param from url
|
||||
//
|
||||
// url - String
|
||||
//
|
||||
// Returns String.
|
||||
function stripPjaxParam(url) {
|
||||
return url
|
||||
.replace(/\?_pjax=[^&]+&?/, '?')
|
||||
.replace(/_pjax=[^&]+&?/, '')
|
||||
.replace(/[\?&]$/, '')
|
||||
}
|
||||
|
||||
// Internal: Parse URL components and returns a Locationish object.
|
||||
//
|
||||
// url - String URL
|
||||
//
|
||||
// Returns HTMLAnchorElement that acts like Location.
|
||||
function parseURL(url) {
|
||||
var a = document.createElement('a')
|
||||
a.href = url
|
||||
return a
|
||||
}
|
||||
|
||||
// Internal: Build options Object for arguments.
|
||||
//
|
||||
// For convenience the first parameter can be either the container or
|
||||
// the options object.
|
||||
//
|
||||
// Examples
|
||||
//
|
||||
// optionsFor('#container')
|
||||
// // => {container: '#container'}
|
||||
//
|
||||
// optionsFor('#container', {push: true})
|
||||
// // => {container: '#container', push: true}
|
||||
//
|
||||
// optionsFor({container: '#container', push: true})
|
||||
// // => {container: '#container', push: true}
|
||||
//
|
||||
// Returns options Object.
|
||||
function optionsFor(container, options) {
|
||||
// Both container and options
|
||||
if ( container && options )
|
||||
options.container = container
|
||||
|
||||
// First argument is options Object
|
||||
else if ( $.isPlainObject(container) )
|
||||
options = container
|
||||
|
||||
// Only container
|
||||
else
|
||||
options = {container: container}
|
||||
|
||||
// Find and validate container
|
||||
if (options.container)
|
||||
options.container = findContainerFor(options.container)
|
||||
|
||||
return options
|
||||
}
|
||||
|
||||
// Internal: Find container element for a variety of inputs.
|
||||
//
|
||||
// Because we can't persist elements using the history API, we must be
|
||||
// able to find a String selector that will consistently find the Element.
|
||||
//
|
||||
// container - A selector String, jQuery object, or DOM Element.
|
||||
//
|
||||
// Returns a jQuery object whose context is `document` and has a selector.
|
||||
function findContainerFor(container) {
|
||||
container = $(container)
|
||||
|
||||
if ( !container.length ) {
|
||||
throw "no pjax container for " + container.selector
|
||||
} else if ( container.selector !== '' && container.context === document ) {
|
||||
return container
|
||||
} else if ( container.attr('id') ) {
|
||||
return $('#' + container.attr('id'))
|
||||
} else {
|
||||
throw "cant get selector for pjax container!"
|
||||
}
|
||||
}
|
||||
|
||||
// Internal: Filter and find all elements matching the selector.
|
||||
//
|
||||
// Where $.fn.find only matches descendants, findAll will test all the
|
||||
// top level elements in the jQuery object as well.
|
||||
//
|
||||
// elems - jQuery object of Elements
|
||||
// selector - String selector to match
|
||||
//
|
||||
// Returns a jQuery object.
|
||||
function findAll(elems, selector) {
|
||||
return elems.filter(selector).add(elems.find(selector));
|
||||
}
|
||||
|
||||
function parseHTML(html) {
|
||||
return $.parseHTML(html, document, true)
|
||||
}
|
||||
|
||||
// Internal: Extracts container and metadata from response.
|
||||
//
|
||||
// 1. Extracts X-PJAX-URL header if set
|
||||
// 2. Extracts inline <title> tags
|
||||
// 3. Builds response Element and extracts fragment if set
|
||||
//
|
||||
// data - String response data
|
||||
// xhr - XHR response
|
||||
// options - pjax options Object
|
||||
//
|
||||
// Returns an Object with url, title, and contents keys.
|
||||
function extractContainer(data, xhr, options) {
|
||||
var obj = {}
|
||||
|
||||
// Prefer X-PJAX-URL header if it was set, otherwise fallback to
|
||||
// using the original requested url.
|
||||
obj.url = stripPjaxParam(xhr.getResponseHeader('X-PJAX-URL') || options.requestUrl)
|
||||
|
||||
// Attempt to parse response html into elements
|
||||
if (/<html/i.test(data)) {
|
||||
var $head = $(parseHTML(data.match(/<head[^>]*>([\s\S.]*)<\/head>/i)[0]))
|
||||
var $body = $(parseHTML(data.match(/<body[^>]*>([\s\S.]*)<\/body>/i)[0]))
|
||||
} else {
|
||||
var $head = $body = $(parseHTML(data))
|
||||
}
|
||||
|
||||
// If response data is empty, return fast
|
||||
if ($body.length === 0)
|
||||
return obj
|
||||
|
||||
// If there's a <title> tag in the header, use it as
|
||||
// the page's title.
|
||||
obj.title = findAll($head, 'title').last().text()
|
||||
|
||||
if (options.fragment) {
|
||||
// If they specified a fragment, look for it in the response
|
||||
// and pull it out.
|
||||
if (options.fragment === 'body') {
|
||||
var $fragment = $body
|
||||
} else {
|
||||
var $fragment = findAll($body, options.fragment).first()
|
||||
}
|
||||
|
||||
if ($fragment.length) {
|
||||
obj.contents = $fragment.contents()
|
||||
|
||||
// If there's no title, look for data-title and title attributes
|
||||
// on the fragment
|
||||
if (!obj.title)
|
||||
obj.title = $fragment.attr('title') || $fragment.data('title')
|
||||
}
|
||||
|
||||
} else if (!/<html/i.test(data)) {
|
||||
obj.contents = $body
|
||||
}
|
||||
|
||||
// Clean up any <title> tags
|
||||
if (obj.contents) {
|
||||
// Remove any parent title elements
|
||||
obj.contents = obj.contents.not(function() { return $(this).is('title') })
|
||||
|
||||
// Then scrub any titles from their descendants
|
||||
obj.contents.find('title').remove()
|
||||
|
||||
// Gather all script[src] elements
|
||||
obj.scripts = findAll(obj.contents, 'script[src]').remove()
|
||||
obj.contents = obj.contents.not(obj.scripts)
|
||||
}
|
||||
|
||||
// Trim any whitespace off the title
|
||||
if (obj.title) obj.title = $.trim(obj.title)
|
||||
|
||||
return obj
|
||||
}
|
||||
|
||||
// Load an execute scripts using standard script request.
|
||||
//
|
||||
// Avoids jQuery's traditional $.getScript which does a XHR request and
|
||||
// globalEval.
|
||||
//
|
||||
// scripts - jQuery object of script Elements
|
||||
//
|
||||
// Returns nothing.
|
||||
function executeScriptTags(scripts) {
|
||||
if (!scripts) return
|
||||
|
||||
var existingScripts = $('script[src]')
|
||||
|
||||
scripts.each(function() {
|
||||
var src = this.src
|
||||
var matchedScripts = existingScripts.filter(function() {
|
||||
return this.src === src
|
||||
})
|
||||
if (matchedScripts.length) return
|
||||
|
||||
var script = document.createElement('script')
|
||||
script.type = $(this).attr('type')
|
||||
script.src = $(this).attr('src')
|
||||
document.head.appendChild(script)
|
||||
})
|
||||
}
|
||||
|
||||
// Internal: History DOM caching class.
|
||||
var cacheMapping = {}
|
||||
var cacheForwardStack = []
|
||||
var cacheBackStack = []
|
||||
|
||||
// Push previous state id and container contents into the history
|
||||
// cache. Should be called in conjunction with `pushState` to save the
|
||||
// previous container contents.
|
||||
//
|
||||
// id - State ID Number
|
||||
// value - DOM Element to cache
|
||||
//
|
||||
// Returns nothing.
|
||||
function cachePush(id, value) {
|
||||
cacheMapping[id] = value
|
||||
cacheBackStack.push(id)
|
||||
|
||||
// Remove all entires in forward history stack after pushing
|
||||
// a new page.
|
||||
while (cacheForwardStack.length)
|
||||
delete cacheMapping[cacheForwardStack.shift()]
|
||||
|
||||
// Trim back history stack to max cache length.
|
||||
while (cacheBackStack.length > pjax.defaults.maxCacheLength)
|
||||
delete cacheMapping[cacheBackStack.shift()]
|
||||
}
|
||||
|
||||
// Shifts cache from directional history cache. Should be
|
||||
// called on `popstate` with the previous state id and container
|
||||
// contents.
|
||||
//
|
||||
// direction - "forward" or "back" String
|
||||
// id - State ID Number
|
||||
// value - DOM Element to cache
|
||||
//
|
||||
// Returns nothing.
|
||||
function cachePop(direction, id, value) {
|
||||
var pushStack, popStack
|
||||
cacheMapping[id] = value
|
||||
|
||||
if (direction === 'forward') {
|
||||
pushStack = cacheBackStack
|
||||
popStack = cacheForwardStack
|
||||
} else {
|
||||
pushStack = cacheForwardStack
|
||||
popStack = cacheBackStack
|
||||
}
|
||||
|
||||
pushStack.push(id)
|
||||
if (id = popStack.pop())
|
||||
delete cacheMapping[id]
|
||||
}
|
||||
|
||||
// Public: Find version identifier for the initial page load.
|
||||
//
|
||||
// Returns String version or undefined.
|
||||
function findVersion() {
|
||||
return $('meta').filter(function() {
|
||||
var name = $(this).attr('http-equiv')
|
||||
return name && name.toUpperCase() === 'X-PJAX-VERSION'
|
||||
}).attr('content')
|
||||
}
|
||||
|
||||
// Install pjax functions on $.pjax to enable pushState behavior.
|
||||
//
|
||||
// Does nothing if already enabled.
|
||||
//
|
||||
// Examples
|
||||
//
|
||||
// $.pjax.enable()
|
||||
//
|
||||
// Returns nothing.
|
||||
function enable() {
|
||||
$.fn.pjax = fnPjax
|
||||
$.pjax = pjax
|
||||
$.pjax.enable = $.noop
|
||||
$.pjax.disable = disable
|
||||
$.pjax.click = handleClick
|
||||
$.pjax.submit = handleSubmit
|
||||
$.pjax.reload = pjaxReload
|
||||
$.pjax.defaults = {
|
||||
timeout: 650,
|
||||
push: true,
|
||||
replace: false,
|
||||
type: 'GET',
|
||||
dataType: 'html',
|
||||
scrollTo: 0,
|
||||
maxCacheLength: 20,
|
||||
version: findVersion
|
||||
}
|
||||
$(window).on('popstate.pjax', onPjaxPopstate)
|
||||
}
|
||||
|
||||
// Disable pushState behavior.
|
||||
//
|
||||
// This is the case when a browser doesn't support pushState. It is
|
||||
// sometimes useful to disable pushState for debugging on a modern
|
||||
// browser.
|
||||
//
|
||||
// Examples
|
||||
//
|
||||
// $.pjax.disable()
|
||||
//
|
||||
// Returns nothing.
|
||||
function disable() {
|
||||
$.fn.pjax = function() { return this }
|
||||
$.pjax = fallbackPjax
|
||||
$.pjax.enable = enable
|
||||
$.pjax.disable = $.noop
|
||||
$.pjax.click = $.noop
|
||||
$.pjax.submit = $.noop
|
||||
$.pjax.reload = function() { window.location.reload() }
|
||||
|
||||
$(window).off('popstate.pjax', onPjaxPopstate)
|
||||
}
|
||||
|
||||
|
||||
// Add the state property to jQuery's event object so we can use it in
|
||||
// $(window).bind('popstate')
|
||||
if ( $.inArray('state', $.event.props) < 0 )
|
||||
$.event.props.push('state')
|
||||
|
||||
// Is pjax supported by this browser?
|
||||
$.support.pjax =
|
||||
window.history && window.history.pushState && window.history.replaceState &&
|
||||
// pushState isn't reliable on iOS until 5.
|
||||
!navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]|WebApps\/.+CFNetwork)/)
|
||||
|
||||
$.support.pjax ? enable() : disable()
|
||||
|
||||
})(jQuery);
|
||||
-57
File diff suppressed because one or more lines are too long
-7
File diff suppressed because one or more lines are too long
@@ -1,194 +0,0 @@
|
||||
/**
|
||||
* Create link.
|
||||
*
|
||||
* @param string $moduleName
|
||||
* @param string $methodName
|
||||
* @param string $vars
|
||||
* @param string $viewType
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
function createLink(moduleName, methodName, vars, viewType, isOnlyBody)
|
||||
{
|
||||
if(!viewType) viewType = config.defaultView;
|
||||
if(!isOnlyBody) isOnlyBody = false;
|
||||
if(vars)
|
||||
{
|
||||
vars = vars.split('&');
|
||||
for(i = 0; i < vars.length; i ++) vars[i] = vars[i].split('=');
|
||||
}
|
||||
if(config.requestType == 'PATH_INFO')
|
||||
{
|
||||
link = config.webRoot + moduleName + config.requestFix + methodName;
|
||||
if(vars)
|
||||
{
|
||||
if(config.pathType == "full")
|
||||
{
|
||||
for(i = 0; i < vars.length; i ++) link += config.requestFix + vars[i][0] + config.requestFix + vars[i][1];
|
||||
}
|
||||
else
|
||||
{
|
||||
for(i = 0; i < vars.length; i ++) link += config.requestFix + vars[i][1];
|
||||
}
|
||||
}
|
||||
link += '.' + viewType;
|
||||
}
|
||||
else
|
||||
{
|
||||
link = config.router + '?' + config.moduleVar + '=' + moduleName + '&' + config.methodVar + '=' + methodName + '&' + config.viewVar + '=' + viewType;
|
||||
if(vars) for(i = 0; i < vars.length; i ++) link += '&' + vars[i][0] + '=' + vars[i][1];
|
||||
}
|
||||
|
||||
/* if page has onlybody param then add this param in all link. the param hide header and footer. */
|
||||
if(onlybody == 'yes' || isOnlyBody)
|
||||
{
|
||||
var onlybody = config.requestType != 'GET' ? "?onlybody=yes" : '&onlybody=yes';
|
||||
link = link + onlybody;
|
||||
}
|
||||
return link;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Set the ping url.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function setPing()
|
||||
{
|
||||
$('#hiddenwin').attr('src', createLink('misc', 'ping'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set paceholder
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function setPlaceholder()
|
||||
{
|
||||
if(typeof(holders) != "undefined")
|
||||
{
|
||||
for(var key in holders)
|
||||
{
|
||||
$("#"+key).attr('placeholder', holders[key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set language.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function selectLang(lang)
|
||||
{
|
||||
$.cookie('lang', lang, {expires:config.cookieLife, path:config.webRoot});
|
||||
location.href = removeAnchor(location.href);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Disable the submit button when submit form.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function setForm()
|
||||
{
|
||||
var formClicked = false;
|
||||
$('form').submit(function()
|
||||
{
|
||||
submitObj = $(this).find(':submit');
|
||||
if($(submitObj).size() == 1)
|
||||
{
|
||||
submitLabel = $(submitObj).attr('value');
|
||||
$(submitObj).attr('disabled', 'disabled');
|
||||
$(submitObj).attr('value', lang.submitting);
|
||||
$(submitObj).addClass('button-d');
|
||||
formClicked = true;
|
||||
}
|
||||
});
|
||||
|
||||
$("body").click(function()
|
||||
{
|
||||
if(formClicked)
|
||||
{
|
||||
$(submitObj).removeAttr('disabled');
|
||||
$(submitObj).attr('value', submitLabel);
|
||||
$(submitObj).removeClass('button-d');
|
||||
}
|
||||
formClicked = false;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Show detail.
|
||||
*
|
||||
* @param string $objectType
|
||||
* @param int $objectID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function showDetail(objectType, objectID)
|
||||
{
|
||||
$("div:jqmData(role='header')").next().css('margin-top', '5px');
|
||||
$.get(createLink(objectType, 'ajaxGetDetail', "objectID=" + objectID), function(data)
|
||||
{
|
||||
$('#item' + objectID).html(data);
|
||||
$.mobile.loading("hide");
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Set loading icon.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function setLoadingIcon()
|
||||
{
|
||||
$('div.collapsible').bind('expand',
|
||||
function()
|
||||
{
|
||||
$.mobile.loading("show", {text:'', textVisible:false, theme:'b', textonly:false, html:''});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove anchor from the url.
|
||||
*
|
||||
* @param string $url
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
function removeAnchor(url)
|
||||
{
|
||||
pos = url.indexOf('#');
|
||||
if(pos > 0) return url.substring(0, pos);
|
||||
return url;
|
||||
}
|
||||
|
||||
/* Ping the server every some minutes to keep the session. */
|
||||
needPing = true;
|
||||
|
||||
/* When body's ready, execute these. */
|
||||
$(document).ready(function()
|
||||
{
|
||||
setForm();
|
||||
setPlaceholder();
|
||||
setLoadingIcon();
|
||||
|
||||
if(needPing) setTimeout('setPing()', 1000 * 60); // After 5 minutes, begin ping.
|
||||
$(document).pjax("a[target!='hiddenwin'][id!='logout']", '#main');
|
||||
$(document).on('pjax:complete', function()
|
||||
{
|
||||
$('#main').trigger("pagecreate");
|
||||
var height = 0;
|
||||
$("div:jqmData(role='header')").find("div:jqmData(role='navbar')").each(function(){height = height + $(this).height()})
|
||||
$("div:jqmData(role='header')").next().css('margin-top', (height + 5) + 'px');
|
||||
});
|
||||
});
|
||||
File diff suppressed because one or more lines are too long
@@ -1,60 +0,0 @@
|
||||
/**
|
||||
* The css file of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package front
|
||||
* @version $Id: style.css 1454 2009-10-23 01:45:26Z wwccss $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
/*-----------------------BASE SETTING----------------------------*/
|
||||
.hidden {display:none}
|
||||
.block {display:block}
|
||||
.inline {display:inline}
|
||||
|
||||
.fixed {table-layout:fixed}
|
||||
.nobr {overflow:hidden; white-space:nowrap;}
|
||||
.fixed th, .fixed td {overflow:hidden; white-space:nowrap;}
|
||||
.nofixed th, .nofixed td {overflow:visible; white-space:normal}
|
||||
|
||||
.log-asc {padding:2px 6px; background:url(images/main/zt-icons.png) -2px -422px;}
|
||||
.log-desc {padding:2px 6px; background:url(images/main/zt-icons.png) -22px -422px;}
|
||||
.change-hide {padding:2px 6px; background:url(images/main/zt-icons.png) -42px -422px; border:0px;}
|
||||
.change-show {padding:2px 6px; background:url(images/main/zt-icons.png) -62px -422px; border:0px;}
|
||||
.diff-all {padding:2px 6px; background:url(images/main/zt-icons.png) -81px -422px; border:0px}
|
||||
.diff-short {padding:2px 6px; background:url(images/main/zt-icons.png) -101px -422px; border:0px}
|
||||
|
||||
.ui-content {padding-left:0px; padding-right:0px}
|
||||
|
||||
.a-center {text-align: center;}
|
||||
.a-right {text-align: right;}
|
||||
.a-left {text-align: left;}
|
||||
|
||||
.table-1 {width:100%;}
|
||||
.rowhead {font-weight:bold; text-align:right; width:80px; border:none}
|
||||
|
||||
.w-20px {width:20px}
|
||||
.w-30px {width:30px}
|
||||
.w-35px {width:35px}
|
||||
.w-40px {width:40px}
|
||||
.w-45px {width:45px}
|
||||
.w-50px {width:50px}
|
||||
.w-60px {width:60px}
|
||||
.w-70px {width:70px}
|
||||
.w-80px {width:80px}
|
||||
.w-100px {width:100px}
|
||||
.w-120px {width:120px}
|
||||
.w-130px {width:130px}
|
||||
.w-140px {width:140px}
|
||||
.w-150px {width:150px}
|
||||
.w-160px {width:160px}
|
||||
.w-200px {width:200px}
|
||||
|
||||
.ui-select .ui-btn-text{text-align:left}
|
||||
|
||||
.ui-btn-left, .ui-btn-right, .ui-input-clear, .ui-btn-inline, .ui-grid-a .ui-btn, .ui-grid-b .ui-btn, .ui-grid-c .ui-btn, .ui-grid-d .ui-btn, .ui-grid-e .ui-btn, .ui-grid-solo .ui-btn
|
||||
{
|
||||
margin-left: 2px;
|
||||
margin-right: 2px;
|
||||
}
|
||||
Reference in New Issue
Block a user