Exemple #1
0
 public static function get_parent_guid_uncached_static($guid, $classname = __CLASS__)
 {
     if (empty($guid)) {
         return null;
     }
     $mc = org_openpsa_directmarketing_campaign_message_dba::new_collector('guid', $guid);
     $result = $mc->get_values('campaign');
     if (empty($result)) {
         // error
         return null;
     }
     $campaign_id = array_shift($result);
     if ($campaign_id === false) {
         // error
         return null;
     }
     $mc2 = org_openpsa_directmarketing_campaign_dba::new_collector('id', $campaign_id);
     $result2 = $mc2->get_values('guid');
     if (empty($result2)) {
         // error
         return null;
     }
     $campaign_guid = array_shift($result2);
     if ($campaign_guid === false) {
         // error
         return null;
     }
     return $campaign_guid;
 }
Exemple #2
0
 public function testCRUD()
 {
     $helper = new openpsa_test_campaign_helper($this);
     $campaign = $helper->get_campaign();
     midcom::get('auth')->request_sudo('org.openpsa.directmarketing');
     $message = new org_openpsa_directmarketing_campaign_message_dba();
     $stat = $message->create();
     $this->assertFalse($stat);
     $message = new org_openpsa_directmarketing_campaign_message_dba();
     $message->campaign = $campaign->id;
     $stat = $message->create();
     $this->assertTrue($stat);
     $this->register_object($message);
     $message->title = 'TEST';
     $stat = $message->update();
     $this->assertTrue($stat);
     $message->refresh();
     $this->assertEquals('TEST', $message->title);
     $stat = $message->delete();
     $this->assertTrue($stat);
     midcom::get('auth')->drop_sudo();
 }
Exemple #3
0
 private function _get_campaign_data($first_send)
 {
     $this->_request_data['report']['campaign_data'] = array();
     $campaign_data =& $this->_request_data['report']['campaign_data'];
     $campaign_data['unsubscribed'] = 0;
     $qb_unsub = org_openpsa_directmarketing_campaign_member_dba::new_query_builder();
     $qb_unsub->add_constraint('campaign', '=', $this->_request_data['message']->campaign);
     $qb_unsub->add_constraint('orgOpenpsaObtype', '=', org_openpsa_directmarketing_campaign_member_dba::UNSUBSCRIBED);
     $qb_unsub->add_constraint('metadata.revised', '>', date('Y-m-d H:i:s', $first_send));
     $campaign_data['next_message'] = false;
     // Find "next message" and if present use its sendStarted as constraint for this query
     $qb_messages = org_openpsa_directmarketing_campaign_message_dba::new_query_builder();
     $qb_messages->add_constraint('campaign', '=', $this->_request_data['message']->campaign);
     $qb_messages->add_constraint('id', '<>', $this->_request_data['message']->id);
     $qb_messages->add_constraint('sendStarted', '>', $first_send);
     $qb_messages->add_order('sendStarted', 'DESC');
     $qb_messages->set_limit(1);
     $messages = $qb_messages->execute_unchecked();
     if (is_array($messages) && isset($messages[0])) {
         $campaign_data['next_message'] = $messages[0];
         $qb_unsub->add_constraint('metadata.revised', '<', date('Y-m-d H:i:s', $messages[0]->sendStarted));
     }
     $campaign_data['unsubscribed'] = $qb_unsub->count_unchecked();
 }
Exemple #4
0
 public function _on_watched_dba_create($post)
 {
     // TODO: Move this logic to a separate class
     // Re-fetch the post
     $post = new net_nemein_discussion_post_dba($post->id);
     // Figure out which topic the post is in
     $thread = new net_nemein_discussion_thread_dba($post->thread);
     try {
         $node = new midcom_db_topic($thread->node);
     } catch (midcom_error $e) {
         return false;
     }
     // Find out if some campaign watches the topic
     $campaigns = array();
     $qb = new midgard_query_builder('midgard_parameter');
     $qb->add_constraint('domain', '=', 'org.openpsa.directmarketing');
     $qb->add_constraint('name', '=', 'watch_discussion');
     $qb->add_constraint('value', '=', $node->guid);
     $campaign_params = @$qb->execute();
     if (is_array($campaign_params) && count($campaign_params) > 0) {
         foreach ($campaign_params as $parameter) {
             try {
                 $campaign = new org_openpsa_directmarketing_campaign_dba($parameter->parentguid);
             } catch (midcom_error $e) {
                 continue;
             }
             $campaigns[] = $campaign;
         }
     }
     if (count($campaigns) < 1) {
         return;
     }
     // Find an o.o.directmarketing node for message composition
     $directmarketing_node = midcom_helper_misc::find_node_by_component('org.openpsa.directmarketing');
     if (!$directmarketing_node) {
         return;
     }
     foreach ($campaigns as $campaign) {
         // Create message
         $message = new org_openpsa_directmarketing_campaign_message_dba();
         $message->campaign = $campaign->id;
         // FIXME: Support HTML mails and other notifications too
         $message->orgOpenpsaObtype = org_openpsa_directmarketing_campaign_message_dba::EMAIL_TEXT;
         $message->title = $post->subject;
         $stat = $message->create();
         if ($stat) {
             // Populate the Post data here
             $message = new org_openpsa_directmarketing_campaign_message_dba($message->id);
             // FIXME: We're making awfully lot of assumptions here
             $message->parameter('midcom.helper.datamanager', 'data_post', $post->guid);
             $message->parameter('midcom.helper.datamanager', 'data_subject', "[{$campaign->title}] {$post->subject}");
             $message->parameter('midcom.helper.datamanager', 'data_content', $post->content);
             $message->parameter('midcom.helper.datamanager', 'data_from', "{$post->sendername} <{$post->senderemail}>");
             debug_add("Message created from forum post #{$post->id} \"{$post->subject}\"");
             // TODO: Now we should actually send the message
             $sending_url = $directmarketing_node[MIDCOM_NAV_RELATIVEURL] . "message/{$message->guid}/send/";
             debug_add("START SEND TO URL {$sending_url}");
             midcom::get('auth')->request_sudo();
             ob_start();
             midcom::get()->dynamic_load($sending_url);
             $output = ob_get_contents();
             ob_end_clean();
             midcom::get('auth')->drop_sudo();
             debug_add("END SEND");
         } else {
             debug_add("Failed to create campaign message from post, reason " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR);
         }
     }
 }