Beispiel #1
0
 private function _handleImportWorker($xml)
 {
     $settings = CerberusSettings::getInstance();
     $logger = DevblocksPlatform::getConsoleLog();
     $sFirstName = (string) $xml->first_name;
     $sLastName = (string) $xml->last_name;
     $sEmail = (string) $xml->email;
     $sPassword = (string) $xml->password;
     $isSuperuser = (int) $xml->is_superuser;
     // Dupe check worker email
     if (null != ($worker_id = DAO_Worker::lookupAgentEmail($sEmail))) {
         $logger->info('[Importer] Avoiding creating duplicate worker #' . $worker_id . ' (' . $sEmail . ')');
         return true;
     }
     $worker_id = DAO_Worker::create($sEmail, CerberusApplication::generatePassword(8), $sFirstName, $sLastName, '');
     DAO_Worker::updateAgent($worker_id, array(DAO_Worker::PASSWORD => $sPassword, DAO_Worker::IS_SUPERUSER => intval($isSuperuser)));
     // Address to Worker
     DAO_AddressToWorker::assign($sEmail, $worker_id);
     DAO_AddressToWorker::update($sEmail, array(DAO_AddressToWorker::IS_CONFIRMED => 1));
     $logger->info('[Importer] Imported worker #' . $worker_id . ' (' . $sEmail . ')');
     DAO_Worker::clearCache();
     return true;
 }
Beispiel #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')));
 }
Beispiel #3
0
 function doRecoverStep3Action()
 {
     @($password = DevblocksPlatform::importGPC($_REQUEST['password'], 'string'));
     $email = $_SESSION[self::KEY_FORGOT_EMAIL];
     $sentcode = $_SESSION[self::KEY_FORGOT_SENTCODE];
     $code = $_SESSION[self::KEY_FORGOT_CODE];
     $worker_id = DAO_Worker::lookupAgentEmail($email);
     if (empty($email) || empty($code) || empty($worker_id)) {
         return;
     }
     if (0 == strcmp($sentcode, $code)) {
         // passed
         DAO_Worker::updateAgent($worker_id, array(DAO_Worker::PASSWORD => md5($password)));
         unset($_SESSION[self::KEY_FORGOT_EMAIL]);
         unset($_SESSION[self::KEY_FORGOT_CODE]);
         unset($_SESSION[self::KEY_FORGOT_SENTCODE]);
         DevblocksPlatform::redirect(new DevblocksHttpResponse(array('login')));
     } else {
         DevblocksPlatform::redirect(new DevblocksHttpResponse(array('login', 'forgot', 'step2')));
     }
 }
Beispiel #4
0
 function doBulkUpdate($filter, $do, $ids = array())
 {
     @set_time_limit(600);
     // [TODO] Temp!
     $change_fields = array();
     $custom_fields = array();
     if (empty($do)) {
         return;
     }
     if (is_array($do)) {
         foreach ($do as $k => $v) {
             switch ($k) {
                 case 'is_disabled':
                     $change_fields[DAO_Worker::IS_DISABLED] = intval($v);
                     break;
                 default:
                     // Custom fields
                     if (substr($k, 0, 3) == "cf_") {
                         $custom_fields[substr($k, 3)] = $v;
                     }
                     break;
             }
         }
     }
     $pg = 0;
     if (empty($ids)) {
         do {
             list($objects, $null) = DAO_Worker::search(array(), $this->params, 100, $pg++, SearchFields_Worker::ID, true, false);
             $ids = array_merge($ids, array_keys($objects));
         } while (!empty($objects));
     }
     $batch_total = count($ids);
     for ($x = 0; $x <= $batch_total; $x += 100) {
         $batch_ids = array_slice($ids, $x, 100);
         DAO_Worker::updateAgent($batch_ids, $change_fields);
         // Custom Fields
         self::_doBulkSetCustomFields(ChCustomFieldSource_Worker::ID, $custom_fields, $batch_ids);
         unset($batch_ids);
     }
     unset($ids);
 }
Beispiel #5
0
     // Sales Group
     $sales_gid = DAO_Group::createTeam(array(DAO_Group::TEAM_NAME => 'Sales'));
     // Sales Spam Bucket
     $sales_spam_bid = DAO_Bucket::create('Spam', $sales_gid);
     DAO_GroupSettings::set($sales_gid, DAO_GroupSettings::SETTING_SPAM_ACTION, '2');
     DAO_GroupSettings::set($sales_gid, DAO_GroupSettings::SETTING_SPAM_ACTION_PARAM, $sales_spam_bid);
     DAO_GroupSettings::set($sales_gid, DAO_GroupSettings::SETTING_SPAM_THRESHOLD, '85');
     // Default catchall
     DAO_Group::updateTeam($dispatch_gid, array(DAO_Group::IS_DEFAULT => 1));
 }
 // If this worker doesn't exist, create them
 if (null === ($lookup = DAO_Worker::lookupAgentEmail($worker_email))) {
     $worker_id = DAO_Worker::create($worker_email, $worker_pass, 'Super', 'User', 'Administrator');
     // Superuser bit
     $fields = array(DAO_Worker::IS_SUPERUSER => 1);
     DAO_Worker::updateAgent($worker_id, $fields);
     // Add the worker e-mail to the addresses table
     if (!empty($worker_email)) {
         DAO_Address::lookupAddress($worker_email, true);
     }
     // Authorize this e-mail address (watchers, etc.)
     DAO_AddressToWorker::assign($worker_email, $worker_id);
     DAO_AddressToWorker::update($worker_email, array(DAO_AddressToWorker::IS_CONFIRMED => 1));
     // Default group memberships
     if (!empty($dispatch_gid)) {
         DAO_Group::setTeamMember($dispatch_gid, $worker_id, true);
     }
     if (!empty($support_gid)) {
         DAO_Group::setTeamMember($support_gid, $worker_id, true);
     }
     if (!empty($sales_gid)) {
Beispiel #6
0
 /**
  * Store the workers last activity (provided by the page extension).
  * 
  * @param integer $worker_id
  * @param Model_Activity $activity
  */
 static function logActivity($worker_id, Model_Activity $activity)
 {
     DAO_Worker::updateAgent($worker_id, array(DAO_Worker::LAST_ACTIVITY_DATE => time(), DAO_Worker::LAST_ACTIVITY => serialize($activity)), false);
 }
Beispiel #7
0
 function saveDefaultsAction()
 {
     @($timezone = DevblocksPlatform::importGPC($_REQUEST['timezone'], 'string'));
     @($lang_code = DevblocksPlatform::importGPC($_REQUEST['lang_code'], 'string', 'en_US'));
     @($default_signature = DevblocksPlatform::importGPC($_REQUEST['default_signature'], 'string'));
     @($default_signature_pos = DevblocksPlatform::importGPC($_REQUEST['default_signature_pos'], 'integer', 0));
     @($reply_box_height = DevblocksPlatform::importGPC($_REQUEST['reply_box_height'], 'integer'));
     $worker = CerberusApplication::getActiveWorker();
     $translate = DevblocksPlatform::getTranslationService();
     $tpl = DevblocksPlatform::getTemplateService();
     $pref_errors = array();
     // Time
     $_SESSION['timezone'] = $timezone;
     @date_default_timezone_set($timezone);
     DAO_WorkerPref::set($worker->id, 'timezone', $timezone);
     // Language
     $_SESSION['locale'] = $lang_code;
     DevblocksPlatform::setLocale($lang_code);
     DAO_WorkerPref::set($worker->id, 'locale', $lang_code);
     @($new_password = DevblocksPlatform::importGPC($_REQUEST['change_pass'], 'string'));
     @($verify_password = DevblocksPlatform::importGPC($_REQUEST['change_pass_verify'], 'string'));
     //[mdf] if nonempty passwords match, update worker's password
     if ($new_password != "" && $new_password === $verify_password) {
         $session = DevblocksPlatform::getSessionService();
         $fields = array(DAO_Worker::PASSWORD => md5($new_password));
         DAO_Worker::updateAgent($worker->id, $fields);
     }
     @($assist_mode = DevblocksPlatform::importGPC($_REQUEST['assist_mode'], 'integer', 0));
     DAO_WorkerPref::set($worker->id, 'assist_mode', $assist_mode);
     @($keyboard_shortcuts = DevblocksPlatform::importGPC($_REQUEST['keyboard_shortcuts'], 'integer', 0));
     DAO_WorkerPref::set($worker->id, 'keyboard_shortcuts', $keyboard_shortcuts);
     @($mail_inline_comments = DevblocksPlatform::importGPC($_REQUEST['mail_inline_comments'], 'integer', 0));
     DAO_WorkerPref::set($worker->id, 'mail_inline_comments', $mail_inline_comments);
     @($mail_always_show_all = DevblocksPlatform::importGPC($_REQUEST['mail_always_show_all'], 'integer', 0));
     DAO_WorkerPref::set($worker->id, 'mail_always_show_all', $mail_always_show_all);
     // Alternate Email Addresses
     @($new_email = DevblocksPlatform::importGPC($_REQUEST['new_email'], 'string', ''));
     @($email_delete = DevblocksPlatform::importGPC($_REQUEST['email_delete'], 'array', array()));
     // Confirm deletions are assigned to the current worker
     if (!empty($email_delete)) {
         foreach ($email_delete as $e) {
             if (null != ($worker_address = DAO_AddressToWorker::getByAddress($e)) && $worker_address->worker_id == $worker->id) {
                 DAO_AddressToWorker::unassign($e);
             }
         }
     }
     // Assign a new e-mail address if it's legitimate
     if (!empty($new_email)) {
         if (null != ($addy = DAO_Address::lookupAddress($new_email, true))) {
             if (null == ($assigned = DAO_AddressToWorker::getByAddress($new_email))) {
                 $this->_sendConfirmationEmail($new_email, $worker);
             } else {
                 $pref_errors[] = vsprintf($translate->_('prefs.address.exists'), $new_email);
             }
         } else {
             $pref_errors[] = vsprintf($translate->_('prefs.address.invalid'), $new_email);
         }
     }
     $tpl->assign('pref_errors', $pref_errors);
     DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('preferences')));
 }