コード例 #1
0
 function addTimeslot(User $user)
 {
     $manager_class = get_class($this->manager());
     $object_id = $this->getObjectId();
     if ($this->hasOpenTimeslots($user)) {
         throw new Error("Cannot add timeslot: user already has an open timeslot");
     }
     $timeslot = new Timeslot();
     $dt = DateTimeValueLib::now();
     $timeslot->setStartTime($dt);
     $timeslot->setUserId($user->getId());
     $timeslot->setObjectManager($manager_class);
     $timeslot->setObjectId($object_id);
     $timeslot->save();
 }
コード例 #2
0
 function quick_edit_task()
 {
     if (logged_user()->isGuest()) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     ajx_current("empty");
     $task = ProjectTasks::findById(get_id());
     if (!$task instanceof ProjectTask) {
         flash_error(lang('task list dnx'));
         return;
     }
     // if
     if (!$task->canEdit(logged_user())) {
         flash_error(lang('no access permissions'));
         return;
     }
     // if
     $task_data = array_var($_POST, 'task');
     if (is_array($task_data)) {
         $task_data['due_date'] = getDateValue(array_var($task_data, 'task_due_date'));
         $task_data['start_date'] = getDateValue(array_var($task_data, 'task_start_date'));
         $old_milestone_id = $task->getMilestoneId();
         $task->setFromAttributes($task_data);
         $project = Projects::findById(array_var($task_data, 'project_id', 0));
         //$task->setOrder(ProjectTasks::maxOrder(array_var($task_data, "parent_id", 0), array_var($task_data, "milestone_id", 0)));
         // Set assigned to
         $assigned_to = explode(':', array_var($task_data, 'assigned_to', ''));
         $company_id = array_var($assigned_to, 0, 0);
         $user_id = array_var($assigned_to, 1, 0);
         $can_assign = can_assign_task_to_company_user(logged_user(), $task, $company_id, $user_id);
         if ($can_assign !== true) {
             flash_error($can_assign);
             return;
         }
         $task->setAssignedToCompanyId($company_id);
         $task->setAssignedToUserId($user_id);
         //$task->setIsPrivate(false); // Not used, but defined as not null.
         /*if (array_var($task_data,'is_completed',false) == 'true'){
         		$task->setCompletedOn(DateTimeValueLib::now());
         		$task->setCompletedById(logged_user()->getId());
         		}*/
         if (array_var($_GET, 'dont_mark_as_read')) {
             $is_read = $task->getIsRead(logged_user()->getId());
         }
         try {
             DB::beginWork();
             $task->save();
             if (array_var($_GET, 'dont_mark_as_read') && !$is_read) {
                 $task->setIsRead(logged_user()->getId(), false);
             }
             if ($project instanceof Project && $task->canAdd(logged_user(), $project)) {
                 $task->setProject($project);
             }
             $task->setTagsFromCSV(array_var($task_data, 'tags'));
             // apply values to subtasks
             $subtasks = $task->getAllSubTasks();
             $project = $task->getProject();
             $milestone_id = $task->getMilestoneId();
             //Check for milestone workspace restrictions, update the task's workspace if milestone changed
             if ($milestone_id > 0 && $old_milestone_id != $milestone_id) {
                 $milestone = ProjectMilestones::findById($milestone_id);
                 $milestoneWs = $milestone->getProject();
                 if ($milestoneWs->getId() != $project->getId() && !$milestoneWs->isParentOf($project)) {
                     $project = $milestoneWs;
                     if ($task->canAdd(logged_user(), $project)) {
                         $task->setProject($project);
                     } else {
                         throw new Exception(lang('no access permissions'));
                     }
                 }
             }
             $apply_ws = array_var($task_data, 'apply_ws_subtasks', '') == "checked";
             $apply_ms = array_var($task_data, 'apply_milestone_subtasks', '') == "checked";
             $apply_at = array_var($task_data, 'apply_assignee_subtasks', '') == "checked";
             $modified_subtasks = array();
             foreach ($subtasks as $sub) {
                 $modified = false;
                 if ($apply_at || !$sub->getAssignedTo() instanceof ApplicationDataObject) {
                     $sub->setAssignedToCompanyId($company_id);
                     $sub->setAssignedToUserId($user_id);
                     $modified = true;
                 }
                 if ($apply_ws) {
                     $sub->setProject($project);
                     $modified = true;
                 }
                 if ($apply_ms) {
                     $sub->setMilestoneId($milestone_id);
                     $modified = true;
                 }
                 if ($modified) {
                     $sub->save();
                     $modified_subtasks[] = $sub;
                 }
             }
             //Add new work timeslot for this task
             if (array_var($task_data, 'hours') != '' && array_var($task_data, 'hours') > 0) {
                 $hours = array_var($task_data, 'hours');
                 if (strpos($hours, ',') && !strpos($hours, '.')) {
                     $hours = str_replace(',', '.', $hours);
                 }
                 $timeslot = new Timeslot();
                 $dt = DateTimeValueLib::now();
                 $dt2 = DateTimeValueLib::now();
                 $timeslot->setEndTime($dt);
                 $dt2 = $dt2->add('h', -$hours);
                 $timeslot->setStartTime($dt2);
                 $timeslot->setUserId(logged_user()->getId());
                 $timeslot->setObjectManager("ProjectTasks");
                 $timeslot->setObjectId($task->getId());
                 $timeslot->save();
             }
             ApplicationLogs::createLog($task, $task->getWorkspaces(), ApplicationLogs::ACTION_EDIT);
             $assignee = $task->getAssignedToUser();
             if ($assignee instanceof User) {
                 $task->subscribeUser($assignee);
             }
             DB::commit();
             // notify asignee
             if (array_var($task_data, 'notify') == 'true') {
                 try {
                     Notifier::taskAssigned($task);
                 } catch (Exception $e) {
                 }
                 // try
             }
             $task->getTagNames(true);
             //Forces reload of task tags to update changes
             $subt_info = array();
             foreach ($modified_subtasks as $sub) {
                 $subt_info[] = $sub->getArrayInfo();
             }
             ajx_extra_data(array("task" => $task->getArrayInfo(), 'subtasks' => $subt_info));
             flash_success(lang('success edit task', $task->getTitle()));
         } catch (Exception $e) {
             DB::rollback();
             flash_error($e->getMessage());
         }
         // try
     }
     // if
 }
コード例 #3
0
 function add_timespan()
 {
     if (!can_manage_time(logged_user(), true)) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     $object_id = get_id('object_id');
     $object_manager = array_var($_GET, 'object_manager');
     if (!is_valid_function_name($object_manager)) {
         flash_error(lang('invalid request'));
         ajx_current("empty");
         return;
     }
     // if
     $object = get_object_by_manager_and_id($object_id, $object_manager);
     if (!$object instanceof ProjectDataObject || !$object->canAddTimeslot(logged_user())) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     // if
     $timeslot_data = array_var($_POST, 'timeslot');
     $hours = array_var($timeslot_data, 'time');
     if (strpos($hours, ',') && !strpos($hours, '.')) {
         $hours = str_replace(',', '.', $hours);
     }
     $timeslot = new Timeslot();
     $dt = DateTimeValueLib::now();
     $dt2 = DateTimeValueLib::now();
     $timeslot->setEndTime($dt);
     $dt2 = $dt2->add('h', -$hours);
     $timeslot->setStartTime($dt2);
     $timeslot->setDescription(array_var($timeslot_data, 'description'));
     $timeslot->setUserId(logged_user()->getId());
     $timeslot->setObjectManager($object_manager);
     $timeslot->setObjectId($object_id);
     /* Billing */
     $billing_category_id = logged_user()->getDefaultBillingId();
     $project = $object->getProject();
     $timeslot->setBillingId($billing_category_id);
     $hourly_billing = $project->getBillingAmount($billing_category_id);
     $timeslot->setHourlyBilling($hourly_billing);
     $timeslot->setFixedBilling($hourly_billing * $hours);
     $timeslot->setIsFixedBilling(false);
     try {
         DB::beginWork();
         $timeslot->save();
         ApplicationLogs::createLog($timeslot, $timeslot->getWorkspaces(), ApplicationLogs::ACTION_OPEN);
         DB::commit();
         flash_success(lang('success create timeslot'));
         ajx_current("reload");
     } catch (Exception $e) {
         DB::rollback();
         ajx_current("empty");
         flash_error($e->getMessage());
     }
     // try
 }