/**
  * Load all mailinglist
  *
  * @param sfWebRequest $request
  * @return <type>
  */
 public function executeLoadMailinglist(sfWebRequest $request) {
     $mailinglist = new Mailinglist();
     $data = MailinglistTemplateTable::instance()->getAllMailinglistTemplates(-1,-1);
     $json_result = $mailinglist->buildAllMailinglists($data);
     $this->renderText('({"result":'.json_encode($json_result).'})');
     return sfView::NONE;
 }
 public function postMailinglist()
 {
     $input_start_date = \Input::get('start_date');
     if ($input_start_date == "") {
         $input_start_date = "01/01/1900";
     }
     $start_date = \DateTime::createFromFormat('d/m/Y', $input_start_date);
     $input_end_date = \Input::get('end_date');
     if ($input_end_date == "") {
         $end_date = new \DateTime("NOW");
     } else {
         $end_date = \DateTime::createFromFormat('d/m/Y', $input_end_date);
     }
     $data = Mailinglist::where('updated_at', '>=', $start_date)->where('updated_at', '<=', $end_date)->orderBy('email')->get();
     if (count($data) == 0) {
         $errors = new \Illuminate\Support\MessageBag();
         $errors->add('downloadError', "There's no data within the dates specified.");
         return \Redirect::to('admin/mailinglists')->withErrors($errors);
     }
     \Excel::create('Redooor_Mailinglist_Report', function ($excel) use($data) {
         $excel->sheet('Mailinglist Report', function ($sheet) use($data) {
             $sheet->loadView('redminportal::reports/mailinglist')->with('data', $data);
         });
     })->download('csv');
 }
 public function getDelete($id)
 {
     // Find the mailinglist using the user id
     $mailinglist = Mailinglist::find($id);
     // Delete the mailinglist
     if ($mailinglist == null) {
         $errors = new \Illuminate\Support\MessageBag();
         $errors->add('deleteError', "We are having problem deleting this entry. It may have already been deleted.");
         return \Redirect::to('admin/mailinglists')->withErrors($errors);
     }
     $mailinglist->delete();
     return \Redirect::to('admin/mailinglists');
 }
 /**
  * Subscribe to lists
  *
  * @access	private
  * @param	array 	emails to be subscribed
  * @param	array 	lists to be joined
  */
 private function subscribe_to_lists($data = array(), $emails = array())
 {
     if (empty($data) or !is_array($data)) {
         return FALSE;
     }
     // -------------------------------------
     //	Cache
     // -------------------------------------
     $cache = new Freeform_cacher(array($emails, $data), __FUNCTION__, __CLASS__);
     if ($cache->is_set()) {
         return $cache->get();
     }
     // -------------------------------------
     //	Get lists
     // -------------------------------------
     $this->lists = $this->get_lists();
     // -------------------------------------
     //	Clean
     // -------------------------------------
     $subscribe = array();
     $unsubscribe = array();
     foreach ($data as $key => $val) {
         if (!is_numeric($key) or !isset($this->lists[$key])) {
             continue;
         }
         if ($val == 'n') {
             $unsubscribe[] = $key;
         } else {
             $subscribe[] = $key;
         }
         $data = $subscribe;
     }
     // -------------------------------------
     //	Instantiate module
     // -------------------------------------
     if (class_exists('Mailinglist') === FALSE) {
         require PATH_MOD . '/mailinglist/mod.mailinglist' . EXT;
     }
     $mailinglist = new Mailinglist();
     // -------------------------------------
     //	Get current subscriptions
     // -------------------------------------
     $current_subscriptions = array();
     if (!empty($emails)) {
         $query = ee()->db->query("SELECT email, list_id\n\t\t\t\t FROM exp_mailing_list\n\t\t\t\t WHERE email\n\t\t\t\t IN ('" . implode("','", $emails) . "')\n\t\t\t\t AND list_id\n\t\t\t\t IN (" . implode(',', array_keys($this->lists)) . ")");
         foreach ($query->result_array() as $row) {
             $current_subscriptions[$row['email']][$row['list_id']] = $row['list_id'];
         }
     }
     // -------------------------------------
     //	Loop for email
     // -------------------------------------
     foreach ($emails as $email) {
         // Kill duplicate emails from authorization queue.  This prevents an error if a user
         // signs up but never activates their email, then signs up again.  Note- check for list_id
         // as they may be signing up for two different lists
         $sql = "DELETE FROM exp_mailing_list_queue\n\t\t\t\t\t\tWHERE email = '" . ee()->db->escape_str($email) . "'";
         if (!empty($subscribe)) {
             $sqla[] = " list_id IN ('" . implode("','", $subscribe) . "')";
         }
         if (!empty($unsubscribe)) {
             $sqla[] = " list_id IN ('" . implode("','", $unsubscribe) . "')";
         }
         if (!empty($sqla)) {
             $sql .= " AND (" . implode(" OR ", $sqla) . ")";
         }
         ee()->db->query($sql);
         // -------------------------------------
         //	Subscribe
         // -------------------------------------
         $code = ee()->functions->random('alnum', 10);
         foreach ($subscribe as $list_id) {
             if (isset($current_subscriptions[$email][$list_id])) {
                 continue;
             }
             if (empty($this->settings['send_email_confirmation']) or $this->settings['send_email_confirmation'] != 'y') {
                 ee()->db->query("INSERT INTO exp_mailing_list (list_id, authcode, email, ip_address)\n\t\t\t\t\t\t\t\t\t\t  VALUES ('" . ee()->db->escape_str($list_id) . "', '" . $code . "', '" . ee()->db->escape_str($email) . "', '" . ee()->db->escape_str(ee()->input->ip_address()) . "')");
             } else {
                 ee()->db->query("INSERT INTO exp_mailing_list_queue (email, list_id, authcode, date) VALUES ('" . ee()->db->escape_str($email) . "', '" . ee()->db->escape_str($list_id) . "', '" . $code . "', '" . time() . "')");
                 $mailinglist->send_email_confirmation($email, $code, $list_id);
             }
         }
         // -------------------------------------
         //	Unsubscribe
         // -------------------------------------
         if (!empty($current_subscriptions[$email]) and !empty($unsubscribe)) {
             $uns = array_intersect($current_subscriptions[$email], $unsubscribe);
         }
         if (!empty($uns)) {
             $sql = "DELETE FROM exp_mailing_list WHERE email = '" . ee()->db->escape_str($email) . "' AND list_id IN (" . implode(',', $uns) . ")";
             ee()->db->query($sql);
             $sql = "DELETE FROM exp_mailing_list_queue WHERE email = '" . ee()->db->escape_str($email) . "' AND list_id IN (" . implode(',', $uns) . ")";
             ee()->db->query($sql);
         }
     }
     // -------------------------------------
     //	return
     // -------------------------------------
     return $cache->set($data);
 }
 /**
  * Adapt mailinglist to current version
  * @param sfWebRequest $request
  * @return <type>
  */
 public function executeAdaptMailinglist(sfWebRequest $request) {
     $mailinglist = new Mailinglist();
     $docuObj = new Documenttemplate();
     $mailinglistdata = MailinglistTemplateTable::instance()->getMailinglistByVersionTemplateId($request->getParameter('id'))->toArray();
     $currentdocumenttemplateversion = DocumenttemplateVersionTable::instance()->getActiveVersionById($mailinglistdata[0]['documenttemplatetemplate_id'])->toArray();
     $slots = $docuObj->buildSlots($currentdocumenttemplateversion[0]['id'], 'SLOTSONLY');
     $mailinglistversiondata = MailinglistVersionTable::instance()->getActiveVersionById($request->getParameter('id'))->toArray();
     MailinglistVersionTable::instance()->setMailinglistInactiveById($mailinglistversiondata[0]['mailinglisttemplate_id']);
     $mailinglistversion_id = $mailinglist->storeVersion($mailinglistversiondata[0]['mailinglisttemplate_id'],$mailinglistversiondata[0]['version']+1, $currentdocumenttemplateversion[0]['id']);
     $userdata = MailinglistAllowedSenderTable::instance()->getAllowedSenderById($mailinglistversiondata[0]['id']);
     $users = $mailinglist->buildAllowedUser($userdata);
     $mailinglist->saveUser($mailinglistversion_id, isset($users) ? $users: array());
     $authdata = MailinglistAuthorizationSettingTable::instance()->getAuthorizationById($mailinglistversiondata[0]['id'])->toArray();
     $mailinglist->adaptAuthorizationEntry($authdata, $mailinglistversion_id);
     $mailinglist->storeMailinglist($slots, $mailinglistversion_id);
     return sfView::NONE;
 }