예제 #1
0
 /**
  * See messages sent to a particular folder.
  * 
  * @access public
  */
 public function viewAction()
 {
     // Defaults
     $error = null;
     $foldername = 'Not Found';
     $folderid = null;
     $subscribers = array();
     $message = null;
     $datauploaded = 0;
     $folderList = $this->user->getFolders();
     $id = $this->request->getParam('id');
     $from = $this->request->getParam('from');
     if ($from && $from == 'keyword') {
         $link = '/messages/keyword/';
         $kid = $this->request->getParam('kid');
         $keyword = $this->request->getParam('keyword');
         if ($kid && $keyword) {
             $link .= 'id/' . $kid;
             $text = 'Back to keyword ' . $keyword;
         } else {
             $text = 'Back to keywords';
         }
     } else {
         $link = '/folder/';
         $text = 'Back to folders';
     }
     $this->view->backtolink = $link;
     $this->view->backtotext = $text;
     $folder = new Application_Model_Folder($this->user, $id);
     /* all opted out subcribers from current account */
     // echo "I am here".print_r($folder);
     if ($folder->isValid()) {
         // 1st see if the user tried to import subscribers
         if ($this->request->isPost()) {
             // See what action we are taking
             $actiontype = $this->request->getParam('actiontype');
             if ($actiontype == 'upload') {
                 //                    echo "<script type='text/javascript'>alert('UPLOAD')</script>";
                 //                 	if ($this->user->isSuperAdmin() || $this->session->canImport) {
                 // initialize the uploader
                 $uploader = new Application_Model_Upload();
                 // get the action from post
                 $upload = $this->request->getParam('upload');
                 $xls_template = trim($this->request->getParam('rbts_status'));
                 //                   echo "<script type='text/javascript'>alert('Line 154')</script>";
                 if ($upload == 'Upload File') {
                     //                        echo "<script type='text/javascript'>alert('Line 156')</script>";
                     $upload_path = '../application/imports/';
                     // set the upload directory
                     $uploader->setUploadDir($upload_path);
                     //                        echo "<script type='text/javascript'>alert('Line 160')</script>";
                     // give the valid file type extensions
                     $uploader->setValidExt(array('csv'));
                     // Give the filename some context
                     $filename = $this->user->getId() . '-' . $id . '-' . time() . '.csv';
                     // do the upload
                     if (($result = $uploader->uploadFile($filename)) === true) {
                         $isTemplatewrong = false;
                         // Now open the file and import the subscribers
                         ini_set('auto_detect_line_endings', TRUE);
                         if (($handle = fopen($upload_path . $filename, "rb")) !== false) {
                             $tmpStatus = true;
                             while (($subscriber = fgetcsv($handle, 0, "\n")) !== false) {
                                 if (trim($subscriber[0])) {
                                     $csvdata = explode(',', $subscriber[0]);
                                     $count_csv = count($csvdata);
                                     $phone = $folder->cleanPhone($csvdata[0]);
                                     if (strlen($phone) == 10) {
                                         $phone = '1' . $phone;
                                         $csvdata[0] = $phone;
                                     }
                                     if (strlen($phone) < 10) {
                                         continue;
                                     }
                                     $sbrStatus = $folder->check_status_ofsubcriber($phone);
                                     if (!$sbrStatus) {
                                         continue;
                                     } else {
                                         /* upload template type definition */
                                         if ($xls_template === 'ph' && $count_csv == 1) {
                                             if ($folder->addSubscriber($csvdata[0]) === false) {
                                                 $errors[] = $folder->getError();
                                             }
                                             $isTemplatewrong = true;
                                         }
                                         if ($xls_template === 'phbd' && $count_csv == 2) {
                                             $bd = str_replace("_", "-", "{$csvdata['1']}");
                                             if ($folder->addSubscriber($csvdata[0], "", "", $bd) === false) {
                                                 $errors[] = $folder->getError();
                                             }
                                             $isTemplatewrong = true;
                                         }
                                         if ($xls_template === 'pnbdfl' && $count_csv == 4) {
                                             $bd = str_replace("_", "-", "{$csvdata['3']}");
                                             if ($folder->addSubscriber($csvdata[0], $csvdata[1], $csvdata[2], $bd) === false) {
                                                 $errors[] = $folder->getError();
                                             }
                                             $isTemplatewrong = true;
                                         }
                                     }
                                 }
                                 //                                    usleep(10000);
                                 $datauploaded++;
                             }
                             // end of while loop
                             // if template type is not the same with checked radio button
                             if (!$isTemplatewrong) {
                                 $msg = '<script type="text/javascript">';
                                 $msg .= ' $(function(){';
                                 $msg .= ' csscody.alert("Incorrect template is selected!")});';
                                 $msg .= '</script>';
                                 echo $msg;
                                 $tmpStatus = false;
                             }
                             fclose($handle);
                             if ($tmpStatus) {
                                 if (!empty($errors)) {
                                     $error = $errors;
                                 } else {
                                     $message = 'Subscribers imported!';
                                 }
                             }
                             $act_id = $this->user->getId();
                             $email = $this->user->email;
                             $business = $this->user->businessname;
                             $phone = $this->user->office ? $this->user->office : $this->user->cell;
                             $msg = "Data uploaded to the Textm system by:\n\nAccountid: " . $act_id . "\nEmail: " . $email . "\nBusinessname: " . $business . "\nPhone: " . $phone . "\nSubscribers imported: " . $datauploaded;
                             $folder->sendEmail($email, "New data uploaded", $msg);
                         } else {
                             $error = 'The file uploaded but could not be imported. Please contact us.';
                         }
                     } else {
                         $error = $uploader->displayError();
                     }
                 }
                 //                    unset($syst_subscrbs);
                 //                 	} else {
                 //                 		$error = 'You do not have permission to carry out this operation';
                 //                 	}
             }
             if ($actiontype == 'movenumber') {
                 $newfolderid = $this->request->getParam('movedropdown');
                 $keywordDetails = $folder->getKeywordDetailsByFolderId($newfolderid);
                 if (!empty($keywordDetails)) {
                     $newkeywordid = $keywordDetails[0]['id'];
                 } else {
                     $newkeywordid = 0;
                 }
                 $subscriberidArray = $this->getRequest()->getParam('subscid');
                 foreach ($subscriberidArray as $subscriberid) {
                     $moveradioid = 'moveradio' . $subscriberid;
                     $moveORcopy = $this->request->getParam($moveradioid);
                     if ($moveORcopy == 'copy') {
                         $subscriberDetails = $folder->getSubscriberDetailsById($subscriberid);
                         $newsubscriberid = $folder->copyPhoneNumber($newfolderid, $subscriberDetails[0]['phonenumber']);
                         if ($newsubscriberid) {
                             $message = "Phone number(s) copied sucessfully";
                             //$this->_redirector->gotoUrl('/folder/view/id/'.$newfolderid);
                         }
                     } elseif ($moveORcopy == 'move') {
                         $subscriberDetails = $folder->getSubscriberDetailsById($subscriberid);
                         if ($folder->numberExistsInNewFolder($subscriberDetails[0]['phonenumber'], $newfolderid)) {
                             //if number already exists in the destination folder
                             $existedNumberSubscriberId = $folder->numberExistsInNewFolder($subscriberDetails[0]['phonenumber'], $newfolderid);
                             //id found then delete corresponding row from destination folder
                             if ($folder->deleteNumberFromNewFolder($existedNumberSubscriberId)) {
                                 //now move number onto destination folder
                                 if ($folder->movePhoneNumber($subscriberid, $newfolderid, $newkeywordid)) {
                                     $message = "Phone number(s) moved sucessfully";
                                     //$this->_redirector->gotoUrl('/folder/view/id/'.$newfolderid);
                                 } else {
                                     $error = 'An error occurred and the phone number has not been moved';
                                 }
                             }
                         } else {
                             //if number doesn't exist in the destination folder
                             if ($folder->movePhoneNumber($subscriberid, $newfolderid, $newkeywordid)) {
                                 $message = "Phone number(s) moved sucessfully";
                                 //$this->_redirector->gotoUrl('/folder/view/id/'.$newfolderid);
                             } else {
                                 $error = 'An error occurred and the phone number has not been moved';
                             }
                         }
                     }
                 }
                 //echo "<pre>"; print_r($this->request); exit;
             }
         }
         if ($this->request->getParam('actiontype') == 'optout') {
             //if ($this->user->isSuperAdmin() || $this->session->canImport) {
             $subscriber = $this->request->getParam('subscriber');
             if ($subscriber) {
                 if ($folder->optOutSubscriberById($subscriber)) {
                     $message = 'Subscriber opted out.';
                 }
             }
             //}
             /* else {
                $error = $error ? $error . "<br />" : '';
                $error .= 'You do not have sufficient permission to opt out subscribers';
                } */
         }
         $foldername = $folder->name;
         $folderid = $folder->getId();
         $subscribers = $folder->getSubscribersLatest();
         //echo "<pre>"; print_r($subscribers);
     } else {
         $error = $folder->getError();
     }
     // View variables
     $this->view->foldername = $foldername;
     $this->view->folderid = $folderid;
     $this->view->subscribers = $subscribers;
     $this->view->error = $error;
     $this->view->message = $message;
     $this->view->folderList = $folderList;
     $this->view->accountid = $this->user->getId();
     $this->view->user = $this->user;
     //echo "<pre>"; print_r($this->view);
     //echo "I am here5555522";die;
     //exit;
 }
예제 #2
0
 /**
      * 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;
 }