/**
      * Set up a new campaign and send a message.
      * 
      * @access public
 //     */
 public function campaignAction()
 {
     // Defaults
     $success = null;
     $message = null;
     $error = null;
     $recipients = array();
     $sentto = array();
     $description = null;
     $date = null;
     $time = null;
     $sendtime = null;
     $timezone = null;
     $status = null;
     $user_folders = 0;
     $shortcode = 0;
     // set the default message body values
     $this->defaultValues();
     $userid = $this->user->getId();
     $formObj = new Application_Model_Form();
     $user = new Application_Model_User($userid);
     $rpt = new Application_Model_Report();
     $yearmonth = date('Y-m');
     // Logged in users folder ID's
     $user_folders = $this->user->getFolders();
     $foldersid = array_keys($user_folders);
     $totalfolders = count($foldersid);
     $orgeachfolders = array();
     $setarray = array();
     //          for($i = 0; $i < $totalfolders; $i++){
     //              $orgnumbers = array();
     //              $folder = new Application_Model_Folder($this->user, $foldersid[$i]);
     //              $subscribers = $folder->getSubscribers();
     //              foreach ($subscribers as $subscriber) {
     //                        if(!in_array($subscriber['phonenumber'], $setarray)){
     //                          $orgnumbers[] =$subscriber['phonenumber'];
     //                        }
     //                        $setarray[$subscriber['phonenumber']] = $subscriber['phonenumber'];
     //                }
     //                $orgeachfolders[$foldersid[$i]] = $orgnumbers;
     //          }
     $this->view->cleandata = $orgeachfolders;
     $this->view->folders = $user_folders;
     // When the form is submit
     if ($this->request->isPost()) {
         // see if a folder was selected
         $sendto = $this->request->getParam('folders');
         $description = trim($this->request->getParam('description'));
         $this->msg_head = $this->request->getParam('msg_head');
         $this->msg_body = $this->request->getParam('msg_body');
         $shortcode = $this->request->getParam('scselect');
         //    		echo '<pre>'; print_r($sendto); exit;
         // Get the sendtime
         $scheduled = false;
         if ($this->request->getParam('sendtime') == 'later') {
             $scheduled = true;
             $sendtime = $this->request->getParam('date') . ' ' . $this->request->getParam('time');
         }
         // User's timezone
         $this->user->setTimeZone($this->request->getParam('t_zone'));
         $timezone = $this->user->getTimeZone();
         // Only admins can edit the footer
         if ($this->user->isAdmin()) {
             $this->msg_foot = $this->request->getParam('msg_foot');
         }
         $msg = $this->msg_head ? "{$this->msg_head}:" : '';
         $msg .= "{$this->msg_body}\n{$this->msg_foot}";
         $msg = trim($msg);
         $sendmessage = new Application_Model_Message($this->user);
         // Verify the user provided a description for this message
         if ($description) {
             // Verify there was a message set
             if ($msg) {
                 // make sure we got the sendto array from POST
                 if (is_array($sendto) && !empty($sendto)) {
                     // Create a campaign id that each message that goes out for this campaign can be grouped by
                     $campaignid = md5($this->user->username . time());
                     // Get the subscribers from each selected folder
                     $recipients = array();
                     foreach ($sendto as $folder) {
                         //0001
                         // Clear out the recipients array for each folder
                         $recipients = array();
                         // easy check to make sure this folder is owned by this user
                         if (array_key_exists($folder, $user_folders)) {
                             // Get the folder model
                             $folder = new Application_Model_Folder($this->user, $folder);
                             // Verify it
                             if ($folder->isValid()) {
                                 // Get subscribers to this folder
                                 $subscribers = $folder->getSubscribers();
                                 //            echo '<pre>'; print_r($subscribers);
                                 //            echo'<br>'."DELEMMA ";
                                 if (!empty($subscribers)) {
                                     foreach ($subscribers as $subscriber) {
                                         // Don't add this user if they have already received this message from being in another selected folder
                                         if (!in_array($subscriber['phonenumber'], $sentto)) {
                                             // key off the phone number to avoid duplicates from this folder, which should
                                             // never happen, but better safe than sorry
                                             $recipients[$subscriber['phonenumber']] = $subscriber['phonenumber'];
                                         }
                                     }
                                     /**
                                      * The message needs to be sent to each folder individually so that the folderid
                                      * can be logged in the outbound table. That allows us to see what folder to opt
                                      * a user out of when they reply with an optout.
                                      */
                                     if (!empty($recipients)) {
                                         // Construct the message
                                         $i_default = 0;
                                         // Set the folderid this message is being sent to
                                         $sendmessage->folderid = $folder->getId();
                                         // Set the user description
                                         $sendmessage->description = $description;
                                         // Set a unique identifier for all messages that go out on this campaign
                                         $sendmessage->campaignid = $campaignid;
                                         // Queue it up for delivery
                                         //                    ($body, $recipients, $sendtime = null, $timezone = null, $confirmid = 0, $depth = 0, $createuser = 0, $shortcode=87365)
                                         //queue($msg, $recipients, $sendtime, $timezone,$i_default,$source,$userid,$shortcode); dev
                                         $source = 404;
                                         $status = $sendmessage->queue($msg, $recipients, $sendtime, $timezone, $i_default, $source, $userid, $shortcode);
                                         //                    $status = $sendmessage->queue($msg, $recipients, $sendtime, $timezone,$i_default,$userid);
                                         if ($status) {
                                             // Put these recipients into our sentto array to avoid sending duplicates
                                             $sentto = array_merge($sentto, $recipients);
                                         } else {
                                             $error = $sendmessage->getError();
                                         }
                                     }
                                 } else {
                                     $error = 'There are no subscribers in the chosen folder(s).';
                                 }
                             } else {
                                 $error = $folder->getError();
                             }
                         } else {
                             $error = 'Invalid folder selected [' . $folder . '].';
                         }
                     }
                     // end of foreach  0001
                     // If the sentto list never got any recipients, there was no one in the selected folders
                     /* if (empty($sentto)) { //echo 2222;
                            $error = 'There are no subscribers in the chosen folder(s).';
                        }
                        */
                     if ($status == 1) {
                         $insert = $scheduled ? 'scheduled to send' : 'sent';
                         $message = 'Message successfully ' . $insert . ' to ' . count($sentto) . ' subscribers!';
                         $success = true;
                         // now set the message fields back to default
                         $this->defaultValues();
                     } else {
                         $error = $sendmessage->getError();
                     }
                 } else {
                     $error = 'You must select at least one folder to send the message to.';
                 }
             } else {
                 $error = 'Message content is required';
             }
         } else {
             $error = 'Message description is required';
         }
     }
     $userusage = $rpt->dashboard_totalMessagesSentOut($userid, $yearmonth);
     //              echo 'USAGE: '.$yearmonth;
     // Send the message values back to the view
     $this->view->description = $description;
     $this->view->sendtime = $sendtime;
     $this->view->timezone = $timezone;
     $this->view->msg_head = $this->msg_head;
     $this->view->msg_body = $this->msg_body;
     $this->view->msg_foot = $this->msg_foot;
     // Status back to the view
     $this->view->error = $error;
     $this->view->success = $success;
     $this->view->message = $message;
     $this->view->formobject = $formObj;
     $this->view->formobjects = $formObj->webformList($userid);
     $this->view->userid = $userid;
     $this->view->userObj = $user;
     $this->view->msglimit = $user->messagelimit;
     $this->view->userusage = $userusage;
 }
 /**
  * Created a sendMessage method that will do everything the post controller would
  * because we have a user who wants to send a message via GET and our API does this
  * via POST. I tried using _forward('post'), but it was doubling up the JSON response
  * body for some reason. So now post and get just call this method to do the same thing.
  * 
  * @access private
  */
 private function sendMessage()
 {
     $valid = true;
     echo $recipients = $this->_requestParam('recipients');
     exit;
     $subjecttext = $this->_requestParam('subject');
     $bodytext = $this->_requestParam('message');
     $sendtime = $this->_requestParam('sendtime');
     $timezone = $this->_requestParam('timezone');
     // Cleanup send time
     if ($sendtime) {
         $tparts = str_split($sendtime, 2);
         $sendtime = $tparts[0] . $tparts[1] . '-' . $tparts[2] . '-' . $tparts[3] . ' ' . $tparts[4] . ':' . $tparts[5] . ':00';
     }
     // Not using this at the moment, so don't want anyone to access it
     //$folder = $this->_request->getParam('id');
     //$loadby = $this->_request->getParam('field');
     $folder = false;
     $loadby = false;
     // Folder is optional (at the moment...)
     if ($folder) {
         $folder = new Application_Model_Folder($this->apiuser, $folder, $loadby);
         if ($folder->isValid()) {
             // Get subscribers in this folder
             $subscribers = $folder->getSubscribers();
             // TODO: Come up with a better way to pull phone #'s out of a folder's subscriber list
             foreach ($subscribers as $subscriber) {
                 $recipients[] = $subscriber['phonenumber'];
             }
         } else {
             $valid = false;
             $this->setError($folder->getError(), 500);
         }
     }
     // Validate and send
     if ($valid) {
         if ($recipients) {
             if ($bodytext) {
                 $message = new Application_Model_Message($this->apiuser);
                 $bodytext = urldecode($bodytext);
                 $subjecttext = urldecode($subjecttext);
                 // Build the message with a subject if there is one.
                 $msg = $subjecttext ? $subjecttext . ': ' . $bodytext : $bodytext;
                 // Queue it up for delivery
                 $return = $message->queue($msg, $recipients, $sendtime, $timezone);
                 if ($return) {
                     $this->setOutputParam('status', true);
                     $this->setOutputParam('message', 'Message successfully sent.');
                 } else {
                     $this->setError($message->getError(), 500);
                 }
             } else {
                 $this->setError('Message is required.', 500);
             }
         } else {
             $this->setError('At least one recipient is required.', 500);
         }
     }
 }