/** * Add new activity into stream * @param array|object $data * @return CActivity|boolean */ public static function add($data) { $activity = new CActivity($data); /** * @todo We'll move all event trigger into this class not in table class or anywhere * @todo Anything else we want to include when posting please put here */ /* Event trigger */ $appsLib = CAppPlugins::getInstance(); $appsLib->loadApplications(); $params = array(); $params[] =& $activity; /* We do raise event here that will allow user change $activity properties before save it */ $appsLib->triggerEvent('onBeforeActivitySave', $params); if ($activity->get('cmd')) { /* Userpoints */ $userPointModel = CFactory::getModel('Userpoints'); $point = $userPointModel->getPointData($activity->get('cmd')); if ($point) { /** * @todo Need clearly about this ! * for every unpublished user points the stream will be disabled for that item * but not sure if this for 3rd party API, this feature should be available or not? */ if (!$point->published) { //return; } } } if ($activity->save()) { $params = array(); $params[] =& $activity; $appsLib->triggerEvent('onAfterActivitySave', $params); return $activity; } return false; }
/** * Update or save all timesheet's activities * @param int $userId * @param array $dataActivities * @param int $timesheetId * @param array $projectLeaderTasksIdList (optionnal) * @return bool */ public static function saveActivities($userId, $dataActivities, $timesheetId) { $q = new DBQuery(); $q->addTable('task_timesheet'); $q->addQuery('task_id'); $q->addWhere('timesheet_id =' . $timesheetId); $q->addWhere('status = 0'); //die($q->prepare()); $psql = $q->prepare(); $q->clear(); $taskIdRows = db_exec($psql); $validatedTaskId = array(); while ($row = db_fetch_assoc($taskIdRows)) { array_push($validatedTaskId, $row['task_id']); } //create activities where duration > 0 foreach ($dataActivities as $dataActivity) { $dataActivityArray = explode('|', $dataActivity); /* $dataActivityArray[1]: TaskId $dataActivityArray[2]; date */ $activity = new CActivity(); $activity->setDuration($dataActivityArray[0]); $activity->setTaskId($dataActivityArray[1]); $activity->setADate($dataActivityArray[2]); $activity->setUserId($userId); $activity->setTimesheetId($timesheetId); //check if the task isn't already validate if (!in_array($dataActivityArray[1], $validatedTaskId)) { //if the activity exist if ($activity->loadActivityId()) { $activity->update(); } else { if ($dataActivityArray[0] > 0) { $activity->save(); } } } } return true; }