/** * 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; }
/** * 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; }