/** * For updating smart campaigns members in background * * @param array $args handler arguments * @param object &$handler reference to the cron_handler object calling this method. * @return boolean indicating success/failure */ function background_update_campaign_members($args, &$handler) { if (!array_key_exists('campaign_guid', $args)) { $msg = 'Campaign GUID not found in arguments list'; debug_add($msg, MIDCOM_LOG_ERROR); $handler->print_error($msg); return false; } midcom::get('auth')->request_sudo(); try { $campaign = new org_openpsa_directmarketing_campaign_dba($args['campaign_guid']); } catch (midcom_error $e) { $msg = "{$args['campaign_guid']} is not a valid campaign GUID"; debug_add($msg, MIDCOM_LOG_ERROR); $handler->print_error($msg); return false; } $stat = $campaign->update_smart_campaign_members(); if (!$stat) { $msg = 'Error while calling campaign->update_smart_campaign_members(), see error log for details'; debug_add($msg, MIDCOM_LOG_ERROR); $handler->print_error($msg); return false; } midcom::get('auth')->drop_sudo(); return true; }
/** * @param mixed $handler_id The ID of the handler. * @param Array $args The argument list. * @param Array &$data The local request data. */ public function _handler_index($handler_id, array $args, array &$data) { $this->_request_data['campaigns'] = array(); $qb = org_openpsa_directmarketing_campaign_dba::new_query_builder(); $qb->add_constraint('archived', '=', 0); $this->_request_data['campaigns'] = $qb->execute(); }
/** * Loads all (not-archived) smart campaigns and schedules a separate background update for each */ public function _on_execute() { debug_add('_on_execute called'); $qb = org_openpsa_directmarketing_campaign_dba::new_query_builder(); $qb->add_constraint('archived', '=', 0); $qb->add_constraint('orgOpenpsaObtype', '=', org_openpsa_directmarketing_campaign_dba::TYPE_SMART); midcom::get('auth')->request_sudo('org.openpsa.directmarketing'); $ret = $qb->execute(); midcom::get('auth')->drop_sudo(); if ($ret === false || !is_array($ret)) { //TODO: display some error ? return false; } if (empty($ret)) { return; } $i = 1; foreach ($ret as $campaign) { $next_time = time() + $i++ * 60; debug_add("Scheduling member update for campaign #{$campaign->id} ({$campaign->title}) to happen on " . date('Y-m-d H:i:s', $next_time)); $stat = $campaign->schedule_update_smart_campaign_members($next_time); if (!$stat) { //TODO: Display some error ? } } debug_add('Done'); return; }
public function testCRUD() { midcom::get('auth')->request_sudo('org.openpsa.directmarketing'); $campaign = new org_openpsa_directmarketing_campaign_dba(); $stat = $campaign->create(); $this->assertFalse($stat); $topic = $this->create_object('midcom_db_topic', array('component' => 'org.openpsa.directmarketing')); $campaign = new org_openpsa_directmarketing_campaign_dba(); $campaign->node = $topic->id; $stat = $campaign->create(); $this->assertTrue($stat, midcom_connection::get_error_string()); $this->register_object($campaign); $campaign->title = 'TEST'; $stat = $campaign->update(); $this->assertTrue($stat); $campaign->refresh(); $this->assertEquals('TEST', $campaign->title); $stat = $campaign->delete(); $this->assertTrue($stat); midcom::get('auth')->drop_sudo(); }
function get_leaves() { $leaves = array(); $qb = org_openpsa_directmarketing_campaign_dba::new_query_builder(); $qb->add_constraint('archived', '=', 0); $campaigns = $qb->execute(); if (empty($campaigns)) { return $leaves; } foreach ($campaigns as $campaign) { $leaves[$campaign->id] = array(MIDCOM_NAV_URL => "campaign/{$campaign->guid}/", MIDCOM_NAV_NAME => $campaign->title, MIDCOM_NAV_GUID => $campaign->guid, MIDCOM_NAV_OBJECT => $campaign); } return $leaves; }
function get_leaves() { $leaves = array(); $qb = org_openpsa_directmarketing_campaign_dba::new_query_builder(); $qb->add_constraint('node', '=', $this->_topic->id); $qb->add_constraint('archived', '=', 0); $qb->add_order('metadata.created', $this->_config->get('navi_order')); $campaigns = $qb->execute(); if (empty($campaigns)) { return $leaves; } foreach ($campaigns as $campaign) { $leaves["campaign_{$campaign->id}"] = array(MIDCOM_NAV_URL => "campaign/{$campaign->guid}/", MIDCOM_NAV_NAME => $campaign->title, MIDCOM_NAV_GUID => $campaign->guid, MIDCOM_NAV_OBJECT => $campaign); } return $leaves; }
/** * Check if this message is attached to a smart campaign, if so update the campaign members */ private function _check_campaign_up_to_date() { midcom::get('auth')->request_sudo('org.openpsa.directmarketing'); $campaign = new org_openpsa_directmarketing_campaign_dba($this->campaign); midcom::get('auth')->drop_sudo(); if ($campaign->orgOpenpsaObtype == org_openpsa_directmarketing_campaign_dba::TYPE_SMART) { $campaign->update_smart_campaign_members(); } }
private function _create_campaign_from_link() { $campaign = new org_openpsa_directmarketing_campaign_dba(); $campaign->orgOpenpsaObtype = org_openpsa_directmarketing_campaign_dba::TYPE_SMART; $eval = '$tmp_array = ' . $_POST['org_openpsa_directmarketing_campaign_rule_' . $_POST['org_openpsa_directmarketing_campaign_userule']] . ';'; $eval_ret = @eval($eval); if ($eval_ret === false) { return false; } $campaign->rules = $tmp_array; $campaign->description = $tmp_array['comment']; $campaign->title = sprintf($this->_l10n->get('from link "%s"'), $_POST['org_openpsa_directmarketing_campaign_label_' . $_POST['org_openpsa_directmarketing_campaign_userule']]); $campaign->testers[midcom_connection::get_user()] = true; $campaign->node = $this->_topic->id; if (!$campaign->create()) { return false; } $campaign->schedule_update_smart_campaign_members(); midcom::get()->relocate(midcom_core_context::get()->get_key(MIDCOM_CONTEXT_ANCHORPREFIX) . "campaign/edit/{$campaign->guid}/"); // This will exit() }
/** * Show the list of existing campaigns * * @param String $handler_id Name of the request handler * @param array &$data Public request data, passed by reference */ public function _show_list($handler_id, array &$data) { $qb_all = org_openpsa_directmarketing_campaign_dba::new_query_builder(); $campaigns = array(); midcom_show_style("show-campaign-list-header"); $this->_request_data['campaigns_all'] = array(); if (array_key_exists('person', $this->_request_data) && $this->_request_data['person']) { debug_add("Listing campaigns person '{$this->_request_data['person']->guid}' is member of"); $qb = org_openpsa_directmarketing_campaign_member_dba::new_query_builder(); $qb->add_constraint('person', '=', $this->_request_data['person']->id); $qb->add_constraint('orgOpenpsaObtype', '<>', org_openpsa_directmarketing_campaign_member_dba::TESTER); $memberships = $qb->execute(); $campaign_membership_map = array(); if ($memberships) { foreach ($memberships as $membership) { try { $campaigns[$membership->campaign] = new org_openpsa_directmarketing_campaign_dba($membership->campaign); $campaign_membership_map[$membership->campaign] = $membership; } catch (midcom_error $e) { debug_add('Failed to load campaign ' . $membership->campaign . ', reason: ' . $e->getMessage()); } } } // List active campaigns for the "add to campaign" selector $qb_all->add_constraint('archived', '=', 0); $qb_all->add_order('metadata.created', $this->_config->get('campaign_list_order')); $campaigns_all = $qb_all->execute(); if ($campaigns_all) { foreach ($campaigns_all as $campaign) { if (!array_key_exists($campaign->id, $campaigns) && $campaign->can_do('midgard:create')) { $this->_request_data['campaigns_all'][] = $campaign; } } } } else { debug_add("Listing campaigns visible to current user"); $qb = org_openpsa_directmarketing_campaign_dba::new_query_builder(); if ($this->_topic->component = 'org.openpsa.directmarketing') { $qb->add_constraint('node', '=', $this->_topic->id); } $qb->add_constraint('archived', '=', 0); $qb->add_order('metadata.created', $this->_config->get('campaign_list_order')); $campaigns = $qb->execute(); } if (is_array($campaigns) && count($campaigns) > 0) { foreach ($campaigns as $campaign) { $this->_request_data['campaign'] = new org_openpsa_directmarketing_campaign_dba($campaign->guid); if (isset($campaign_membership_map) && array_key_exists($campaign->id, $campaign_membership_map)) { $this->_request_data['membership'] = $campaign_membership_map[$campaign->id]; } // TODO: Get count of members and messages here midcom_show_style('show-campaign-list-item'); } } midcom_show_style("show-campaign-list-footer"); }