| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- <?php
- class xuanxuanMessage extends messageModel
- {
- /**
- * @param string $objectType
- * @param int $objectID
- * @param string $actionType
- * @param int $actionID
- * @param string $actor
- * @param string $extra
- */
- public function send($objectType, $objectID, $actionType, $actionID, $actor = '', $extra = '')
- {
- if(commonModel::isTutorialMode()) return;
- $messageSetting = $this->config->message->setting;
- if(is_string($messageSetting)) $messageSetting = json_decode($messageSetting, true);
- if($objectType == 'instance' && $actionType == 'monitor') return;
- if(isset($messageSetting['xuanxuan']))
- {
- $messageActions = $messageSetting['xuanxuan']['setting'];
- if(isset($messageActions[$objectType]) and in_array($actionType, $messageActions[$objectType]))
- {
- $this->loadModel('action');
- $field = 'obj.*';
- if($objectType == 'task') $field = 'obj.*,project.name as projectName,execu.name as execuName';
- if($objectType == 'story') $field = 'obj.*,product.name as productName';
- if($objectType == 'bug') $field = 'obj.*,project.name as projectName,product.name as productName,execu.name as execuName';
- if($objectType == 'feedback') $field = 'obj.*,product.name as productName';
- if($objectType == 'demand') $field = 'obj.*,pool.name as poolName';
- $object = $this->dao->select($field)->from($this->config->objectTables[$objectType])->alias('obj')
- ->beginIF($objectType == 'task')
- ->leftJoin($this->config->objectTables['project'])->alias('project')->on('project.id = obj.project')
- ->leftJoin($this->config->objectTables['execution'])->alias('execu')->on('execu.id = obj.execution')
- ->fi()
- ->beginIF($objectType == 'story')
- ->leftJoin($this->config->objectTables['product'])->alias('product')->on('product.id = obj.product')
- ->fi()
- ->beginIF($objectType == 'bug')
- ->leftJoin($this->config->objectTables['project'])->alias('project')->on('project.id = obj.project')
- ->leftJoin($this->config->objectTables['execution'])->alias('execu')->on('execu.id = obj.execution')
- ->leftJoin($this->config->objectTables['product'])->alias('product')->on('product.id = obj.product')
- ->fi()
- ->beginIF($objectType == 'feedback')
- ->leftJoin($this->config->objectTables['product'])->alias('product')->on('product.id = obj.product')
- ->fi()
- ->beginIF($objectType == 'demand')
- ->leftJoin($this->config->objectTables['demandpool'])->alias('pool')->on('pool.id = obj.pool')
- ->fi()
- ->where('obj.id')->eq($objectID)
- ->fetch();
- $field = $this->config->action->objectNameFields[$objectType];
- $title = $objectType == 'mr' ? '' : sprintf($this->lang->message->notifyTitle, $this->app->user->realname, $this->lang->action->label->$actionType, 1, $this->lang->action->objectTypes[$objectType]);
- if($objectType == 'story' && $actionType == 'reviewed' && !empty($extra))
- {
- $notifyExtra = explode(',', $extra);
- $notifyType = strtolower($notifyExtra[0]);
- if($notifyType == 'pass') $title = sprintf($this->lang->message->notifyPassTitle, $this->app->user->realname, 1);
- if($notifyType == 'clarify') $title = sprintf($this->lang->message->notifyClarifyTitle, $this->app->user->realname, 1);
- if($notifyType == 'reject') $title = sprintf($this->lang->message->notifyRejectTitle, $this->app->user->realname, 1);
- }
- if($objectType == 'feedback' && ($actionType == 'tobug' || $actionType == 'tostory' || $actionType == 'totask' || $actionType == 'todo'))
- {
- if($actionType == 'tobug') $title = sprintf($this->lang->message->feedbackToBugTitle, $this->app->user->realname, 1);
- if($actionType == 'tostory') $title = sprintf($this->lang->message->feedbackToStoryTitle, $this->app->user->realname, 1);
- if($actionType == 'totask') $title = sprintf($this->lang->message->feedbackToTaskTitle, $this->app->user->realname, 1);
- if($actionType == 'todo') $title = sprintf($this->lang->message->feedbackToDoTitle, $this->app->user->realname, 1);
- }
- $server = $this->loadModel('im')->getServer('zentao');
- $dataID = $objectType == 'kanbancard' ? $object->kanban : $objectID;
- $url = $server . helper::createLink($objectType == 'kanbancard' ? 'kanban' : $objectType, 'view', "id=$dataID", 'html');
- $target = '';
- if($objectType == 'feedback')
- {
- $feedback = $this->loadModel('feedback')->getByID($objectID);
- $senderUser = $this->feedback->getToAndCcList($feedback);
- if(is_array($senderUser) && !empty($senderUser))
- {
- foreach($senderUser as $user) $target .= ',' . $user;
- }
- }
- elseif($objectType == 'demandpool')
- {
- if(!empty($object->owner)) $target .= trim($object->owner, ',');
- if(!empty($object->reviewer)) $target .= ',' . trim($object->reviewer, ',');
- }
- elseif($objectType == 'demand')
- {
- $target .= $object->createdBy;
- if(!empty($object->assignedTo)) $target .= $object->assignedTo == 'closed' ? '' : $object->assignedTo;
- if(!empty($object->mailto)) $target .= ",{$object->mailto}";
- $reviewers = $this->loadModel('demand')->getReviewerPairs($object->id, $object->version);
- $reviewers = array_keys($reviewers);
- if($reviewers) $target .= ',' . implode(',', $reviewers);
- $target = trim($target, ',');
- }
- elseif($objectType == 'deploy')
- {
- $senderUser = $this->loadModel('deploy')->getToAndCcList($object, $actionType);
- if(is_array($senderUser) && !empty($senderUser))
- {
- foreach($senderUser as $user) $target .= ',' . $user;
- }
- }
- else
- {
- if(!empty($object->assignedTo)) $target .= $object->assignedTo == 'closed' ? $object->openedBy : $object->assignedTo;
- if(!empty($object->mailto)) $target .= ",{$object->mailto}";
- }
- if(($objectType == 'mr' or $objectType == 'kanbancard') and !empty($object->createdBy)) $target .= ",{$object->createdBy}";
- $target = trim($target, ',');
- $target = explode(',', $target);
- $target = $this->dao->select('id')->from(TABLE_USER)
- ->where('account')->in($target)
- ->beginIF($objectType != 'mr')->andWhere('account')->ne($this->app->user->account)->fi()
- ->fetchAll('id');
- $target = array_keys($target);
- $subContent = (object)array('action' => $actionType, 'object' => $objectID, 'objectName' => $object->$field, 'objectType' => $objectType, 'actor' => $this->app->user->id, 'actorName' => $this->app->user->realname);
- $subContent->name = $object->$field;
- $subContent->id = sprintf('%03d', $object->id);
- $subContent->count = 1;
- if($objectType == 'task')
- {
- $subContent->headTitle = $object->projectName;
- $subContent->headSubTitle = $object->execuName;
- $subContent->parentType = 'execution';
- $subContent->parent = $object->execution;
- $subContent->parentURL = "xxc:openInApp/zentao-integrated/" . urlencode($server . helper::createLink('execution', 'task', "id=$object->execution", 'html'));
- $subContent->cardURL = $url;
- }
- elseif($objectType == 'story')
- {
- $subContent->headTitle = $object->productName;
- $subContent->parentType = 'product';
- $subContent->parent = $object->product;
- $subContent->parentURL = "xxc:openInApp/zentao-integrated/" . urlencode($server . helper::createLink('product', 'browse', "id=$object->product", 'html'));
- $subContent->cardURL = $url;
- }
- elseif($objectType == 'bug')
- {
- $parentType = empty($object->execuName) ? 'product' : 'project';
- $parentNameKey = $parentType . 'Name';
- $subContent->headTitle = $object->$parentNameKey;
- $subContent->headSubTitle = $object->execuName;
- $subContent->parentType = $parentType;
- $subContent->parent = $object->$parentType;
- $subContent->parentURL = "xxc:openInApp/zentao-integrated/" . urlencode($server . helper::createLink($parentType, 'browse', "id=$subContent->parent", 'html'));
- $subContent->cardURL = $url;
- }
- elseif($objectType == 'feedback')
- {
- $subContent->headTitle = $object->productName;
- $subContent->parentType = 'product';
- $subContent->parent = $object->product;
- $subContent->parentURL = "xxc:openInApp/zentao-integrated/" . urlencode($server . helper::createLink('feedback', 'browse', "id=$object->product", 'html'));
- $subContent->cardURL = $url;
- }
- elseif($objectType == 'demandpool')
- {
- $subContent->headTitle = $object->name;
- $subContent->parentType = '';
- $subContent->parent = 0;
- $subContent->parentURL = "xxc:openInApp/zentao-integrated/" . urlencode($server . helper::createLink('demandpool', 'browse', '', 'html'));
- $subContent->cardURL = $url;
- }
- elseif($objectType == 'demand')
- {
- $subContent->headTitle = $object->poolName;
- $subContent->parentType = 'demandpool';
- $subContent->parent = $object->pool;
- $subContent->parentURL = "xxc:openInApp/zentao-integrated/" . urlencode($server . helper::createLink('demand', 'browse', "id=$object->pool", 'html'));
- $subContent->cardURL = $url;
- }
- elseif($objectType == 'deploy')
- {
- $subContent->headTitle = $object->name;
- $subContent->headSubTitle = $this->lang->devops->deploy;
- $subContent->parentType = $objectType;
- $subContent->parent = 0;
- $subContent->parentURL = "xxc:openInApp/zentao-integrated/" . urlencode($url);
- $subContent->cardURL = $url;
- }
- else
- {
- $subContent->parentType = $objectType;
- }
- $contentData = new stdclass();
- if($objectType == 'mr')
- {
- $contentData->contentType = 'text';
- $contentData->url = "xxc:openInApp/zentao-integrated/" . urlencode($url);
- $contentData->actions = array();
- if(is_array($this->lang->message->mr->$actionType))
- {
- $contentData->content = sprintf($this->lang->message->mr->{$actionType}['creator'], $object->title);
- }
- else
- {
- $contentData->content = sprintf($this->lang->message->mr->$actionType, $object->title);
- $contentData->actions[] = array(
- 'type' => 'normal',
- 'label' => $this->lang->message->mr->logTitle,
- 'url' => "xxc:openInApp/zentao-integrated/" . urlencode($server . helper::createLink('compile', 'logs', "compileID=$object->compileID", 'html'))
- );
- }
- }
- else
- {
- $contentData->title = $title;
- $contentData->subtitle = '';
- $contentData->contentType = "zentao-$objectType-$actionType";
- $contentData->parentType = $subContent->parentType;
- $contentData->content = json_encode($subContent);
- $contentData->actions = array();
- $contentData->url = "xxc:openInApp/zentao-integrated/" . urlencode($url);
- }
- $contentData->extra = is_array($extra) ? $extra : '';
- $content = json_encode($contentData);
- $avatarUrl = $server . $this->app->getWebRoot() . 'favicon.ico';
- $objectTypeList = array('bug', 'task', 'story', 'feedback', 'demand', 'demandpool', 'deploy');
- if($target && in_array($objectType, $objectTypeList)) $this->loadModel('im')->messageCreateNotify($target, $title, '', $content, 'object', $url, array(), array('id' => 'zentao', 'realname' => $this->lang->message->sender, 'name' => $this->lang->message->sender, 'avatar' => $avatarUrl));
- if($objectType == 'mr' and is_array($this->lang->message->mr->$actionType) and !empty($object->assignee))
- {
- $contentData->content = sprintf($this->lang->message->mr->{$actionType}['reviewer'], $object->title);
- $content = json_encode($contentData);
- $target = $this->dao->select('id')->from(TABLE_USER)->where('account')->eq($object->assignee)->fetch('id');
- if($target) $this->loadModel('im')->messageCreateNotify(array($target), $title, '', $content, 'object', $url, array(), array('id' => 'zentao', 'realname' => $this->lang->message->sender, 'name' => $this->lang->message->sender, 'avatar' => $avatarUrl));
- }
- }
- }
- return;
- }
- }
|