Files
EasySoft-ZenTaoPMS/module/risk/model.php
2020-08-28 12:19:22 +08:00

416 lines
13 KiB
PHP

<?php
/**
* The model file of risk 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 risk
* @version $Id: model.php 5079 2013-07-10 00:44:34Z chencongzhi520@gmail.com $
* @link http://www.zentao.net
*/
?>
<?php
class riskModel extends model
{
/**
* Create a risk.
*
* @access public
* @return int|bool
*/
public function create()
{
$risk = fixer::input('post')
->add('program', $this->session->program)
->add('createdBy', $this->app->user->account)
->add('createdDate', helper::today())
->stripTags($this->config->risk->editor->create['id'], $this->config->allowedTags)
->remove('uid')
->get();
$risk = $this->loadModel('file')->processImgURL($risk, $this->config->risk->editor->create['id'], $this->post->uid);
$this->dao->insert(TABLE_RISK)->data($risk)->autoCheck()->batchCheck($this->config->risk->create->requiredFields, 'notempty')->exec();
if(!dao::isError()) return $this->dao->lastInsertID();
return false;
}
/**
* Batch create risk.
*
* @access public
* @return bool
*/
public function batchCreate()
{
$data = fixer::input('post')->get();
$this->loadModel('action');
foreach($data->name as $i => $name)
{
if(!$name) continue;
$risk = new stdclass();
$risk->name = $name;
$risk->source = $data->source[$i];
$risk->category = $data->category[$i];
$risk->strategy = $data->strategy[$i];
$risk->program = $this->session->program;
$risk->createdBy = $this->app->user->account;
$risk->createdDate = helper::today();
$this->dao->insert(TABLE_RISK)->data($risk)->autoCheck()->exec();
$riskID = $this->dao->lastInsertID();
$this->action->create('risk', $riskID, 'Opened');
}
return true;
}
/**
* Update a risk.
*
* @param int $riskID
* @access public
* @return array|bool
*/
public function update($riskID)
{
$oldRisk = $this->dao->select('*')->from(TABLE_RISK)->where('id')->eq((int)$riskID)->fetch();
$risk = fixer::input('post')
->add('editedBy', $this->app->user->account)
->add('editedDate', helper::today())
->stripTags($this->config->risk->editor->edit['id'], $this->config->allowedTags)
->remove('uid')
->get();
$this->dao->update(TABLE_RISK)->data($risk)->autoCheck()->where('id')->eq((int)$riskID)->exec();
if(!dao::isError()) return common::createChanges($oldRisk, $risk);
return false;
}
/**
* Track a risk.
*
* @param int $riskID
* @access public
* @return array|bool
*/
public function track($riskID)
{
$oldRisk = $this->dao->select('*')->from(TABLE_RISK)->where('id')->eq((int)$riskID)->fetch();
$risk = fixer::input('post')
->add('editedBy', $this->app->user->account)
->add('editedDate', helper::today())
->stripTags($this->config->risk->editor->track['id'], $this->config->allowedTags)
->remove('isChange,comment,uid,files,label')
->get();
$this->dao->update(TABLE_RISK)->data($risk)->autoCheck()->where('id')->eq((int)$riskID)->exec();
if(!dao::isError()) return common::createChanges($oldRisk, $risk);
return false;
}
/**
* Get risks List.
*
* @param string $browseType
* @param string $param
* @param string $orderBy
* @param int $pager
* @access public
* @return object
*/
public function getList($browseType = '', $param = '', $orderBy = 'id_desc', $pager = null)
{
if($browseType == 'bysearch') return $this->getBySearch($param, $orderBy, $pager);
return $this->dao->select('*')->from(TABLE_RISK)
->where('deleted')->eq(0)
->beginIF($browseType != 'all' and $browseType != 'assignTo')->andWhere('status')->eq($browseType)->fi()
->beginIF($browseType == 'assignTo')->andWhere('assignedTo')->eq($this->app->user->account)->fi()
->andWhere('program')->eq($this->session->program)
->orderBy($orderBy)
->page($pager)
->fetchAll('id');
}
/**
* Get risks by search
*
* @param string $queryID
* @param string $orderBy
* @param int $pager
* @access public
* @return object
*/
public function getBySearch($queryID = '', $orderBy = 'id_desc', $pager = null)
{
if($queryID && $queryID != 'myQueryID')
{
$query = $this->loadModel('search')->getQuery($queryID);
if($query)
{
$this->session->set('riskQuery', $query->sql);
$this->session->set('riskForm', $query->form);
}
else
{
$this->session->set('riskQuery', ' 1 = 1');
}
}
else
{
if($this->session->riskQuery == false) $this->session->set('riskQuery', ' 1 = 1');
}
$riskQuery = $this->session->riskQuery;
return $this->dao->select('*')->from(TABLE_RISK)
->where($riskQuery)
->andWhere('deleted')->eq('0')
->andWhere('program')->eq($this->session->program)
->orderBy($orderBy)
->page($pager)
->fetchAll('id');
}
/**
* Get risks of pairs
*
* @access public
* @return object
*/
public function getPairs()
{
return $this->dao->select('id, name')->from(TABLE_RISK)
->where('deleted')->eq(0)
->andWhere('program')->eq($this->session->program)
->fetchPairs();
}
/**
* Get risk by ID
*
* @param int $riskID
* @access public
* @return object
*/
public function getByID($riskID)
{
return $this->dao->select('*')->from(TABLE_RISK)->where('id')->eq((int)$riskID)->fetch();
}
/**
* Get block risks
*
* @param string $browseType
* @param int $limit
* @param string $orderBy
* @access public
* @return object
*/
public function getBlockRisks($browseType = 'all', $limit = 15, $orderBy = 'id_desc')
{
return $this->dao->select('*')->from(TABLE_RISK)
->where('program')->eq($this->session->program)
->beginIF($browseType != 'all' and $browseType != 'assignTo')->andWhere('status')->eq($browseType)->fi()
->beginIF($browseType == 'assignTo')->andWhere('assignedTo')->eq($this->app->user->account)->fi()
->andWhere('deleted')->eq('0')
->orderBy($orderBy)
->limit($limit)
->fetchAll();
}
/**
* Print assignedTo html
*
* @param int $risk
* @param int $users
* @access public
* @return string
*/
public function printAssignedHtml($risk, $users)
{
$btnTextClass = '';
$assignedToText = zget($users, $risk->assignedTo);
if(empty($risk->assignedTo))
{
$btnTextClass = 'text-primary';
$assignedToText = $this->lang->risk->noAssigned;
}
if($risk->assignedTo == $this->app->user->account) $btnTextClass = 'text-red';
$btnClass = $risk->assignedTo == 'closed' ? ' disabled' : '';
$btnClass = "iframe btn btn-icon-left btn-sm {$btnClass}";
$assignToLink = helper::createLink('risk', 'assignTo', "riskID=$risk->id", '', true);
$assignToHtml = html::a($assignToLink, "<i class='icon icon-hand-right'></i> <span title='" . zget($users, $risk->assignedTo) . "' class='{$btnTextClass}'>{$assignedToText}</span>", '', "class='$btnClass'");
echo !common::hasPriv('risk', 'assignTo', $risk) ? "<span style='padding-left: 21px' class='{$btnTextClass}'>{$assignedToText}</span>" : $assignToHtml;
}
/**
* Assign a risk.
*
* @param int $riskID
* @access public
* @return array|bool
*/
public function assign($riskID)
{
$oldRisk = $this->getByID($riskID);
$risk = fixer::input('post')
->add('editedBy', $this->app->user->account)
->add('editedDate', helper::today())
->setDefault('assignedDate', helper::today())
->stripTags($this->config->risk->editor->assignto['id'], $this->config->allowedTags)
->remove('uid,comment,files,label')
->get();
$this->dao->update(TABLE_RISK)->data($risk)->autoCheck()->where('id')->eq((int)$riskID)->exec();
if(!dao::isError()) return common::createChanges($oldRisk, $risk);
return false;
}
/**
* Cancel a risk.
*
* @param int $riskID
* @access public
* @return array|bool
*/
public function cancel($riskID)
{
$oldRisk = $this->getByID($riskID);
$risk = fixer::input('post')
->setDefault('status','canceled')
->add('editedBy', $this->app->user->account)
->add('editedDate', helper::today())
->stripTags($this->config->risk->editor->cancel['id'], $this->config->allowedTags)
->remove('uid,comment')
->get();
$this->dao->update(TABLE_RISK)->data($risk)->autoCheck()->where('id')->eq((int)$riskID)->exec();
if(!dao::isError()) return common::createChanges($oldRisk, $risk);
return false;
}
/**
* Close a risk.
*
* @param int $riskID
* @access public
* @return array|bool
*/
public function close($riskID)
{
$oldRisk = $this->getByID($riskID);
$risk = fixer::input('post')
->setDefault('status','closed')
->add('editedBy', $this->app->user->account)
->add('editedDate', helper::today())
->stripTags($this->config->risk->editor->close['id'], $this->config->allowedTags)
->remove('uid,comment')
->get();
$this->dao->update(TABLE_RISK)->data($risk)->autoCheck()->where('id')->eq((int)$riskID)->exec();
if(!dao::isError()) return common::createChanges($oldRisk, $risk);
return false;
}
/**
* Hangup a risk.
*
* @param int $riskID
* @access public
* @return array|bool
*/
public function hangup($riskID)
{
$oldRisk = $this->getByID($riskID);
$risk = fixer::input('post')
->setDefault('status','hangup')
->add('editedBy', $this->app->user->account)
->add('editedDate', helper::today())
->get();
$this->dao->update(TABLE_RISK)->data($risk)->autoCheck()->where('id')->eq((int)$riskID)->exec();
if(!dao::isError()) return common::createChanges($oldRisk, $risk);
return false;
}
/**
* Activate a risk.
*
* @param int $riskID
* @access public
* @return array|bool
*/
public function activate($riskID)
{
$oldRisk = $this->getByID($riskID);
$risk = fixer::input('post')
->setDefault('status','active')
->add('editedBy', $this->app->user->account)
->add('editedDate', helper::today())
->get();
$this->dao->update(TABLE_RISK)->data($risk)->autoCheck()->where('id')->eq((int)$riskID)->exec();
if(!dao::isError()) return common::createChanges($oldRisk, $risk);
return false;
}
/**
* Adjust the action is clickable.
*
* @param int $risk
* @param int $action
* @static
* @access public
* @return bool
*/
public static function isClickable($risk, $action)
{
$action = strtolower($action);
if($action == 'cancel' or $action == 'close') return $risk->status != 'canceled' and $risk->status != 'closed';
if($action == 'hangup') return $risk->status == 'active';
if($action == 'activate') return $risk->status != 'active';
return true;
}
/**
* Build search form.
*
* @param int $queryID
* @param string $actionURL
* @access public
* @return void
*/
public function buildSearchForm($queryID, $actionURL)
{
$this->config->risk->search['actionURL'] = $actionURL;
$this->config->risk->search['queryID'] = $queryID;
$this->loadModel('search')->setSearchParams($this->config->risk->search);
}
}