function render() { $active_worker = FegApplication::getActiveWorker(); $tpl = DevblocksPlatform::getTemplateService(); $tpl->assign('path', $this->tpl_path); $response = DevblocksPlatform::getHttpResponse(); $stack = $response->path; array_shift($stack); // reports @($reportId = array_shift($stack)); $report = null; // We're given a specific report to display if (!empty($reportId)) { if (null != ($reportMft = DevblocksPlatform::getExtension($reportId))) { // Make sure we have a report group if (null == ($report_group_mft_id = $reportMft->params['report_group'])) { return; } // Make sure the report group exists if (null == ($report_group_mft = DevblocksPlatform::getExtension($report_group_mft_id))) { return; } // Check our permissions on the parent report group before rendering the report if (isset($report_group_mft->params['acl']) && !$active_worker->hasPriv($report_group_mft->params['acl'])) { return; } // Render if (null != ($report = $reportMft->createInstance()) && $report instanceof Extension_Report) { /* @var $report Extension_Report */ $report->render(); return; } } } // If we don't have a selected report yet if (empty($report)) { // Organize into report groups $report_groups = array(); $reportGroupMfts = DevblocksPlatform::getExtensions('feg.report.group', false); // [TODO] Alphabetize groups and nested reports // Load report groups if (!empty($reportGroupMfts)) { foreach ($reportGroupMfts as $reportGroupMft) { $report_groups[$reportGroupMft->id] = array('manifest' => $reportGroupMft, 'reports' => array()); } } $reportMfts = DevblocksPlatform::getExtensions('feg.report', false); // Load reports and file them under groups according to manifest if (!empty($reportMfts)) { foreach ($reportMfts as $reportMft) { $report_group = $reportMft->params['report_group']; if (isset($report_group)) { $report_groups[$report_group]['reports'][] = $reportMft; } } } $tpl->assign('report_groups', $report_groups); } $tpl->display('file:' . $this->tpl_path . '/reports/index.tpl'); }
function showTabAction() { @($ext_id = DevblocksPlatform::importGPC($_REQUEST['ext_id'], 'string', '')); if (null != ($tab_mft = DevblocksPlatform::getExtension($ext_id)) && null != ($inst = $tab_mft->createInstance()) && $inst instanceof Extension_ResearchTab) { $inst->showTab(); } }
function run() { // Get the controller and run the import action if (null != ($extension = DevblocksPlatform::getExtension(ChForumsController::EXTENSION_ID, true))) { if (method_exists($extension, 'import')) { $extension->import(); } } }
function handleTabActionAction() { @($tab = DevblocksPlatform::importGPC($_REQUEST['tab'], 'string', '')); @($action = DevblocksPlatform::importGPC($_REQUEST['action'], 'string', '')); if (null != ($tab_mft = DevblocksPlatform::getExtension($tab)) && null != ($inst = $tab_mft->createInstance()) && $inst instanceof Extension_HomeTab) { if (method_exists($inst, $action . 'Action')) { call_user_func(array(&$inst, $action . 'Action')); } } }
function authenticateAction() { @($original_path = explode(',', DevblocksPlatform::importGPC($_POST['original_path']))); $manifest = DevblocksPlatform::getExtension('login.default'); $inst = $manifest->createInstance(); /* @var $inst Extension_LoginAuthenticator */ $url_service = DevblocksPlatform::getUrlService(); if ($inst->authenticate()) { //authentication passed if ($original_path[0] == '') { unset($original_path[0]); } $devblocks_response = new DevblocksHttpResponse($original_path); // Worker $worker = CerberusApplication::getActiveWorker(); // Timezone if (null != ($timezone = DAO_WorkerPref::get($worker->id, 'timezone'))) { $_SESSION['timezone'] = $timezone; @date_default_timezone_set($timezone); } // Language if (null != ($lang_code = DAO_WorkerPref::get($worker->id, 'locale'))) { $_SESSION['locale'] = $lang_code; DevblocksPlatform::setLocale($lang_code); } if (!empty($devblocks_response->path) && $devblocks_response->path[0] == 'login') { $tour_enabled = intval(DAO_WorkerPref::get($worker->id, 'assist_mode', 1)); $next_page = $tour_enabled ? 'welcome' : 'home'; $devblocks_response = new DevblocksHttpResponse(array($next_page)); } } else { //authentication failed $devblocks_response = new DevblocksHttpResponse(array('login', 'failed')); } DevblocksPlatform::redirect($devblocks_response); }
function saveCommunityToolAction() { @($code = DevblocksPlatform::importGPC($_POST['portal'], 'string')); @($name = DevblocksPlatform::importGPC($_POST['portal_name'], 'string', '')); @($iDelete = DevblocksPlatform::importGPC($_POST['do_delete'], 'integer', 0)); UmPortalHelper::setCode($code); if (DEMO_MODE) { if ($iDelete) { DevblocksPlatform::redirect(new DevblocksHttpResponse(array('config', 'communities'))); } else { self::getCommunityToolAction(); } return; } if (null != ($instance = DAO_CommunityTool::getByCode($code))) { // Deleting? if (!empty($iDelete)) { $tool = DAO_CommunityTool::getByCode($code); /* @var $tool Model_CommunityTool */ DAO_CommunityTool::delete($tool->id); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('config', 'communities'))); return; } else { $manifest = DevblocksPlatform::getExtension($instance->extension_id, false, true); $tool = $manifest->createInstance(); /* @var $tool Extension_UsermeetTool */ // Update the tool name if it has changed if (0 != strcmp($instance->name, $name)) { DAO_CommunityTool::update($instance->id, array(DAO_CommunityTool::NAME => $name)); } // Defer the rest to tool instances and extensions $tool->saveConfiguration(); } } self::getCommunityToolAction(); }
$db->Execute(sprintf("DELETE FROM requester WHERE address_id IN (%s)", implode(',', $ids_not_best))); // Ticket: First Wrote (merge dupe reqs) $db->Execute(sprintf("UPDATE ticket SET first_wrote_address_id = %d WHERE first_wrote_address_id IN (%s)", $best_id, implode(',', $ids_not_best))); $db->Execute(sprintf("DELETE FROM ticket WHERE first_wrote_address_id IN (%s)", implode(',', $ids_not_best))); // Ticket: Last Wrote (merge dupe reqs) $db->Execute(sprintf("UPDATE ticket SET last_wrote_address_id = %d WHERE last_wrote_address_id IN (%s)", $best_id, implode(',', $ids_not_best))); $db->Execute(sprintf("DELETE FROM ticket WHERE last_wrote_address_id IN (%s)", implode(',', $ids_not_best))); // Addresses $db->Execute(sprintf("DELETE FROM address WHERE id IN (%s)", implode(',', $ids_not_best))); } $rs->MoveNext(); } } // Fix blank ticket.first_message_id links (compose) $rs = $db->Execute('select t.id,max(m.id) as max_id,min(m.id) as min_id from ticket t inner join message m on (m.ticket_id=t.id) where t.first_message_id = 0 group by t.id;'); while (!$rs->EOF) { $db->Execute(sprintf("UPDATE ticket SET first_message_id = %d WHERE id = %d", $rs->fields['max_id'], $rs->fields['id'])); $rs->MoveNext(); } // [TODO] This should probably be checked (though MySQL needs special BINARY syntax) $db->Execute("UPDATE address SET email = LOWER(email)"); // Enable heartbeat cron if (null != ($cron_mf = DevblocksPlatform::getExtension('cron.heartbeat'))) { if (null != ($cron = $cron_mf->createInstance())) { $cron->setParam(CerberusCronPageExtension::PARAM_ENABLED, true); $cron->setParam(CerberusCronPageExtension::PARAM_DURATION, '5'); $cron->setParam(CerberusCronPageExtension::PARAM_TERM, 'm'); $cron->setParam(CerberusCronPageExtension::PARAM_LASTRUN, strtotime('Yesterday')); } } return TRUE;
private function mergeTicket($event) { // Listen for ticket merges and update our internal ticket_id records @($new_ticket_id = $event->params['new_ticket_id']); @($old_ticket_ids = $event->params['old_ticket_ids']); $translate = DevblocksPlatform::getTranslationService(); if (empty($new_ticket_id) || empty($old_ticket_ids)) { return; } $setting_manifest = DevblocksPlatform::getExtension(AnswernetLastActionAndAuditLogConfigTab::ID); $setting = $setting_manifest->createInstance(); $al_merge_enabled = intval($setting->getParam(AnswernetLastActionAndAuditLogConfigTab::AL_MERGE_ENABLED, 0)); $uf_merge_enabled = intval($setting->getParam(AnswernetLastActionAndAuditLogConfigTab::UF_MERGE_ENABLED, 0)); if (!($al_merge_enabled || $uf_merge_enabled)) { return; } $active_worker = CerberusApplication::getActiveWorker(); $worker_id = $active_worker->id; if (class_exists('DAO_TicketAuditLog', true)) { if ($al_merge_enabled) { foreach ($old_ticket_ids as $old_id) { $old_ticket = DAO_Ticket::getTicket($old_id); $translate_str = $translate->_('answernet.last_action_and_audit_log.post.merge.new_ticket'); $translated = sprintf($translate_str, $old_id, $old_ticket->mask); $fields = array(DAO_TicketAuditLog::TICKET_ID => $new_ticket_id, DAO_TicketAuditLog::WORKER_ID => $worker_id, DAO_TicketAuditLog::CHANGE_DATE => time(), DAO_TicketAuditLog::CHANGE_FIELD => "answernet.last_action_and_audit_log.type.merge", DAO_TicketAuditLog::CHANGE_VALUE => substr($translated, 0, 128)); $log_id = DAO_TicketAuditLog::create($fields); } unset($fields); } } if ($uf_merge_enabled) { $new_change_fields[DAO_Ticket::UPDATED_DATE] = time(); DAO_Ticket::updateTicket($new_ticket_id, $new_change_fields); unset($new_change_fields); } }
private function _workerAssignedTask($event) { $translate = DevblocksPlatform::getTranslationService(); $events = DevblocksPlatform::getEventService(); $worker_id = $event->params['worker_id']; $context = $event->params['context']; $task_id = $event->params['context_id']; $mail_service = DevblocksPlatform::getMailService(); $mailer = null; // lazy load $settings = DevblocksPlatform::getPluginSettingsService(); $reply_to = $settings->get('cerberusweb.core', CerberusSettings::DEFAULT_REPLY_FROM, CerberusSettingsDefaults::DEFAULT_REPLY_FROM); $reply_personal = $settings->get('cerberusweb.core', CerberusSettings::DEFAULT_REPLY_PERSONAL, CerberusSettingsDefaults::DEFAULT_REPLY_PERSONAL); $task = DAO_Task::get($task_id); // Sanitize and combine all the destination addresses $next_worker = DAO_Worker::get($worker_id); $notify_emails = $next_worker->email; if (empty($notify_emails)) { return; } try { if (null == $mailer) { $mailer = $mail_service->getMailer(CerberusMail::getMailerDefaults()); } // Create the message $mail = $mail_service->createMessage(); $mail->setTo(array($notify_emails)); $mail->setFrom(array($reply_to => $reply_personal)); $mail->setReplyTo($reply_to); $mail->setSubject(sprintf("[Task Assignment #%d]: %s", $task->id, $task->title)); $headers = $mail->getHeaders(); $headers->addTextHeader('X-Mailer', 'Cerberus Helpdesk (Build ' . APP_BUILD . ')'); $headers->addTextHeader('Precedence', 'List'); $headers->addTextHeader('Auto-Submitted', 'auto-generated'); $body = sprintf("[Task Assignment #%d]: %s", $task->id, $task->title); $mft = DevblocksPlatform::getExtension($context, false, true); $ext = $mft->createInstance(); $url = $ext->getPermalink($task_id); $body .= "\r\n" . $url; // Comments $comments = DAO_Comment::getByContext(CerberusContexts::CONTEXT_TASK, $task_id); foreach ($comments as $comment_id => $comment) { $address = DAO_Address::get($comment->address_id); $body .= "\r\nCommented By: " . $address->first_name . " " . $address->last_name; $body .= "\r\n" . $comment->comment; } unset($comments); $body .= "\r\n"; $mail->setBody($body); $result = $mailer->send($mail); } catch (Exception $e) { echo "Task Email Notification failed to send<br>"; } }
function handleRequest(DevblocksHttpRequest $request) { @($path = $request->path); if (empty($path) || !is_array($path)) { return; } $uri = array_shift($path); $rss_controllers = DevblocksPlatform::getExtensions('usermeet.sc.rss.controller'); foreach ($rss_controllers as $extension_id => $rss_controller) { if (0 == strcasecmp($rss_controller->params['uri'], $uri)) { $controller = DevblocksPlatform::getExtension($extension_id, true); $controller->handleRequest(new DevblocksHttpRequest($path)); return; } } // [TOOD] subcontroller not found }
$sql = "UPDATE view_rss SET source_extension = 'core.rss.source.ticket' WHERE source_extension = ''"; $db->Execute($sql); } // `worker` ======================== $columns = $datadict->MetaColumns('worker'); $indexes = $datadict->MetaIndexes('worker', false); if (!isset($columns['IS_DISABLED'])) { $sql = $datadict->AddColumnSQL('worker', "is_disabled I1 DEFAULT 0 NOTNULL"); $datadict->ExecuteSQLArray($sql); } if (!isset($indexes['pos'])) { $sql = $datadict->CreateIndexSQL('last_activity_date', 'worker', 'last_activity_date'); $datadict->ExecuteSQLArray($sql); } // Configure import cron if (null != ($cron_mf = DevblocksPlatform::getExtension('cron.import'))) { if (null != ($cron = $cron_mf->createInstance())) { $cron->setParam(CerberusCronPageExtension::PARAM_ENABLED, false); $cron->setParam(CerberusCronPageExtension::PARAM_DURATION, '0'); $cron->setParam(CerberusCronPageExtension::PARAM_TERM, 'm'); $cron->setParam(CerberusCronPageExtension::PARAM_LASTRUN, strtotime('Yesterday')); } } // `worker_event` ============================= if (!isset($tables['worker_event'])) { $flds = "\r\n\t\tid I4 DEFAULT 0 NOTNULL PRIMARY,\r\n\t\tcreated_date I4 DEFAULT 0 NOTNULL,\r\n\t\tworker_id I4 DEFAULT 0 NOTNULL,\r\n\t\ttitle C(255) DEFAULT '' NOTNULL,\r\n\t\tcontent XL,\r\n\t\tis_read I1 DEFAULT 0 NOTNULL,\r\n\t\turl C(255) DEFAULT '' NOTNULL\r\n\t"; $sql = $datadict->CreateTableSQL('worker_event', $flds); $datadict->ExecuteSQLArray($sql); if (!isset($indexes['created_date'])) { $sql = $datadict->CreateIndexSQL('created_date', 'worker_event', 'created_date'); $datadict->ExecuteSQLArray($sql);
public function writeResponse(DevblocksHttpResponse $response) { $path = $response->path; // [JAS]: Ajax? // [TODO] Explore outputting whitespace here for Safari // if(empty($path)) // return; $tpl = DevblocksPlatform::getTemplateService(); $session = DevblocksPlatform::getSessionService(); $settings = CerberusSettings::getInstance(); $translate = DevblocksPlatform::getTranslationService(); $active_worker = CerberusApplication::getActiveWorker(); $visit = $session->getVisit(); $page_manifests = $this->_getAllowedPages(); $controller = array_shift($path); // Default page [TODO] This is supposed to come from framework.config.php if (empty($controller)) { $controller = 'home'; } // [JAS]: Require us to always be logged in for Cerberus pages if (empty($visit) && 0 != strcasecmp($controller, 'login')) { $query = array(); if (!empty($response->path)) { $query = array('url' => urlencode(implode('/', $response->path))); } DevblocksPlatform::redirect(new DevblocksHttpRequest(array('login'), $query)); } $page_id = $this->_getPageIdByUri($controller); @($page = DevblocksPlatform::getExtension($page_id, true)); /* @var $page CerberusPageExtension */ if (empty($page)) { header("Status: 404"); return; // [TODO] 404 } // [JAS]: Listeners (Step-by-step guided tour, etc.) $listenerManifests = DevblocksPlatform::getExtensions('devblocks.listener.http'); foreach ($listenerManifests as $listenerManifest) { /* @var $listenerManifest DevblocksExtensionManifest */ $inst = $listenerManifest->createInstance(); /* @var $inst DevblocksHttpRequestListenerExtension */ $inst->run($response, $tpl); } $tpl->assign('active_worker', $active_worker); $tour_enabled = false; if (!empty($visit) && !is_null($active_worker)) { $tour_enabled = intval(DAO_WorkerPref::get($active_worker->id, 'assist_mode', 1)); if (DEMO_MODE) { $tour_enabled = 1; } // override for DEMO $keyboard_shortcuts = intval(DAO_WorkerPref::get($active_worker->id, 'keyboard_shortcuts', 1)); $tpl->assign('pref_keyboard_shortcuts', $keyboard_shortcuts); $active_worker_memberships = $active_worker->getMemberships(); $tpl->assign('active_worker_memberships', $active_worker_memberships); $unread_notifications = DAO_WorkerEvent::getUnreadCountByWorker($active_worker->id); $tpl->assign('active_worker_notify_count', $unread_notifications); DAO_Worker::logActivity($active_worker->id, $page->getActivity()); } $tpl->assign('tour_enabled', $tour_enabled); // [JAS]: Variables provided to all page templates $tpl->assign('settings', $settings); $tpl->assign('session', $_SESSION); $tpl->assign('translate', $translate); $tpl->assign('visit', $visit); $tpl->assign('license', CerberusLicense::getInstance()); $tpl->assign('page_manifests', $page_manifests); $tpl->assign('page', $page); $tpl->assign('response_uri', implode('/', $response->path)); $core_tpl = DEVBLOCKS_PLUGIN_PATH . 'cerberusweb.core/templates/'; $tpl->assign('core_tpl', $core_tpl); // Prebody Renderers $preBodyRenderers = DevblocksPlatform::getExtensions('cerberusweb.renderer.prebody', true); if (!empty($preBodyRenderers)) { $tpl->assign('prebody_renderers', $preBodyRenderers); } // Postbody Renderers $postBodyRenderers = DevblocksPlatform::getExtensions('cerberusweb.renderer.postbody', true); if (!empty($postBodyRenderers)) { $tpl->assign('postbody_renderers', $postBodyRenderers); } // Timings $tpl->assign('render_time', microtime(true) - DevblocksPlatform::getStartTime()); if (function_exists('memory_get_usage') && function_exists('memory_get_peak_usage')) { $tpl->assign('render_memory', memory_get_usage() - DevblocksPlatform::getStartMemory()); $tpl->assign('render_peak_memory', memory_get_peak_usage() - DevblocksPlatform::getStartPeakMemory()); } $tpl->display($core_tpl . 'border.tpl'); // $cache = DevblocksPlatform::getCacheService(); // $cache->printStatistics(); }
function trigger(Model_DevblocksEvent $event) { /* * [TODO] Look at the hash and spawn our listeners for this particular point */ $events = DevblocksPlatform::getEventRegistry(); if (null == ($listeners = @$events[$event->id])) { $listeners = array(); } // [TODO] Make sure we can't get a double listener if (is_array($events['*'])) { foreach ($events['*'] as $evt) { $listeners[] = $evt; } } if (is_array($listeners) && !empty($listeners)) { foreach ($listeners as $listener) { /* @var $listener DevblocksExtensionManifest */ $manifest = DevblocksPlatform::getExtension($listener); $inst = $manifest->createInstance(); /* @var $inst DevblocksEventListenerExtension */ $inst->handleEvent($event); } } }
function showSensorExtensionConfigAction() { @($ext_id = DevblocksPlatform::importGPC($_REQUEST['ext_id'], 'string', '')); @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', 0)); if (null == ($sensor = DAO_Sensor::get($id))) { $sensor = new Model_Sensor(); } if (!empty($ext_id)) { if (null != ($ext = DevblocksPlatform::getExtension($ext_id, true))) { if ($ext instanceof Extension_Sensor) { $ext->renderConfig($sensor); } } } }
function showEntryAction($model = null) { $tpl = DevblocksPlatform::getTemplateService(); $tpl_path = dirname(dirname(__FILE__)) . '/templates/'; $tpl->assign('path', $tpl_path); $tpl->cache_lifetime = "0"; @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', 0)); /* * [IMPORTANT -- Yes, this is simply a line in the sand.] * You're welcome to modify the code to meet your needs, but please respect * our licensing. Buy a legitimate copy to help support the project! * http://www.cerberusweb.com/ */ $license = CerberusLicense::getInstance(); if (empty($id) && (empty($license['serial']) || !empty($license['serial']) && isset($license['a'])) && 10 <= DAO_TimeTrackingEntry::getItemCount()) { $tpl->display('file:' . $tpl_path . 'timetracking/rpc/trial.tpl'); return; } /* * This treats procedurally created model objects * the same as existing objects */ if (!empty($id)) { // Were we given a model ID to load? if (null != ($model = DAO_TimeTrackingEntry::get($id))) { $tpl->assign('model', $model); } } elseif (!empty($model)) { // Were we passed a model object without an ID? $tpl->assign('model', $model); } /* @var $model Model_TimeTrackingEntry */ // Source extension if (!empty($model->source_extension_id)) { if (null != ($source = DevblocksPlatform::getExtension($model->source_extension_id, true))) { $tpl->assign('source', $source); } } // Org Name if (!empty($model->debit_org_id)) { if (null != ($org = DAO_ContactOrg::get($model->debit_org_id))) { $tpl->assign('org', $org); } } // Activities // [TODO] Cache $billable_activities = DAO_TimeTrackingActivity::getWhere(sprintf("%s!=0", DAO_TimeTrackingActivity::RATE)); $tpl->assign('billable_activities', $billable_activities); $nonbillable_activities = DAO_TimeTrackingActivity::getWhere(sprintf("%s=0", DAO_TimeTrackingActivity::RATE)); $tpl->assign('nonbillable_activities', $nonbillable_activities); // Custom fields $custom_fields = DAO_CustomField::getBySource(ChCustomFieldSource_TimeEntry::ID); $tpl->assign('custom_fields', $custom_fields); $custom_field_values = DAO_CustomFieldValue::getValuesBySourceIds(ChCustomFieldSource_TimeEntry::ID, $id); if (isset($custom_field_values[$id])) { $tpl->assign('custom_field_values', $custom_field_values[$id]); } $types = Model_CustomField::getTypes(); $tpl->assign('types', $types); $tpl->display('file:' . $tpl_path . 'timetracking/rpc/time_entry_panel.tpl'); }
function getContactSituationAction() { @($portal = DevblocksPlatform::importGPC($_REQUEST['portal'], 'string', '')); UmPortalHelper::setCode($portal); $module = DevblocksPlatform::getExtension('sc.controller.contact', true, true); $module->getSituation(); }
// =========================================================================== // Enable Cronjobs if(null != ($cron = DevblocksPlatform::getExtension('cron.issues.wgm', true, true))) { $cron->setParam(CerberusCronPageExtension::PARAM_ENABLED, true); $cron->setParam(CerberusCronPageExtension::PARAM_DURATION, '5'); $cron->setParam(CerberusCronPageExtension::PARAM_TERM, 'm'); $cron->setParam(CerberusCronPageExtension::PARAM_LASTRUN, strtotime('Yesterday 23:00')); } if(null != ($cron = DevblocksPlatform::getExtension('cron.sync.containers.wgm', true, true))) { $cron->setParam(CerberusCronPageExtension::PARAM_ENABLED, true); $cron->setParam(CerberusCronPageExtension::PARAM_DURATION, '6'); $cron->setParam(CerberusCronPageExtension::PARAM_TERM, 'h'); $cron->setParam(CerberusCronPageExtension::PARAM_LASTRUN, strtotime('Yesterday 23:00')); } if(null != ($cron = DevblocksPlatform::getExtension('cron.recache.containers.wgm', true, true))) { $cron->setParam(CerberusCronPageExtension::PARAM_ENABLED, true); $cron->setParam(CerberusCronPageExtension::PARAM_DURATION, '12'); $cron->setParam(CerberusCronPageExtension::PARAM_TERM, 'h'); $cron->setParam(CerberusCronPageExtension::PARAM_LASTRUN, strtotime('Yesterday 23:00')); } if(null != ($cron = DevblocksPlatform::getExtension('cron.milestones.wgm', true, true))) { $cron->setParam(CerberusCronPageExtension::PARAM_ENABLED, true); $cron->setParam(CerberusCronPageExtension::PARAM_DURATION, '6'); $cron->setParam(CerberusCronPageExtension::PARAM_TERM, 'h'); $cron->setParam(CerberusCronPageExtension::PARAM_LASTRUN, strtotime('Yesterday 23:00')); }
function saveCommunityToolAction() { @($code = DevblocksPlatform::importGPC($_POST['portal'], 'string')); @($iDelete = DevblocksPlatform::importGPC($_POST['do_delete'], 'integer', 0)); if (DEMO_MODE) { if ($iDelete) { DevblocksPlatform::redirect(new DevblocksHttpResponse(array('config', 'communities'))); } else { self::getCommunityToolAction(); } return; } if (null != ($instance = DAO_CommunityTool::getByCode($code))) { // Deleting? if (!empty($iDelete)) { $tool = DAO_CommunityTool::getByCode($code); /* @var $tool Model_CommunityTool */ DAO_CommunityTool::delete($tool->id); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('config', 'communities'))); return; } else { $manifest = DevblocksPlatform::getExtension($instance->extension_id, false, true); $tool = $manifest->createInstance(); /* @var $tool Extension_UsermeetTool */ $tool->setPortal($code); // [TODO] Kinda hacky $tool->saveConfiguration(); } } self::getCommunityToolAction(); }
private function _getFieldSource($ext_id) { $tpl = DevblocksPlatform::getTemplateService(); $tpl->assign('path', $this->_TPL_PATH); $tpl->assign('ext_id', $ext_id); // [TODO] Make sure the extension exists before continuing $source_manifest = DevblocksPlatform::getExtension($ext_id, false); $tpl->assign('source_manifest', $source_manifest); $types = Model_CustomField::getTypes(); $tpl->assign('types', $types); // Look up the defined global fields by the given extension $fields = DAO_CustomField::getBySource($ext_id); $tpl->assign('fields', $fields); $tpl->display('file:' . $this->_TPL_PATH . 'setup/tabs/fields/edit_source.tpl'); }
function render() { $this->_sanitize(); $tpl = DevblocksPlatform::getTemplateService(); $tpl->assign('id', $this->id); $tpl->assign('view', $this); $workers = DAO_Worker::getAll(); $tpl->assign('workers', $workers); $tpl->assign('timestamp_now', time()); // Pull the results so we can do some row introspection $results = $this->getData(); $tpl->assign('results', $results); // $source_renderers = DevblocksPlatform::getExtensions('cerberusweb.task.source', true); // Make a list of unique source_extension and load their renderers $source_extensions = array(); if (is_array($results) && isset($results[0])) { foreach ($results[0] as $rows) { $source_extension = $rows[SearchFields_Task::SOURCE_EXTENSION]; if (!isset($source_extensions[$source_extension]) && !empty($source_extension) && null != ($mft = DevblocksPlatform::getExtension($source_extension))) { $source_extensions[$source_extension] = $mft->createInstance(); } } } $tpl->assign('source_renderers', $source_extensions); // Custom fields $custom_fields = DAO_CustomField::getBySource(ChCustomFieldSource_Task::ID); $tpl->assign('custom_fields', $custom_fields); $tpl->cache_lifetime = "0"; $tpl->assign('view_fields', $this->getColumns()); $tpl->display('file:' . DEVBLOCKS_PLUGIN_PATH . 'cerberusweb.core/templates/tasks/view.tpl'); }
function doAddWorkspaceAction() { @($name = DevblocksPlatform::importGPC($_REQUEST['name'], 'string', '')); @($source = DevblocksPlatform::importGPC($_REQUEST['source'], 'string', '')); @($workspace = DevblocksPlatform::importGPC($_REQUEST['workspace'], 'string', '')); @($new_workspace = DevblocksPlatform::importGPC($_REQUEST['new_workspace'], 'string', '')); $active_worker = PortSensorApplication::getActiveWorker(); $visit = PortSensorApplication::getVisit(); // Source extension exists if (null != ($source_manifest = DevblocksPlatform::getExtension($source, false))) { // Class exists if (null != @($class = $source_manifest->params['view_class'])) { if (empty($name)) { $name = $source_manifest->name; } // New workspace if (!empty($new_workspace)) { $workspace = $new_workspace; } if (empty($workspace)) { $workspace = 'New Workspace'; } $view = new $class(); /* @var $view Ps_AbstractView */ // Build the list model $list = new Model_WorklistView(); $list->title = $name; $list->columns = $view->view_columns; $list->params = $view->params; $list->num_rows = $view->renderLimit; $list->sort_by = $view->renderSortBy; $list->sort_asc = $view->renderSortAsc; // Add the worklist $fields = array(DAO_Worklist::WORKER_ID => $active_worker->id, DAO_Worklist::VIEW_POS => 1, DAO_Worklist::VIEW_SERIALIZED => serialize($list), DAO_Worklist::WORKSPACE => $workspace, DAO_Worklist::SOURCE_EXTENSION => $source_manifest->id); DAO_Worklist::create($fields); // Select the new tab $visit->set(PortSensorVisit::KEY_HOME_SELECTED_TAB, 'w_' . $workspace); } } DevblocksPlatform::redirect(new DevblocksHttpResponse(array('home'))); }
function showTaskPeekAction() { @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', '')); @($view_id = DevblocksPlatform::importGPC($_REQUEST['view_id'], 'string', '')); @($link_namespace = DevblocksPlatform::importGPC($_REQUEST['link_namespace'], 'string', '')); // opt @($link_object_id = DevblocksPlatform::importGPC($_REQUEST['link_object_id'], 'integer', 0)); // opt $tpl = DevblocksPlatform::getTemplateService(); $tpl->cache_lifetime = "0"; $path = $this->_TPL_PATH; $tpl->assign('path', $path); if (!empty($id)) { $task = DAO_Task::get($id); $tpl->assign('task', $task); if (!empty($task->source_extension) && !empty($task->source_id)) { if (null != ($mft = DevblocksPlatform::getExtension($task->source_extension))) { $source_info = $mft->createInstance(); @$tpl->assign('source_info', $source_info->getSourceInfo($task->source_id)); } } } // Only used on create if (!empty($link_namespace) && !empty($link_object_id)) { $tpl->assign('link_namespace', $link_namespace); $tpl->assign('link_object_id', $link_object_id); } $workers = DAO_Worker::getAllActive(); $tpl->assign('workers', $workers); // Custom fields $custom_fields = DAO_CustomField::getBySource(ChCustomFieldSource_Task::ID); $tpl->assign('custom_fields', $custom_fields); $custom_field_values = DAO_CustomFieldValue::getValuesBySourceIds(ChCustomFieldSource_Task::ID, $id); if (isset($custom_field_values[$id])) { $tpl->assign('custom_field_values', $custom_field_values[$id]); } $types = Model_CustomField::getTypes(); $tpl->assign('types', $types); // View $tpl->assign('id', $id); $tpl->assign('view_id', $view_id); $tpl->display('file:' . $path . 'tasks/rpc/peek.tpl'); }
function saveJobAction() { $translate = DevblocksPlatform::getTranslationService(); $worker = CerberusApplication::getActiveWorker(); if (!$worker || !$worker->is_superuser) { echo $translate->_('common.access_denied'); return; } if (DEMO_MODE) { DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('config', 'scheduler'))); return; } // [TODO] Save the job changes @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'string', '')); @($enabled = DevblocksPlatform::importGPC($_REQUEST['enabled'], 'integer', 0)); @($locked = DevblocksPlatform::importGPC($_REQUEST['locked'], 'integer', 0)); @($duration = DevblocksPlatform::importGPC($_REQUEST['duration'], 'integer', 5)); @($term = DevblocksPlatform::importGPC($_REQUEST['term'], 'string', 'm')); @($starting = DevblocksPlatform::importGPC($_REQUEST['starting'], 'string', '')); $manifest = DevblocksPlatform::getExtension($id); $job = $manifest->createInstance(); /* @var $job CerberusCronPageExtension */ if (!empty($starting)) { $starting_time = strtotime($starting); if (false === $starting_time) { $starting_time = time(); } $starting_time -= CerberusCronPageExtension::getIntervalAsSeconds($duration, $term); $job->setParam(CerberusCronPageExtension::PARAM_LASTRUN, $starting_time); } if (!$job instanceof CerberusCronPageExtension) { die($translate->_('common.access_denied')); } // [TODO] This is really kludgey $job->setParam(CerberusCronPageExtension::PARAM_ENABLED, $enabled); $job->setParam(CerberusCronPageExtension::PARAM_LOCKED, $locked); $job->setParam(CerberusCronPageExtension::PARAM_DURATION, $duration); $job->setParam(CerberusCronPageExtension::PARAM_TERM, $term); $job->saveConfigurationAction(); DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('config', 'scheduler'))); }
function authenticateLDAPAction() { @($server = DevblocksPlatform::importGPC($_POST['server'])); @($port = DevblocksPlatform::importGPC($_POST['port'])); @($dn = DevblocksPlatform::importGPC($_POST['dn'])); @($password = DevblocksPlatform::importGPC($_POST['password'])); @($original_path = explode(',', DevblocksPlatform::importGPC($_POST['original_path']))); @($original_query_str = DevblocksPlatform::importGPC($_POST['original_query'])); $manifest = DevblocksPlatform::getExtension('login.ldap'); $inst = $manifest->createInstance(); /* @var $inst CerberusLoginPageExtension */ $url_service = DevblocksPlatform::getUrlService(); if ($inst->authenticate(array('server' => $server, 'port' => $port, 'dn' => $dn, 'password' => $password))) { //authentication passed $original_query = $url_service->parseQueryString($original_query_str); if ($original_path[0] == '') { unset($original_path[0]); } $devblocks_response = new DevblocksHttpResponse($original_path, $original_query); if ($devblocks_response->path[0] == 'login') { $session = DevblocksPlatform::getSessionService(); $visit = $session->getVisit(); $tour_enabled = false; if (!empty($visit) && !is_null($visit->getWorker())) { $worker = $visit->getWorker(); $tour_enabled = intval(DAO_WorkerPref::get($worker->id, 'assist_mode', 1)); } $next_page = $tour_enabled ? 'welcome' : 'home'; $devblocks_response = new DevblocksHttpResponse(array($next_page)); } } else { //authentication failed $devblocks_response = new DevblocksHttpResponse(array('login')); } DevblocksPlatform::redirect($devblocks_response); }
public function writeResponse(DevblocksHttpResponse $response) { $umsession = $this->getSession(); $stack = $response->path; $modules = $this->_getModules(); $tpl = DevblocksPlatform::getTemplateService(); $tpl->cache_lifetime = "0"; $tpl_path = dirname(dirname(__FILE__)) . '/templates/'; $tpl->assign('tpl_path', $tpl_path); $logo_url = DAO_CommunityToolProperty::get($this->getPortal(), self::PARAM_LOGO_URL, ''); $tpl->assign('logo_url', $logo_url); $page_title = DAO_CommunityToolProperty::get($this->getPortal(), self::PARAM_PAGE_TITLE, 'Support Center'); $tpl->assign('page_title', $page_title); $footer_html = DAO_CommunityToolProperty::get($this->getPortal(), self::PARAM_FOOTER_HTML, ''); $tpl->assign('footer_html', $footer_html); $captcha_enabled = DAO_CommunityToolProperty::get($this->getPortal(), self::PARAM_CAPTCHA_ENABLED, 1); $tpl->assign('captcha_enabled', $captcha_enabled); $allow_logins = DAO_CommunityToolProperty::get($this->getPortal(), self::PARAM_ALLOW_LOGINS, 0); $tpl->assign('allow_logins', $allow_logins); $allow_subjects = DAO_CommunityToolProperty::get($this->getPortal(), self::PARAM_ALLOW_SUBJECTS, 0); $tpl->assign('allow_subjects', $allow_subjects); $sFnrSources = DAO_CommunityToolProperty::get($this->getPortal(), self::PARAM_FNR_SOURCES, ''); $fnr_sources = !empty($sFnrSources) ? unserialize($sFnrSources) : array(); $iKbEnabled = DAO_CommunityToolProperty::get($this->getPortal(), self::PARAM_KB_ENABLED, 0); $tpl->assign('show_search', !empty($fnr_sources) || $iKbEnabled ? true : false); $theme = DAO_CommunityToolProperty::get($this->getPortal(), self::PARAM_THEME, self::DEFAULT_THEME); if (!is_dir($tpl_path . 'portal/sc/themes/' . $theme)) { $theme = self::DEFAULT_THEME; } $tpl->assign('theme', $theme); @($active_user = $umsession->getProperty('sc_login', null)); $tpl->assign('active_user', $active_user); // Usermeet Session if (null == ($fingerprint = parent::getFingerprint())) { die("A problem occurred."); } $tpl->assign('fingerprint', $fingerprint); $module_uri = array_shift($stack); if (isset($modules[$module_uri])) { $mf = DevblocksPlatform::getExtension($modules[$module_uri]['extension_id'], false, true); } else { $mf = DevblocksPlatform::getExtension($this->default_controller, false, true); } $menu_modules = array(); if (is_array($modules)) { foreach ($modules as $idx => $item) { // Must be menu renderable if (!empty($item['menu_title']) && !empty($item['uri'])) { // Must not require login, or we must be logged in // [TODO] Check if the module wants to render (KB not empty, etc.) if (!isset($item['requires_login']) || isset($item['requires_login']) && !empty($active_user)) { // Skip KB in menu if no topics are set // [TODO] Hack (shouldn't be hardcoded in menu logic) if (0 == strcasecmp($item['uri'], 'kb') && !$iKbEnabled) { continue; } $menu_modules[$idx] = $item; } } } } $tpl->assign('menu', $menu_modules); array_unshift($stack, $module_uri); $controller = $mf->createInstance(); $controller->setPortal($this->getPortal()); $tpl->assign('module', $controller); $tpl->assign('module_response', new DevblocksHttpResponse($stack)); switch ($module_uri) { case 'captcha': header('Cache-control: max-age=0', true); // 1 wk // , must-revalidate header('Expires: ' . gmdate('D, d M Y H:i:s', time() - 604800) . ' GMT'); // 1 wk header('Content-type: image/jpeg'); //header('Content-length: '. count($jpg)); // // Get CAPTCHA secret passphrase $phrase = CerberusApplication::generatePassword(4); $umsession->setProperty(UmScApp::SESSION_CAPTCHA, $phrase); $im = @imagecreate(150, 70) or die("Cannot Initialize new GD image stream"); $background_color = imagecolorallocate($im, 240, 240, 240); $text_color = imagecolorallocate($im, 40, 40, 40); //233, 14, 91 $font = DEVBLOCKS_PATH . 'resources/font/ryanlerch_-_Tuffy_Bold(2).ttf'; imagettftext($im, 24, mt_rand(0, 20), 5, 60 + 6, $text_color, $font, $phrase); // $im = imagerotate($im, mt_rand(-20,20), $background_color); imagejpeg($im, null, 85); imagedestroy($im); exit; break; default: // Look up the current module $tpl->display('file:' . $tpl_path . 'portal/sc/themes/' . $theme . '/index.tpl'); break; } }
function trigger(Model_DevblocksEvent $event) { /* * [TODO] Look at the hash and spawn our listeners for this particular point */ $events = DevblocksPlatform::getEventRegistry(); if (null == ($listeners = @$events[$event->id])) { $listeners = array(); } // [TODO] Make sure we can't get a double listener if (isset($events['*']) && is_array($events['*'])) { foreach ($events['*'] as $evt) { $listeners[] = $evt; } } if (is_array($listeners) && !empty($listeners)) { foreach ($listeners as $listener) { /* @var $listener DevblocksExtensionManifest */ // Extensions can be invoked on these plugins even by workers who cannot see them if (null != ($manifest = DevblocksPlatform::getExtension($listener, false, true))) { if (method_exists($manifest, 'createInstance')) { $inst = $manifest->createInstance(); /* @var $inst DevblocksEventListenerExtension */ if ($inst instanceof DevblocksEventListenerExtension) { $inst->handleEvent($event); } } } } } }
function handleRequest(DevblocksHttpRequest $request) { @($reload = DevblocksPlatform::importGPC($_REQUEST['reload'], 'integer', 0)); @($loglevel = DevblocksPlatform::importGPC($_REQUEST['loglevel'], 'integer', 0)); $logger = DevblocksPlatform::getConsoleLog(); $translate = DevblocksPlatform::getTranslationService(); $settings = CerberusSettings::getInstance(); $authorized_ips_str = $settings->get(CerberusSettings::AUTHORIZED_IPS); $authorized_ips = DevblocksPlatform::parseCrlfString($authorized_ips_str); $authorized_ip_defaults = DevblocksPlatform::parseCsvString(AUTHORIZED_IPS_DEFAULTS); $authorized_ips = array_merge($authorized_ips, $authorized_ip_defaults); @($is_ignoring_wait = DevblocksPlatform::importGPC($_REQUEST['ignore_wait'], 'integer', 0)); $pass = false; foreach ($authorized_ips as $ip) { if (substr($ip, 0, strlen($ip)) == substr($_SERVER['REMOTE_ADDR'], 0, strlen($ip))) { $pass = true; break; } } if (!$pass) { echo vsprintf($translate->_('cron.ip_unauthorized'), $_SERVER['REMOTE_ADDR']); return; } $stack = $request->path; array_shift($stack); // cron $job_id = array_shift($stack); @set_time_limit(0); // Unlimited (if possible) $url = DevblocksPlatform::getUrlService(); $timelimit = intval(ini_get('max_execution_time')); if ($reload) { $reload_url = sprintf("%s?reload=%d&loglevel=%d&ignore_wait=%d", $url->write('c=cron' . ($job_id ? "&a=" . $job_id : "")), intval($reload), intval($loglevel), intval($is_ignoring_wait)); echo "<HTML>" . "<HEAD>" . "<TITLE></TITLE>" . "<meta http-equiv='Refresh' content='" . intval($reload) . ";" . $reload_url . "'>" . "<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>" . "</HEAD>" . "<BODY>"; // onload=\"setTimeout(\\\"window.location.replace('".$url->write('c=cron')."')\\\",30);\" } // [TODO] Determine if we're on a time limit under 60 seconds $cron_manifests = DevblocksPlatform::getExtensions('cerberusweb.cron', true, true); $jobs = array(); if (empty($job_id)) { // do everything // Determine who wants to go first by next time and longest waiting $nexttime = time() + 86400; if (is_array($cron_manifests)) { foreach ($cron_manifests as $idx => $instance) { /* @var $instance CerberusCronPageExtension */ $lastrun = $instance->getParam(CerberusCronPageExtension::PARAM_LASTRUN, 0); if ($instance->isReadyToRun($is_ignoring_wait)) { if ($timelimit) { if ($lastrun < $nexttime) { $jobs[0] = $cron_manifests[$idx]; $nexttime = $lastrun; } } else { $jobs[] =& $cron_manifests[$idx]; } } } } } else { // single job $manifest = DevblocksPlatform::getExtension($job_id, false, true); if (empty($manifest)) { exit; } $instance = $manifest->createInstance(); if ($instance) { if ($instance->isReadyToRun($is_ignoring_wait)) { $jobs[0] =& $instance; } } } if (!empty($jobs)) { foreach ($jobs as $nextjob) { $nextjob->setParam(CerberusCronPageExtension::PARAM_LOCKED, time()); $nextjob->_run(); } } elseif ($reload) { $logger->info(vsprintf($translate->_('cron.nothing_to_do'), intval($reload))); } if ($reload) { echo "</BODY>" . "</HTML>"; } exit; }
function render() { $this->_sanitize(); $tpl = DevblocksPlatform::getTemplateService(); $view_path = dirname(dirname(__FILE__)) . '/templates/tasks/'; $tpl->assign('view_path', $view_path); $tpl->assign('id', $this->id); $tpl->assign('view', $this); $workers = DAO_Worker::getAll(); $tpl->assign('workers', $workers); $tpl->assign('timestamp_now', time()); // Pull the results so we can do some row introspection $results = $this->getData(); $tpl->assign('results', $results); // $source_renderers = DevblocksPlatform::getExtensions('cerberusweb.task.source', true); // Make a list of unique source_extension and load their renderers $source_extensions = array(); if (is_array($results) && isset($results[0])) { foreach ($results[0] as $rows) { $source_extension = $rows[SearchFields_Task::SOURCE_EXTENSION]; if (!isset($source_extensions[$source_extension]) && !empty($source_extension) && null != ($mft = DevblocksPlatform::getExtension($source_extension))) { $source_extensions[$source_extension] = $mft->createInstance(); } } } $tpl->assign('source_renderers', $source_extensions); // Custom fields $custom_fields = DAO_CustomField::getBySource(ChCustomFieldSource_Task::ID); $tpl->assign('custom_fields', $custom_fields); // get the user agent if (strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone') || strpos($_SERVER['HTTP_USER_AGENT'], 'iPod')) { $maxcols = 1; } elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'iPad')) { $maxcols = 4; } else { $maxcols = 4; } $tpl->assign('maxcols', $maxcols); $tpl->assign('view_fields', $this->getColumns()); $tpl->display('file:' . $view_path . 'view.tpl'); }