function do_tag_file($tag, $ids) { $err = $succ = 0; foreach ($ids as $id) { if (trim($id) != '') { try { $file = ProjectFiles::findById($id); if (!$file->canEdit(logged_user())) { $err++; } else { Tags::addObjectTag($tag, $file); ApplicationLogs::createLog($file, $file->getWorkspaces(), ApplicationLogs::ACTION_TAG, false, null, true, $tag); $succ++; } } catch (Exception $e) { $err++; } } } return array($succ, $err); }
/** * Resolve action to perform * * @param string $action * @param array $attributes * @return string $message */ private function resolveAction($action, $attributes) { $resultMessage = ""; $resultCode = 0; switch ($action) { case "delete": $err = 0; $succ = 0; for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "email": $email = MailContents::findById($id); if (isset($email) && $email->canDelete(logged_user())) { if ($email->getState() == 2) { // we are deleting a draft email $emails_in_conversation = array($email); } else { if (user_config_option('show_emails_as_conversations', true, logged_user()->getId())) { $emails_in_conversation = MailContents::getMailsFromConversation($email); } else { $emails_in_conversation = array($email); } } foreach ($emails_in_conversation as $email) { if ($email->canDelete(logged_user())) { try { $email->trash(); ApplicationLogs::createLog($email, $email->getWorkspaces(), ApplicationLogs::ACTION_TRASH); $succ++; } catch (Exception $e) { $err++; } } else { $err++; } } } else { $err++; } break; default: $err++; break; } // switch } // for if ($err > 0) { $resultCode = 2; $resultMessage = lang("error delete objects", $err) . "<br />" . ($succ > 0 ? lang("success delete objects", $succ) : ""); } else { $resultMessage = lang("success delete objects", $succ); } ajx_add("overview-panel", "reload"); break; case "tag": $tag = $attributes["tag"]; if (!trim($tag)) { break; } for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "email": $email = MailContents::findById($id); if (isset($email)) { if (user_config_option('show_emails_as_conversations', true, logged_user()->getId())) { $emails_in_conversation = MailContents::getMailsFromConversation($email); } else { $emails_in_conversation = array($email); } foreach ($emails_in_conversation as $email) { if ($email->canEdit(logged_user())) { Tags::addObjectTag($tag, $email); ApplicationLogs::createLog($email, $email->getWorkspaces(), ApplicationLogs::ACTION_TAG, false, null, true, $tag); } } $resultMessage = lang("success tag objects", ''); } break; default: $resultMessage = lang("Unimplemented type: '" . $type . "'"); // if $resultCode = 2; break; } // switch } // for break; case "untag": $tag = $attributes["tag"]; for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "email": $email = MailContents::findById($id); if (isset($email)) { if (user_config_option('show_emails_as_conversations', true, logged_user()->getId())) { $emails_in_conversation = MailContents::getMailsFromConversation($email); } else { $emails_in_conversation = array($email); } foreach ($emails_in_conversation as $email) { if ($email->canEdit(logged_user())) { if ($tag != '') { $email->deleteTag($tag); } else { $email->clearTags(); } } } //ApplicationLogs::createLog($email, $email->getWorkspaces(), ApplicationLogs::ACTION_TAG,false,null,true,$tag); $resultMessage = lang("success untag objects", ''); } break; default: $resultMessage = lang("Unimplemented type: '" . $type . "'"); // if $resultCode = 2; break; } // switch } // for break; case "unclassify": for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "email": $email = MailContents::findById($id); if (isset($email) && !$email->isDeleted() && $email->canEdit(logged_user())) { $this->do_unclassify($email); ApplicationLogs::createLog($email, $email->getWorkspaces(), ApplicationLogs::ACTION_TAG, false, null, true, $tag); $resultMessage = lang("success unclassify emails", count($attributes["ids"])); } break; default: $resultMessage = lang("Unimplemented type: '" . $type . "'"); // if $resultCode = 2; break; } // switch } // for break; case "move": $wsid = $attributes["moveTo"]; $destination = Projects::findById($wsid); if (!$destination instanceof Project) { $resultMessage = lang('project dnx'); $resultCode = 1; } else { if (!can_add(logged_user(), $destination, 'MailContents')) { $resultMessage = lang('no access permissions'); $resultCode = 1; } else { $count = 0; for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "email": $email = MailContents::findById($id); if (user_config_option('show_emails_as_conversations', true, logged_user()->getId())) { $conversation = MailContents::getMailsFromConversation($email); } else { $conversation = array($email); } foreach ($conversation as $conv_email) { $this->addEmailToWorkspace($conv_email->getId(), $destination, array_var($attributes, "mantainWs", true)); if (array_var($attributes, 'classify_atts') && $conv_email->getHasAttachments()) { MailUtilities::parseMail($conv_email->getContent(), $decoded, $parsedEmail, $warnings); $classification_data = array(); for ($j = 0; $j < count(array_var($parsedEmail, "Attachments", array())); $j++) { $classification_data["att_" . $j] = true; } $tags = implode(",", $conv_email->getTagNames()); $this->classifyFile($classification_data, $conv_email, $parsedEmail, array($destination), array_var($attributes, "mantainWs", true), $tags); } } $count++; break; default: $resultMessage = lang("Unimplemented type: '" . $type . "'"); // if $resultCode = 2; break; } // switch } // for $resultMessage = lang("success move objects", $count); $resultCode = 0; } } break; case "checkmail": $resultCheck = MailController::checkmail(); $resultMessage = $resultCheck[1]; // if $resultCode = $resultCheck[0]; ajx_add("overview-panel", "reload"); break; case "markAsRead": case "markAsUnRead": for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "email": $email = MailContents::findById($id); if (isset($email)) { if (user_config_option('show_emails_as_conversations', true, logged_user()->getId())) { $emails_in_conversation = MailContents::getMailsFromConversation($email); } else { $emails_in_conversation = array($email); } foreach ($emails_in_conversation as $email) { if ($email->canEdit(logged_user())) { $email->setIsRead(logged_user()->getId(), $action == 'markAsRead'); } } } break; default: $resultMessage = lang("Unimplemented type: '" . $type . "'"); // if $resultCode = 2; break; } // switch } // for ajx_add("overview-panel", "reload"); break; case "archive": $err = 0; $succ = 0; for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "email": $email = MailContents::findById($id); if (isset($email)) { if (user_config_option('show_emails_as_conversations', true, logged_user()->getId())) { $emails_in_conversation = MailContents::getMailsFromConversation($email); } else { $emails_in_conversation = array($email); } foreach ($emails_in_conversation as $email) { if ($email->canEdit(logged_user())) { try { $email->archive(null); ApplicationLogs::createLog($email, $email->getWorkspaces(), ApplicationLogs::ACTION_ARCHIVE); $succ++; } catch (Exception $e) { $err++; } } } } else { $err++; } break; default: $err++; break; } // switch } // for if ($err > 0) { $resultCode = 2; $resultMessage = lang("error archive objects", $err) . "<br />" . ($succ > 0 ? lang("success archive objects", $succ) : ""); } else { $resultMessage = lang("success archive objects", $succ); } ajx_add("overview-panel", "reload"); break; default: if ($action) { $resultMessage = lang("Unimplemented action: '" . $action . "'"); // if $resultCode = 2; } break; } // switch return array("errorMessage" => $resultMessage, "errorCode" => $resultCode); }
/** * Resolve action to perform * * @param string $action * @param array $attributes * @return string $message */ private function resolveAction($action, $attributes) { $resultMessage = ""; $resultCode = 0; switch ($action) { case "delete": $succ = 0; $err = 0; for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "message": $message = ProjectMessages::findById($id); if (isset($message) && $message->canDelete(logged_user())) { try { DB::beginWork(); $message->trash(); ApplicationLogs::createLog($message, $message->getWorkspaces(), ApplicationLogs::ACTION_TRASH); DB::commit(); $succ++; } catch (Exception $e) { DB::rollback(); $err++; } } else { $err++; } break; default: $err++; break; } // switch } // for if ($err > 0) { $resultCode = 2; $resultMessage = lang("error delete objects", $err) . "<br />" . ($succ > 0 ? lang("success delete objects", $succ) : ""); } else { $resultMessage = lang("success delete objects", $succ); } break; case "markasread": $succ = 0; $err = 0; for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "message": $message = ProjectMessages::findById($id); try { $message->setIsRead(logged_user()->getId(), true); $succ++; } catch (Exception $e) { $err++; } // try break; default: $err++; break; } // switch } // for if ($err > 0) { $resultCode = 2; $resultMessage = lang("error markasread objects", $err) . "<br />" . ($succ > 0 ? lang("success markasread objects", $succ) : ""); } break; case "markasunread": $succ = 0; $err = 0; for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "message": $message = ProjectMessages::findById($id); try { $message->setIsRead(logged_user()->getId(), false); $succ++; } catch (Exception $e) { $err++; } // try break; default: $err++; break; } // switch } // for if ($err > 0) { $resultCode = 2; $resultMessage = lang("error markasunread objects", $err) . "<br />" . ($succ > 0 ? lang("success markasunread objects", $succ) : ""); } break; case "tag": $tag = $attributes["tag"]; for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "message": $message = ProjectMessages::findById($id); if (isset($message) && $message->canEdit(logged_user())) { Tags::addObjectTag($tag, $message); ApplicationLogs::createLog($message, $message->getWorkspaces(), ApplicationLogs::ACTION_TAG, false, null, true, $tag); $resultMessage = lang("success tag objects", ''); } break; default: $resultMessage = lang("Unimplemented type: '" . $type . "'"); // if $resultCode = 2; break; } // switch } // for break; case "untag": $tag = $attributes["tag"]; for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "message": $message = ProjectMessages::findById($id); if (isset($message) && $message->canEdit(logged_user())) { if ($tag != '') { $message->deleteTag($tag); } else { $message->clearTags(); } $resultMessage = lang("success untag objects", ''); } break; default: $resultMessage = lang("Unimplemented type: '" . $type . "'"); // if $resultCode = 2; break; } // switch } // for break; case "move": $wsid = $attributes["moveTo"]; $destination = Projects::findById($wsid); if (!$destination instanceof Project) { $resultMessage = lang('project dnx'); $resultCode = 1; } else { if (!can_add(logged_user(), $destination, 'ProjectMessages')) { $resultMessage = lang('no access permissions'); $resultCode = 1; } else { $count = 0; for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "message": $message = ProjectMessages::findById($id); if ($message instanceof ProjectMessage && $message->canEdit(logged_user())) { if (!$attributes["mantainWs"]) { $removed = ""; $ws = $message->getWorkspaces(); foreach ($ws as $w) { if (can_add(logged_user(), $w, 'ProjectMessages')) { $message->removeFromWorkspace($w); $removed .= $w->getId() . ","; } } $removed = substr($removed, 0, -1); $log_action = ApplicationLogs::ACTION_MOVE; $log_data = ($removed == "" ? "" : "from:{$removed};") . "to:{$wsid}"; } else { $log_action = ApplicationLogs::ACTION_COPY; $log_data = "to:{$wsid}"; } $message->addToWorkspace($destination); ApplicationLogs::createLog($message, $message->getWorkspaces(), $log_action, false, null, true, $log_data); $count++; } break; default: $resultMessage = lang("Unimplemented type: '" . $type . "'"); // if $resultCode = 2; break; } // switch } // for $resultMessage = lang("success move objects", $count); $resultCode = 0; } } break; case "archive": $succ = 0; $err = 0; for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "message": $message = ProjectMessages::findById($id); if (isset($message) && $message->canEdit(logged_user())) { try { DB::beginWork(); $message->archive(); ApplicationLogs::createLog($message, $ws, ApplicationLogs::ACTION_ARCHIVE); DB::commit(); $succ++; } catch (Exception $e) { DB::rollback(); $err++; } } else { $err++; } break; default: $err++; break; } // switch } // for if ($err > 0) { $resultCode = 2; $resultMessage = lang("error archive objects", $err) . "<br />" . ($succ > 0 ? lang("success archive objects", $succ) : ""); } else { $resultMessage = lang("success archive objects", $succ); } break; default: $resultMessage = lang("Unimplemented action: '" . $action . "'"); // if $resultCode = 2; break; } // switch return array("errorMessage" => $resultMessage, "errorCode" => $resultCode); }
function multi_task_action() { ajx_current("empty"); $ids = explode(',', array_var($_POST, 'ids')); $action = array_var($_POST, 'action'); $options = array_var($_POST, 'options'); if (!is_array($ids) || trim(array_var($_POST, 'ids')) == '' || count($ids) <= 0) { flash_error(lang('no items selected')); return; } $tasks = ProjectTasks::findAll(array('conditions' => 'id in (' . implode(',', $ids) . ')')); $tasksToReturn = array(); $showSuccessMessage = true; try { DB::beginWork(); foreach ($tasks as $k => $task) { switch ($action) { case 'tag': if ($task->canEdit(logged_user())) { $tag = $options; Tags::addObjectTag($tag, $task); ApplicationLogs::createLog($task, $task->getWorkspaces(), ApplicationLogs::ACTION_TAG, false, null, true, $tag); $tasksToReturn[] = $task->getArrayInfo(); } break; case 'untag': if ($task->canEdit(logged_user())) { $tag = $options; if ($tag != '') { $task->deleteTag($tag); } else { $task->clearTags(); } //ApplicationLogs::createLog($task, $task->getWorkspaces(), ApplicationLogs::ACTION_TAG,false,null,true,$tag); $tasksToReturn[] = $task->getArrayInfo(); } break; case 'complete': if ($task->canEdit(logged_user())) { $task->completeTask(); $tasksToReturn[] = $task->getArrayInfo(); } break; case 'delete': if ($task->canDelete(logged_user())) { $tasksToReturn[] = array('id' => $task->getId()); $subtasks = $task->getAllSubtasks(); $task->trash(); ApplicationLogs::createLog($task, $task->getWorkspaces(), ApplicationLogs::ACTION_TRASH); foreach ($subtasks as $st) { ApplicationLogs::createLog($st, $st->getWorkspaces(), ApplicationLogs::ACTION_TRASH); } } break; case 'archive': if ($task->canEdit(logged_user())) { $tasksToReturn[] = $task->getArrayInfo(); $subtasks = $task->getAllSubtasks(); $task->archive(); ApplicationLogs::createLog($task, $task->getWorkspaces(), ApplicationLogs::ACTION_ARCHIVE); foreach ($subtasks as $st) { ApplicationLogs::createLog($st, $st->getWorkspaces(), ApplicationLogs::ACTION_ARCHIVE); } } break; case 'start_work': if ($task->canEdit(logged_user())) { $task->addTimeslot(logged_user()); ApplicationLogs::createLog($task, $task->getWorkspaces(), ApplicationLogs::ACTION_EDIT); $tasksToReturn[] = $task->getArrayInfo(); $showSuccessMessage = false; } break; case 'close_work': if ($task->canEdit(logged_user())) { $task->closeTimeslots(logged_user(), array_var($_POST, 'options')); ApplicationLogs::createLog($task, $task->getWorkspaces(), ApplicationLogs::ACTION_EDIT); $tasksToReturn[] = $task->getArrayInfo(); $showSuccessMessage = false; } break; case 'pause_work': if ($task->canEdit(logged_user())) { $task->pauseTimeslots(logged_user()); $tasksToReturn[] = $task->getArrayInfo(); $showSuccessMessage = false; } break; case 'resume_work': if ($task->canEdit(logged_user())) { $task->resumeTimeslots(logged_user()); $tasksToReturn[] = $task->getArrayInfo(); $showSuccessMessage = false; } break; case 'markasread': $task->setIsRead(logged_user()->getId(), true); $tasksToReturn[] = $task->getArrayInfo(); $showSuccessMessage = false; break; case 'markasunread': $task->setIsRead(logged_user()->getId(), false); $tasksToReturn[] = $task->getArrayInfo(); $showSuccessMessage = false; break; default: DB::rollback(); flash_error(lang('invalid action')); return; } // end switch } // end foreach DB::commit(); if (count($tasksToReturn) < count($tasks)) { flash_error(lang('tasks updated') . '. ' . lang('some tasks could not be updated due to permission restrictions')); } else { if ($showSuccessMessage) { flash_success(lang('tasks updated')); } } ajx_extra_data(array('tasks' => $tasksToReturn)); } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); } }
function do_tag_object($tag, $ids, $manager = null) { $err = $succ = 0; foreach ($ids as $id) { if (trim($id) != '') { try { if ($manager) { $obj = get_object_by_manager_and_id($id, $manager); Tags::addObjectTag($tag, $obj, $obj->getProject()); } else { //call from dashboard, format is manager:id $split = explode(":", $id); $obj = get_object_by_manager_and_id($split[1], $split[0]); Tags::addObjectTag($tag, $obj, $obj->getProject()); } if ($obj instanceof ProjectDataObject) { if ($obj->isSearchable()) { $obj->addTagsToSearchableObject(); } ApplicationLogs::createLog($obj, $obj->getWorkspaces(), ApplicationLogs::ACTION_TAG, false, null, true, $tag); } $succ++; } catch (Exception $e) { $err++; } } } return array($succ, $err); }