Example #1
0
 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();
     }
 }
Example #2
0
 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')));
 }
Example #3
0
 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)));
 }
Example #4
0
 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)));
 }
Example #5
0
 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;
 }
Example #6
0
File: App.php Project: Hildy/cerb5
 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);
 }
Example #7
0
 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();
 }
Example #8
0
 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();
     }
 }
Example #9
0
 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;
 }
Example #10
0
 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')));
 }
Example #11
0
 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);
 }