Beispiel #1
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();
 }
Beispiel #2
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);
         }
     }
 }