Beispiel #1
0
 /**
  * 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;
 }
Beispiel #2
0
 /**
  * @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();
 }
Beispiel #3
0
 /**
  * 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;
 }
Beispiel #4
0
 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();
 }
Beispiel #5
0
 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;
 }
Beispiel #6
0
 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;
 }
Beispiel #7
0
 /**
  * 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();
     }
 }
Beispiel #8
0
 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()
 }
Beispiel #9
0
 /**
  * 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");
 }