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(); }
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); } } }