44 const STATUS_IN_PROGRESS = 2;
46 const STATUS_AWAITING_ACCEPTANCE = 3;
48 const STATUS_REJECTED = 4;
50 const STATUS_COMPLETED = 5;
59 if (trim($this->name) ==
'')
61 return Zurmo::t(
'Core',
'(Unnamed)');
93 $metadata = parent::getDefaultMetadata();
94 $metadata[__CLASS__] = array(
103 'relations' => array(
104 'requestedByUser' => array(static::HAS_ONE,
'User', static::NOT_OWNED,
105 static::LINK_TYPE_SPECIFIC,
'requestedByUser'),
106 'comments' => array(static::HAS_MANY,
'Comment', static::OWNED,
107 static::LINK_TYPE_POLYMORPHIC,
'relatedModel'),
108 'checkListItems' => array(static::HAS_MANY,
'TaskCheckListItem', static::OWNED),
109 'notificationSubscribers' => array(static::HAS_MANY,
'NotificationSubscriber', static::OWNED,
110 static::LINK_TYPE_POLYMORPHIC,
'relatedModel'),
111 'files' => array(static::HAS_MANY,
'FileModel', static::OWNED,
112 static::LINK_TYPE_POLYMORPHIC,
'relatedModel'),
113 'project' => array(static::HAS_ONE,
'Project'),
116 array(
'completedDateTime',
'type',
'type' =>
'datetime'),
117 array(
'completed',
'boolean'),
118 array(
'dueDateTime',
'type',
'type' =>
'datetime'),
119 array(
'description',
'type',
'type' =>
'string'),
120 array(
'name',
'required'),
121 array(
'name',
'type',
'type' =>
'string'),
122 array(
'name',
'length',
'min' => 1,
'max' => 128),
123 array(
'status',
'type',
'type' =>
'integer'),
124 array(
'status',
'default',
'value' => Task::STATUS_NEW),
125 array(
'status',
'required'),
128 'completedDateTime' =>
'DateTime',
129 'description' =>
'TextArea',
130 'dueDateTime' =>
'DateTime',
131 'requestedByUser' =>
'User',
132 'comment' =>
'Comment',
133 'checkListItem' =>
'TaskCheckListItem',
135 'project' =>
'Project',
136 'status' =>
'TaskStatusDropDown'
138 'defaultSortAttribute' =>
'name',
153 assert(
'$bean === null || $bean instanceof RedBean_OODBBean');
154 assert(
'is_bool($setDefaults)');
155 parent::constructDerived($bean, $setDefaults);
160 if ($bean === null && $setDefaults)
162 $currentUser = Yii::app()->user->userModel;
163 if (!$currentUser instanceof
User)
178 return array_merge(parent::translatedAttributeLabels($language),
180 'completedDateTime' => Zurmo::t(
'TasksModule',
'Completed On', array(), null, $language),
181 'completed' => Zurmo::t(
'Core',
'Completed', array(), null, $language),
182 'description' => Zurmo::t(
'ZurmoModule',
'Description', array(), null, $language),
183 'dueDateTime' => Zurmo::t(
'TasksModule',
'Due On', array(), null, $language),
184 'name' => Zurmo::t(
'Core',
'Name', array(), null, $language),
185 'status' => Zurmo::t(
'ZurmoModule',
'Status', array(), null, $language),
186 'requestedByUser' => Zurmo::t(
'TasksModule',
'Requested By User', array(), null, $language),
187 'files' => Zurmo::t(
'ZurmoModule',
'Files', array(), null, $language),
213 if (parent::beforeSave())
224 public function __set($attributeName, $value)
226 parent::__set($attributeName, $value);
227 if ($attributeName ==
'status')
246 return 'TaskGamification';
255 self::STATUS_NEW => Zurmo::t(
'Core',
'New'),
256 self::STATUS_IN_PROGRESS => Zurmo::t(
'Core',
'In Progress'),
257 self::STATUS_AWAITING_ACCEPTANCE => Zurmo::t(
'Core',
'Awaiting Acceptance'),
258 self::STATUS_REJECTED => Zurmo::t(
'Core',
'Rejected'),
259 self::STATUS_COMPLETED => Zurmo::t(
'Core',
'Completed'),
269 $statusArray = self::getStatusDropDownArray();
270 if (array_key_exists($status, $statusArray))
272 return $statusArray[$status];
274 return Zurmo::t(
'Core',
'(None)');
285 protected function afterSave()
289 $this->processNotificationsToBeSent();
301 private function processNotificationsToBeSent()
303 if (array_key_exists(
'status', $this->originalAttributeValues))
305 if ($this->status == Task::STATUS_AWAITING_ACCEPTANCE &&
306 $this->requestedByUser->id != Yii::app()->user->userModel->id)
309 TasksNotificationUtil::TASK_STATUS_BECOMES_AWAITING_ACCEPTANCE,
310 Yii::app()->user->userModel);
312 elseif ($this->status == Task::STATUS_REJECTED &&
313 $this->owner->id != Yii::app()->user->userModel->id)
316 TasksNotificationUtil::TASK_STATUS_BECOMES_REJECTED,
317 Yii::app()->user->userModel);
319 elseif ($this->status == Task::STATUS_COMPLETED)
322 TasksNotificationUtil::TASK_STATUS_BECOMES_COMPLETED,
323 Yii::app()->user->userModel);
326 if ($this->isNewModel)
328 if ($this->owner->id != $this->requestedByUser->id && $this->owner->id != Yii::app()->user->userModel->id)
331 TasksNotificationUtil::TASK_NEW);
334 elseif (array_key_exists(
'owner', $this->originalAttributeValues))
336 if ($this->requestedByUser->id != Yii::app()->user->userModel->id)
339 TasksNotificationUtil::TASK_OWNER_CHANGE);
341 if ($this->owner->id != Yii::app()->user->userModel->id)
344 TasksNotificationUtil::TASK_NEW);
355 if ($this->requestedByUser->id > 0)
367 if ($this->status != Task::STATUS_COMPLETED)
369 $this->completed =
false;
373 $this->completed =
true;
376 if ($this->completed ==
true)
378 if ($this->completedDateTime == null)
380 $this->completedDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
static addSubscriber(User $user, OwnedSecurableItem $model, $hasReadLatest=false)
static getDefaultMetadata()
static getModuleClassName()
static saveOriginalAttributeValue($auditableModel, $attributeName, $value)
resolveStatusAndSetCompletedFields()
static getGamificationRulesType()
static getMashableActivityRulesType()
static getStatusDisplayName($status)
static hasReadPermissionsOptimization()
static checkKanbanTypeByStatusAndUpdateIfRequired(Task $task)
unrestrictedSet($attributeName, $value)
constructDerived($bean, $setDefaults)
static getStatusDropDownArray()
static submitTaskNotificationMessage(Task $task, $action, User $relatedUser=null, Comment $comment=null)
static hasReadPermissionsSubscriptionOptimization()
static translatedAttributeLabels($language)
resolveAndSetDefaultSubscribers()