function saveWorkerPeekAction() { $translate = DevblocksPlatform::getTranslationService(); $active_worker = FegApplication::getActiveWorker(); if (!$active_worker || !$active_worker->is_superuser) { return; } @($id = DevblocksPlatform::importGPC($_POST['id'], 'integer')); @($view_id = DevblocksPlatform::importGPC($_POST['view_id'], 'string')); @($first_name = DevblocksPlatform::importGPC($_POST['first_name'], 'string')); @($last_name = DevblocksPlatform::importGPC($_POST['last_name'], 'string')); @($title = DevblocksPlatform::importGPC($_POST['title'], 'string')); @($email = DevblocksPlatform::importGPC($_POST['email'], 'string')); @($password = DevblocksPlatform::importGPC($_POST['password'], 'string')); @($is_superuser = DevblocksPlatform::importGPC($_POST['is_superuser'], 'integer', 0)); @($disabled = DevblocksPlatform::importGPC($_POST['is_disabled'], 'integer', 0)); // @$group_ids = DevblocksPlatform::importGPC($_POST['group_ids'],'array'); // @$group_roles = DevblocksPlatform::importGPC($_POST['group_roles'],'array'); @($delete = DevblocksPlatform::importGPC($_POST['do_delete'], 'integer', 0)); // [TODO] The superuser set bit here needs to be protected by ACL if (empty($first_name)) { $first_name = "Anonymous"; } if (!empty($id) && !empty($delete)) { // Can't delete or disable self if ($active_worker->id != $id) { DAO_Worker::delete($id); } } else { if (empty($id) && null == DAO_Worker::getWhere(sprintf("%s=%s", DAO_Worker::EMAIL, Feg_ORMHelper::qstr($email)))) { $workers = DAO_Worker::getAll(); $license = FegLicense::getInstance(); if (!empty($license) && !empty($license['serial']) || count($workers) < 3) { // Creating new worker. If password is empty, email it to them if (empty($password)) { $settings = DevblocksPlatform::getPluginSettingsService(); $replyFrom = $settings->get('feg.core', FegSettings::DEFAULT_REPLY_FROM); $replyPersonal = $settings->get('feg.core', FegSettings::DEFAULT_REPLY_PERSONAL, ''); $url = DevblocksPlatform::getUrlService(); $password = FegApplication::generatePassword(8); } $fields = array(DAO_Worker::EMAIL => $email, DAO_Worker::PASS => $password); $id = DAO_Worker::create($fields); } } // end create worker // Update $fields = array(DAO_Worker::FIRST_NAME => $first_name, DAO_Worker::LAST_NAME => $last_name, DAO_Worker::TITLE => $title, DAO_Worker::EMAIL => $email, DAO_Worker::IS_SUPERUSER => $is_superuser, DAO_Worker::IS_DISABLED => $disabled); // if we're resetting the password if (!empty($password)) { $fields[DAO_Worker::PASS] = md5($password); } // Update worker DAO_Worker::update($id, $fields); // Custom field saves @($field_ids = DevblocksPlatform::importGPC($_POST['field_ids'], 'array', array())); DAO_CustomFieldValue::handleFormPost(FegCustomFieldSource_Worker::ID, $id, $field_ids); } if (!empty($view_id)) { $view = Feg_AbstractViewLoader::getView($view_id); $view->render(); } }
function saveWorkerPeekAction() { $translate = DevblocksPlatform::getTranslationService(); $active_worker = CerberusApplication::getActiveWorker(); if (!$active_worker || !$active_worker->is_superuser || DEMO_MODE) { return; } @($id = DevblocksPlatform::importGPC($_POST['id'], 'integer')); @($view_id = DevblocksPlatform::importGPC($_POST['view_id'], 'string')); @($first_name = DevblocksPlatform::importGPC($_POST['first_name'], 'string')); @($last_name = DevblocksPlatform::importGPC($_POST['last_name'], 'string')); @($title = DevblocksPlatform::importGPC($_POST['title'], 'string')); @($email = DevblocksPlatform::importGPC($_POST['email'], 'string')); @($password = DevblocksPlatform::importGPC($_POST['password'], 'string')); @($is_superuser = DevblocksPlatform::importGPC($_POST['is_superuser'], 'integer', 0)); @($disabled = DevblocksPlatform::importGPC($_POST['is_disabled'], 'integer', 0)); @($group_ids = DevblocksPlatform::importGPC($_POST['group_ids'], 'array')); @($group_roles = DevblocksPlatform::importGPC($_POST['group_roles'], 'array')); @($delete = DevblocksPlatform::importGPC($_POST['do_delete'], 'integer', 0)); // [TODO] The superuser set bit here needs to be protected by ACL if (empty($first_name)) { $first_name = "Anonymous"; } if (!empty($id) && !empty($delete)) { // Can't delete or disable self if ($active_worker->id != $id) { DAO_Worker::deleteAgent($id); } } else { if (empty($id) && null == DAO_Worker::lookupAgentEmail($email)) { $workers = DAO_Worker::getAll(); $license = CerberusLicense::getInstance(); if (!empty($license) && !empty($license['serial']) || count($workers) < 3) { // Creating new worker. If password is empty, email it to them if (empty($password)) { $settings = DevblocksPlatform::getPluginSettingsService(); $replyFrom = $settings->get('cerberusweb.core', CerberusSettings::DEFAULT_REPLY_FROM); $replyPersonal = $settings->get('cerberusweb.core', CerberusSettings::DEFAULT_REPLY_PERSONAL, ''); $url = DevblocksPlatform::getUrlService(); $password = CerberusApplication::generatePassword(8); try { $mail_service = DevblocksPlatform::getMailService(); $mailer = $mail_service->getMailer(CerberusMail::getMailerDefaults()); $mail = $mail_service->createMessage(); $mail->setTo(array($email => $first_name . ' ' . $last_name)); $mail->setFrom(array($replyFrom => $replyPersonal)); $mail->setSubject('Your new helpdesk login information!'); $mail->generateId(); $headers = $mail->getHeaders(); $headers->addTextHeader('X-Mailer', 'Cerberus Helpdesk (Build ' . APP_BUILD . ')'); $body = sprintf("Your new helpdesk login information is below:\r\n" . "\r\n" . "URL: %s\r\n" . "Login: %s\r\n" . "Password: %s\r\n" . "\r\n" . "You should change your password from Preferences after logging in for the first time.\r\n" . "\r\n", $url->write('', true), $email, $password); $mail->setBody($body); if (!$mailer->send($mail)) { throw new Exception('Password notification email failed to send.'); } } catch (Exception $e) { // [TODO] need to report to the admin when the password email doesn't send. The try->catch // will keep it from killing php, but the password will be empty and the user will never get an email. } } $id = DAO_Worker::create($email, $password, '', '', ''); } } // end create worker // Update $fields = array(DAO_Worker::FIRST_NAME => $first_name, DAO_Worker::LAST_NAME => $last_name, DAO_Worker::TITLE => $title, DAO_Worker::EMAIL => $email, DAO_Worker::IS_SUPERUSER => $is_superuser, DAO_Worker::IS_DISABLED => $disabled); // if we're resetting the password if (!empty($password)) { $fields[DAO_Worker::PASSWORD] = md5($password); } // Update worker DAO_Worker::updateAgent($id, $fields); // Update group memberships if (is_array($group_ids) && is_array($group_roles)) { foreach ($group_ids as $idx => $group_id) { if (empty($group_roles[$idx])) { DAO_Group::unsetTeamMember($group_id, $id); } else { DAO_Group::setTeamMember($group_id, $id, 2 == $group_roles[$idx]); } } } // Add the worker e-mail to the addresses table if (!empty($email)) { DAO_Address::lookupAddress($email, true); } // Addresses if (null == DAO_AddressToWorker::getByAddress($email)) { DAO_AddressToWorker::assign($email, $id); DAO_AddressToWorker::update($email, array(DAO_AddressToWorker::IS_CONFIRMED => 1)); } // Custom field saves @($field_ids = DevblocksPlatform::importGPC($_POST['field_ids'], 'array', array())); DAO_CustomFieldValue::handleFormPost(ChCustomFieldSource_Worker::ID, $id, $field_ids); } if (!empty($view_id)) { $view = C4_AbstractViewLoader::getView($view_id); $view->render(); } //DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('config','workers'))); }
function saveOppPropertiesAction() { @($opp_id = DevblocksPlatform::importGPC($_REQUEST['opp_id'], 'integer', 0)); @($name = DevblocksPlatform::importGPC($_REQUEST['name'], 'string', '')); @($status = DevblocksPlatform::importGPC($_REQUEST['status'], 'integer', 0)); @($amount_dollars = DevblocksPlatform::importGPC($_REQUEST['amount'], 'string', '0')); @($amount_cents = DevblocksPlatform::importGPC($_REQUEST['amount_cents'], 'integer', 0)); @($worker_id = DevblocksPlatform::importGPC($_REQUEST['worker_id'], 'integer', 0)); @($created_date_str = DevblocksPlatform::importGPC($_REQUEST['created_date'], 'string', '')); @($closed_date_str = DevblocksPlatform::importGPC($_REQUEST['closed_date'], 'string', '')); // State $is_closed = 0 == $status ? 0 : 1; $is_won = 1 == $status ? 1 : 0; // Strip commas and decimals and put together the "dollars+cents" $amount = intval(str_replace(array(',', '.'), '', $amount_dollars)) . '.' . number_format($amount_cents, 0, '', ''); // Dates if (false === ($created_date = strtotime($created_date_str))) { $created_date = time(); } if (false === ($closed_date = strtotime($closed_date_str))) { $closed_date = $is_closed ? time() : 0; } if (!$is_closed) { $closed_date = 0; } if (!empty($opp_id)) { $fields = array(DAO_CrmOpportunity::NAME => $name, DAO_CrmOpportunity::AMOUNT => $amount, DAO_CrmOpportunity::CREATED_DATE => $created_date, DAO_CrmOpportunity::UPDATED_DATE => time(), DAO_CrmOpportunity::CLOSED_DATE => $closed_date, DAO_CrmOpportunity::IS_CLOSED => $is_closed, DAO_CrmOpportunity::IS_WON => $is_won, DAO_CrmOpportunity::WORKER_ID => $worker_id); DAO_CrmOpportunity::update($opp_id, $fields); @($field_ids = DevblocksPlatform::importGPC($_REQUEST['field_ids'], 'array', array())); DAO_CustomFieldValue::handleFormPost(CrmCustomFieldSource_Opportunity::ID, $opp_id, $field_ids); } DevblocksPlatform::redirect(new DevblocksHttpResponse(array('crm', 'opp', $opp_id))); }
function savePropertiesAction() { @($ticket_id = DevblocksPlatform::importGPC($_POST['ticket_id'], 'integer', 0)); @($remove = DevblocksPlatform::importGPC($_POST['remove'], 'array', array())); @($next_worker_id = DevblocksPlatform::importGPC($_POST['next_worker_id'], 'integer', 0)); @($ticket_reopen = DevblocksPlatform::importGPC($_POST['ticket_reopen'], 'string', '')); @($unlock_date = DevblocksPlatform::importGPC($_POST['unlock_date'], 'string', '')); @($subject = DevblocksPlatform::importGPC($_POST['subject'], 'string', '')); @($closed = DevblocksPlatform::importGPC($_POST['closed'], 'closed', 0)); @($ticket = DAO_Ticket::getTicket($ticket_id)); if (empty($ticket_id) || empty($ticket)) { return; } $fields = array(); // Properties if (empty($next_worker_id)) { $unlock_date = ""; } // Status if (isset($closed)) { switch ($closed) { case 0: // open $fields[DAO_Ticket::IS_WAITING] = 0; $fields[DAO_Ticket::IS_CLOSED] = 0; $fields[DAO_Ticket::IS_DELETED] = 0; $fields[DAO_Ticket::DUE_DATE] = 0; break; case 1: // closed $fields[DAO_Ticket::IS_WAITING] = 0; $fields[DAO_Ticket::IS_CLOSED] = 1; $fields[DAO_Ticket::IS_DELETED] = 0; if (isset($ticket_reopen)) { @($time = intval(strtotime($ticket_reopen))); $fields[DAO_Ticket::DUE_DATE] = $time; } break; case 2: // waiting $fields[DAO_Ticket::IS_WAITING] = 1; $fields[DAO_Ticket::IS_CLOSED] = 0; $fields[DAO_Ticket::IS_DELETED] = 0; if (isset($ticket_reopen)) { @($time = intval(strtotime($ticket_reopen))); $fields[DAO_Ticket::DUE_DATE] = $time; } break; case 3: // deleted $fields[DAO_Ticket::IS_WAITING] = 0; $fields[DAO_Ticket::IS_CLOSED] = 1; $fields[DAO_Ticket::IS_DELETED] = 1; $fields[DAO_Ticket::DUE_DATE] = 0; break; } } if (isset($next_worker_id)) { $fields[DAO_Ticket::NEXT_WORKER_ID] = $next_worker_id; } if (isset($unlock_date)) { @($time = intval(strtotime($unlock_date))); $fields[DAO_Ticket::UNLOCK_DATE] = $time; } if (!empty($subject)) { $fields[DAO_Ticket::SUBJECT] = $subject; } if (!empty($fields)) { DAO_Ticket::updateTicket($ticket_id, $fields); } // Custom field saves @($field_ids = DevblocksPlatform::importGPC($_POST['field_ids'], 'array', array())); DAO_CustomFieldValue::handleFormPost(ChCustomFieldSource_Ticket::ID, $ticket_id, $field_ids); // Requesters @($req_list = DevblocksPlatform::importGPC($_POST['add'], 'string', '')); if (!empty($req_list)) { $req_list = DevblocksPlatform::parseCrlfString($req_list); $req_list = array_unique($req_list); // [TODO] This is redundant with the Requester Peek on Reply if (is_array($req_list) && !empty($req_list)) { foreach ($req_list as $req) { if (empty($req)) { continue; } $rfc_addys = imap_rfc822_parse_adrlist($req, 'localhost'); foreach ($rfc_addys as $rfc_addy) { $addy = $rfc_addy->mailbox . '@' . $rfc_addy->host; if (null != ($req_addy = CerberusApplication::hashLookupAddress($addy, true))) { DAO_Ticket::createRequester($req_addy->id, $ticket_id); } } } } } if (!empty($remove) && is_array($remove)) { foreach ($remove as $address_id) { $addy = DAO_Address::get($address_id); DAO_Ticket::deleteRequester($ticket_id, $address_id); // echo "Removed <b>" . $addy->email . "</b> as a recipient.<br>"; } } DevblocksPlatform::redirect(new DevblocksHttpResponse(array('display', $ticket->mask))); }
function saveTaskPeekAction() { @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', '')); @($view_id = DevblocksPlatform::importGPC($_REQUEST['view_id'], 'string', '')); @($link_namespace = DevblocksPlatform::importGPC($_REQUEST['link_namespace'], 'string', '')); @($link_object_id = DevblocksPlatform::importGPC($_REQUEST['link_object_id'], 'integer', 0)); @($do_delete = DevblocksPlatform::importGPC($_REQUEST['do_delete'], 'integer', 0)); $active_worker = CerberusApplication::getActiveWorker(); if (!empty($id) && !empty($do_delete)) { // delete $task = DAO_Task::get($id); // Check privs if ($active_worker->hasPriv('core.tasks.actions.create') && $active_worker->id == $task->worker_id || $active_worker->hasPriv('core.tasks.actions.update_nobody') && empty($task->worker_id) || $active_worker->hasPriv('core.tasks.actions.update_all')) { DAO_Task::delete($id); } } else { // create|update $fields = array(); // Title @($title = DevblocksPlatform::importGPC($_REQUEST['title'], 'string', '')); if (!empty($title)) { $fields[DAO_Task::TITLE] = $title; } // Completed @($completed = DevblocksPlatform::importGPC($_REQUEST['completed'], 'integer', 0)); $fields[DAO_Task::IS_COMPLETED] = intval($completed); // [TODO] This shouldn't constantly update the completed date (it should compare) if ($completed) { $fields[DAO_Task::COMPLETED_DATE] = time(); } else { $fields[DAO_Task::COMPLETED_DATE] = 0; } // Due Date @($due_date = DevblocksPlatform::importGPC($_REQUEST['due_date'], 'string', '')); @($fields[DAO_Task::DUE_DATE] = empty($due_date) ? 0 : intval(strtotime($due_date))); // Worker @($worker_id = DevblocksPlatform::importGPC($_REQUEST['worker_id'], 'integer', 0)); @($fields[DAO_Task::WORKER_ID] = intval($worker_id)); // Content @($content = DevblocksPlatform::importGPC($_REQUEST['content'], 'string', '')); @($fields[DAO_Task::CONTENT] = $content); // Link to object (optional) if (!empty($link_namespace) && !empty($link_object_id)) { @($fields[DAO_Task::SOURCE_EXTENSION] = $link_namespace); @($fields[DAO_Task::SOURCE_ID] = $link_object_id); } // Save if (!empty($id)) { DAO_Task::update($id, $fields); } else { $id = DAO_Task::create($fields); // Write a notification (if not assigned to ourselves) // $url_writer = DevblocksPlatform::getUrlService(); $source_extensions = DevblocksPlatform::getExtensions('cerberusweb.task.source', true); if (!empty($worker_id)) { // && $active_worker->id != $worker_id (Temporarily allow self notifications) if (null != @($source_renderer = $source_extensions[$link_namespace])) { /* @var $source_renderer Extension_TaskSource */ $source_info = $source_renderer->getSourceInfo($link_object_id); $source_name = $source_info['name']; $source_url = $source_info['url']; if (empty($source_name) || empty($source_url)) { break; } $fields = array(DAO_WorkerEvent::CREATED_DATE => time(), DAO_WorkerEvent::WORKER_ID => $worker_id, DAO_WorkerEvent::URL => $source_url, DAO_WorkerEvent::TITLE => 'New Task Assignment', DAO_WorkerEvent::CONTENT => sprintf("%s\n%s says: %s", $source_name, $active_worker->getName(), $title), DAO_WorkerEvent::IS_READ => 0); DAO_WorkerEvent::create($fields); } } } // Custom field saves @($field_ids = DevblocksPlatform::importGPC($_POST['field_ids'], 'array', array())); DAO_CustomFieldValue::handleFormPost(ChCustomFieldSource_Task::ID, $id, $field_ids); } if (!empty($view_id) && null != ($view = C4_AbstractViewLoader::getView('', $view_id))) { $view->render(); } exit; }
function saveEntryAction() { $active_worker = CerberusApplication::getActiveWorker(); // Make sure we're an active worker if (empty($active_worker) || empty($active_worker->id)) { return; } @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', 0)); @($do_delete = DevblocksPlatform::importGPC($_REQUEST['do_delete'], 'integer', 0)); @($email = DevblocksPlatform::importGPC($_POST['email'], 'string', '')); @($mood = DevblocksPlatform::importGPC($_POST['mood'], 'integer', 0)); @($quote = DevblocksPlatform::importGPC($_POST['quote'], 'string', '')); @($url = DevblocksPlatform::importGPC($_POST['url'], 'string', '')); @($source_extension_id = DevblocksPlatform::importGPC($_POST['source_extension_id'], 'string', '')); @($source_id = DevblocksPlatform::importGPC($_POST['source_id'], 'integer', 0)); // Translate email string into addy id, if exists $address_id = 0; if (!empty($email)) { if (null != ($author_address = DAO_Address::lookupAddress($email, true))) { $address_id = $author_address->id; } } // Delete entries if (!empty($id) && !empty($do_delete)) { if (null != ($entry = DAO_FeedbackEntry::get($id))) { // Only superusers and owners can delete entries if ($active_worker->is_superuser || $active_worker->id == $entry->worker_id) { DAO_FeedbackEntry::delete($id); } } return; } // New or modify $fields = array(DAO_FeedbackEntry::QUOTE_MOOD => intval($mood), DAO_FeedbackEntry::QUOTE_TEXT => $quote, DAO_FeedbackEntry::QUOTE_ADDRESS_ID => intval($address_id), DAO_FeedbackEntry::SOURCE_URL => $url); // Only on new if (empty($id)) { $fields[DAO_FeedbackEntry::LOG_DATE] = time(); $fields[DAO_FeedbackEntry::WORKER_ID] = $active_worker->id; } if (empty($id)) { // create $id = DAO_FeedbackEntry::create($fields); // Post-create actions if (!empty($source_extension_id) && !empty($source_id)) { switch ($source_extension_id) { case 'feedback.source.ticket': // Create a ticket comment about the feedback (to prevent dupes) if (null == ($worker_address = DAO_Address::lookupAddress($active_worker->email))) { break; } $comment_text = sprintf("== Capture Feedback ==\n" . "Author: %s\n" . "Mood: %s\n" . "\n" . "%s\n", !empty($author_address) ? $author_address->email : 'Anonymous', empty($mood) ? 'Neutral' : (1 == $mood ? 'Praise' : 'Criticism'), $quote); $fields = array(DAO_TicketComment::ADDRESS_ID => $worker_address->id, DAO_TicketComment::COMMENT => $comment_text, DAO_TicketComment::CREATED => time(), DAO_TicketComment::TICKET_ID => intval($source_id)); DAO_TicketComment::create($fields); break; } } } else { // modify DAO_FeedbackEntry::update($id, $fields); } // Custom field saves @($field_ids = DevblocksPlatform::importGPC($_POST['field_ids'], 'array', array())); DAO_CustomFieldValue::handleFormPost(ChCustomFieldSource_FeedbackEntry::ID, $id, $field_ids); }
function saveOrgPeekAction() { $active_worker = CerberusApplication::getActiveWorker(); @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', 0)); @($view_id = DevblocksPlatform::importGPC($_REQUEST['view_id'], 'string', '')); @($org_name = DevblocksPlatform::importGPC($_REQUEST['org_name'], 'string', '')); @($street = DevblocksPlatform::importGPC($_REQUEST['street'], 'string', '')); @($city = DevblocksPlatform::importGPC($_REQUEST['city'], 'string', '')); @($province = DevblocksPlatform::importGPC($_REQUEST['province'], 'string', '')); @($postal = DevblocksPlatform::importGPC($_REQUEST['postal'], 'string', '')); @($country = DevblocksPlatform::importGPC($_REQUEST['country'], 'string', '')); @($phone = DevblocksPlatform::importGPC($_REQUEST['phone'], 'string', '')); @($website = DevblocksPlatform::importGPC($_REQUEST['website'], 'string', '')); @($delete = DevblocksPlatform::importGPC($_REQUEST['do_delete'], 'integer', 0)); if (!empty($id) && !empty($delete)) { // delete if ($active_worker->hasPriv('core.addybook.org.actions.delete')) { DAO_ContactOrg::delete($id); } } else { // create/edit if ($active_worker->hasPriv('core.addybook.org.actions.update')) { $fields = array(DAO_ContactOrg::NAME => $org_name, DAO_ContactOrg::STREET => $street, DAO_ContactOrg::CITY => $city, DAO_ContactOrg::PROVINCE => $province, DAO_ContactOrg::POSTAL => $postal, DAO_ContactOrg::COUNTRY => $country, DAO_ContactOrg::PHONE => $phone, DAO_ContactOrg::WEBSITE => $website); if ($id == 0) { $id = DAO_ContactOrg::create($fields); } else { DAO_ContactOrg::update($id, $fields); } // Custom field saves @($field_ids = DevblocksPlatform::importGPC($_POST['field_ids'], 'array', array())); DAO_CustomFieldValue::handleFormPost(ChCustomFieldSource_Org::ID, $id, $field_ids); } } $view = C4_AbstractViewLoader::getView($view_id); $view->render(); }
function saveSensorPeekAction() { $translate = DevblocksPlatform::getTranslationService(); $active_worker = PortSensorApplication::getActiveWorker(); // [TODO] ACL // return; @($id = DevblocksPlatform::importGPC($_POST['id'], 'integer')); @($view_id = DevblocksPlatform::importGPC($_POST['view_id'], 'string')); @($name = DevblocksPlatform::importGPC($_POST['name'], 'string')); @($extension_id = DevblocksPlatform::importGPC($_POST['extension_id'], 'string')); @($disabled = DevblocksPlatform::importGPC($_POST['is_disabled'], 'integer', 0)); @($delete = DevblocksPlatform::importGPC($_POST['do_delete'], 'integer', 0)); // [TODO] The superuser set bit here needs to be protected by ACL if (empty($name)) { $name = "New Sensor"; } if (!empty($id) && !empty($delete)) { DAO_Sensor::delete($id); } else { $fields = array(DAO_Sensor::NAME => $name, DAO_Sensor::EXTENSION_ID => $extension_id, DAO_Sensor::IS_DISABLED => $disabled); if (empty($id)) { $id = DAO_Sensor::create($fields); } else { DAO_Sensor::update($id, $fields); } // Save sensor extension config if (!empty($extension_id)) { if (null != ($ext = DevblocksPlatform::getExtension($extension_id, true))) { if (null != ($sensor = DAO_Sensor::get($id)) && $ext instanceof Extension_Sensor) { $ext->saveConfig($sensor); } } } // Custom field saves @($field_ids = DevblocksPlatform::importGPC($_POST['field_ids'], 'array', array())); DAO_CustomFieldValue::handleFormPost(PsCustomFieldSource_Sensor::ID, $id, $field_ids); } if (!empty($view_id)) { $view = Ps_AbstractViewLoader::getView($view_id); $view->render(); } }
function savePreviewAction() { @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', 0)); @($view_id = DevblocksPlatform::importGPC($_REQUEST['view_id'], 'string', '')); @($subject = DevblocksPlatform::importGPC($_REQUEST['subject'], 'string', '')); @($closed = DevblocksPlatform::importGPC($_REQUEST['closed'], 'integer', 0)); @($next_worker_id = DevblocksPlatform::importGPC($_REQUEST['next_worker_id'], 'integer', 0)); @($bucket = DevblocksPlatform::importGPC($_REQUEST['bucket_id'], 'string', '')); @($spam_training = DevblocksPlatform::importGPC($_REQUEST['spam_training'], 'string', '')); $fields = array(DAO_Ticket::SUBJECT => $subject, DAO_Ticket::NEXT_WORKER_ID => $next_worker_id); // Status if (isset($closed)) { switch ($closed) { case 0: // open $fields[DAO_Ticket::IS_WAITING] = 0; $fields[DAO_Ticket::IS_CLOSED] = 0; $fields[DAO_Ticket::IS_DELETED] = 0; $fields[DAO_Ticket::DUE_DATE] = 0; break; case 1: // closed $fields[DAO_Ticket::IS_WAITING] = 0; $fields[DAO_Ticket::IS_CLOSED] = 1; $fields[DAO_Ticket::IS_DELETED] = 0; break; case 2: // waiting $fields[DAO_Ticket::IS_WAITING] = 1; $fields[DAO_Ticket::IS_CLOSED] = 0; $fields[DAO_Ticket::IS_DELETED] = 0; break; case 3: // deleted $fields[DAO_Ticket::IS_WAITING] = 0; $fields[DAO_Ticket::IS_CLOSED] = 1; $fields[DAO_Ticket::IS_DELETED] = 1; $fields[DAO_Ticket::DUE_DATE] = 0; break; } } // Team/Category if (!empty($bucket)) { list($team_id, $bucket_id) = CerberusApplication::translateTeamCategoryCode($bucket); if (!empty($team_id)) { $fields[DAO_Ticket::TEAM_ID] = $team_id; $fields[DAO_Ticket::CATEGORY_ID] = $bucket_id; } } // Spam Training if (!empty($spam_training)) { if ('S' == $spam_training) { CerberusBayes::markTicketAsSpam($id); } elseif ('N' == $spam_training) { CerberusBayes::markTicketAsNotSpam($id); } } DAO_Ticket::updateTicket($id, $fields); // Custom field saves @($field_ids = DevblocksPlatform::importGPC($_POST['field_ids'], 'array', array())); DAO_CustomFieldValue::handleFormPost(ChCustomFieldSource_Ticket::ID, $id, $field_ids); $defaults = new C4_AbstractViewModel(); $defaults->class_name = 'C4_TicketView'; $defaults->id = $view_id; $view = C4_AbstractViewLoader::getView($view_id, $defaults); $view->render(); exit; }
function saveTasksPropertiesTabAction() { @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', '')); @($do_delete = DevblocksPlatform::importGPC($_REQUEST['do_delete'], 'integer', 0)); $active_worker = CerberusApplication::getActiveWorker(); if (!empty($id) && !empty($do_delete)) { // delete $task = DAO_Task::get($id); // Check privs if ($active_worker->hasPriv('core.tasks.actions.create') && $active_worker->id == $task->worker_id || $active_worker->hasPriv('core.tasks.actions.update_nobody') && empty($task->worker_id) || $active_worker->hasPriv('core.tasks.actions.update_all')) { DAO_Task::delete($id); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('activity', 'tasks'))); exit; } } else { // update $fields = array(); // Title @($title = DevblocksPlatform::importGPC($_REQUEST['title'], 'string', '')); $fields[DAO_Task::TITLE] = !empty($title) ? $title : 'New Task'; // Completed @($completed = DevblocksPlatform::importGPC($_REQUEST['completed'], 'integer', 0)); $fields[DAO_Task::IS_COMPLETED] = intval($completed); // [TODO] This shouldn't constantly update the completed date (it should compare) if ($completed) { $fields[DAO_Task::COMPLETED_DATE] = time(); } else { $fields[DAO_Task::COMPLETED_DATE] = 0; } // Updated Date $fields[DAO_Task::UPDATED_DATE] = time(); // Due Date @($due_date = DevblocksPlatform::importGPC($_REQUEST['due_date'], 'string', '')); @($fields[DAO_Task::DUE_DATE] = empty($due_date) ? 0 : intval(strtotime($due_date))); // Worker @($worker_id = DevblocksPlatform::importGPC($_REQUEST['worker_id'], 'integer', 0)); @($fields[DAO_Task::WORKER_ID] = intval($worker_id)); // Save if (!empty($id)) { DAO_Task::update($id, $fields); // Custom field saves @($field_ids = DevblocksPlatform::importGPC($_POST['field_ids'], 'array', array())); DAO_CustomFieldValue::handleFormPost(ChCustomFieldSource_Task::ID, $id, $field_ids); } } DevblocksPlatform::redirect(new DevblocksHttpResponse(array('tasks', 'display', $id, 'properties'))); }
function saveEntryAction() { $active_worker = CerberusApplication::getActiveWorker(); // Make sure we're an active worker if (empty($active_worker) || empty($active_worker->id)) { return; } @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', 0)); @($do_delete = DevblocksPlatform::importGPC($_REQUEST['do_delete'], 'integer', 0)); @($activity_id = DevblocksPlatform::importGPC($_POST['activity_id'], 'integer', 0)); @($time_actual_mins = DevblocksPlatform::importGPC($_POST['time_actual_mins'], 'integer', 0)); @($notes = DevblocksPlatform::importGPC($_POST['notes'], 'string', '')); @($org_str = DevblocksPlatform::importGPC($_POST['org'], 'string', '')); @($source_extension_id = DevblocksPlatform::importGPC($_POST['source_extension_id'], 'string', '')); @($source_id = DevblocksPlatform::importGPC($_POST['source_id'], 'integer', 0)); // Translate org string into org id, if exists $org_id = 0; if (!empty($org_str)) { $org_id = DAO_ContactOrg::lookup($org_str, true); } // Delete entries if (!empty($id) && !empty($do_delete)) { if (null != ($entry = DAO_TimeTrackingEntry::get($id))) { // Check privs if ($active_worker->hasPriv('timetracking.actions.create') && $active_worker->id == $entry->worker_id || $active_worker->hasPriv('timetracking.actions.update_all')) { DAO_TimeTrackingEntry::delete($id); } } return; } // New or modify $fields = array(DAO_TimeTrackingEntry::ACTIVITY_ID => intval($activity_id), DAO_TimeTrackingEntry::TIME_ACTUAL_MINS => intval($time_actual_mins), DAO_TimeTrackingEntry::NOTES => $notes, DAO_TimeTrackingEntry::DEBIT_ORG_ID => intval($org_id)); // Only on new if (empty($id)) { $fields[DAO_TimeTrackingEntry::LOG_DATE] = time(); $fields[DAO_TimeTrackingEntry::SOURCE_EXTENSION_ID] = $source_extension_id; $fields[DAO_TimeTrackingEntry::SOURCE_ID] = intval($source_id); $fields[DAO_TimeTrackingEntry::WORKER_ID] = intval($active_worker->id); } if (empty($id)) { // create $id = DAO_TimeTrackingEntry::create($fields); // Procedurally create a comment $translate = DevblocksPlatform::getTranslationService(); switch ($source_extension_id) { // If ticket, add a comment about the timeslip to the ticket case 'timetracking.source.ticket': $ticket_id = intval($source_id); if (null != ($worker_address = DAO_Address::lookupAddress($active_worker->email, false))) { if (!empty($activity_id)) { $activity = DAO_TimeTrackingActivity::get($activity_id); } if (!empty($org_id)) { $org = DAO_ContactOrg::get($org_id); } $comment = sprintf("== %s ==\n" . "%s %s\n" . "%s %d\n" . "%s %s (%s)\n" . "%s %s\n" . "%s %s\n", $translate->_('timetracking.ui.timetracking'), $translate->_('timetracking.ui.worker'), $active_worker->getName(), $translate->_('timetracking.ui.comment.time_spent'), $time_actual_mins, $translate->_('timetracking.ui.comment.activity'), !empty($activity) ? $activity->name : '', !empty($activity) && $activity->rate > 0.0 ? $translate->_('timetracking.ui.billable') : $translate->_('timetracking.ui.non_billable'), $translate->_('timetracking.ui.comment.organization'), !empty($org) ? $org->name : $translate->_('timetracking.ui.comment.not_set'), $translate->_('timetracking.ui.comment.notes'), $notes); //timetracking.ui.billable timetracking.ui.non_billable $fields = array(DAO_TicketComment::ADDRESS_ID => intval($worker_address->id), DAO_TicketComment::COMMENT => $comment, DAO_TicketComment::CREATED => time(), DAO_TicketComment::TICKET_ID => intval($ticket_id)); DAO_TicketComment::create($fields); } break; } } else { // modify DAO_TimeTrackingEntry::update($id, $fields); } // Custom field saves @($field_ids = DevblocksPlatform::importGPC($_POST['field_ids'], 'array', array())); DAO_CustomFieldValue::handleFormPost(ChCustomFieldSource_TimeEntry::ID, $id, $field_ids); }