示例#1
0
 function edit($id = false)
 {
     if (empty($_REQUEST['id']) && empty($id)) {
         $this->error('Cannot edit element primary key is missing : ' . get_class($this));
         return;
     }
     if (!$id) {
         $id = $_REQUEST['id'];
     }
     // get detail info of current user
     $this->data['user'] = $this->modelObj->getDetails(array('user_id' => $id));
     if (!$this->data['user']) {
         $this->notice(__('No subscriber found, most probably because he was deleted.', WYSIJA));
         return $this->redirect();
     }
     // get list info
     $model_list = WYSIJA::get('list', 'model');
     $model_list->limitON = false;
     $model_list->orderBy('is_enabled', 'DESC');
     $this->data['list'] = $model_list->get(false, array('greater' => array('is_enabled' => '-1')));
     $this->viewObj->title = __('Edit', WYSIJA) . ' ' . $this->data['user']['details']['email'];
     // execute hooks
     $hook_params = array('user_id' => $id);
     $this->data['hooks']['hook_subscriber_left'] = apply_filters('hook_subscriber_left', WYSIJA_module::execute_hook('hook_subscriber_left', $hook_params), $hook_params);
     $this->data['hooks']['hook_subscriber_right'] = apply_filters('hook_subscriber_right', WYSIJA_module::execute_hook('hook_subscriber_right', $hook_params), $hook_params);
     $this->data['hooks']['hook_subscriber_bottom'] = apply_filters('hook_subscriber_bottom', WYSIJA_module::execute_hook('hook_subscriber_bottom', $hook_params), $hook_params);
     // prepare js, for rendering
     $this->js[] = 'wysija-validator';
 }
示例#2
0
 function save()
 {
     $_REQUEST = stripslashes_deep($_REQUEST);
     $_POST = stripslashes_deep($_POST);
     $this->requireSecurity();
     $hook_settings_before_save = array('REQUEST' => &$_REQUEST);
     apply_filters('hook_settings_before_save', WYSIJA_module::execute_hook('hook_settings_before_save', $hook_settings_before_save), $hook_settings_before_save);
     $this->modelObj->save($_REQUEST['wysija']['config'], true);
     $hook_settings_super_advanced_params = array();
     $this->data['hooks']['hook_settings_super_advanced'] = apply_filters('hook_settings_super_advanced', WYSIJA_module::execute_hook('hook_settings_super_advanced', $hook_settings_super_advanced_params), $hook_settings_super_advanced_params);
     // redirect so that javascript values get updated
     wp_redirect('admin.php?page=wysija_config' . $_REQUEST['redirecttab']);
 }
示例#3
0
 function viewstats()
 {
     $this->js[] = 'wysija-admin-list';
     $this->js[] = 'wysija-charts';
     $this->viewShow = 'viewstats';
     $this->modelObj = WYSIJA::get("email", "model");
     $this->modelObj->limitON = false;
     $email_object = $this->modelObj->getOne(false, array("email_id" => $_REQUEST['id']));
     if (empty($email_object)) {
         $this->redirect('admin.php?page=wysija_campaigns');
         return;
     }
     $this->viewObj->model = $this->modelObj;
     $this->viewObj->namecampaign = $email_object['subject'];
     $this->viewObj->title = sprintf(__('Stats : %1$s', WYSIJA), $email_object['subject']);
     $modelObjCamp = WYSIJA::get("campaign", "model");
     $limit_pp = false;
     if (isset($modelObjCamp->limit_pp)) {
         $limit_pp = $modelObjCamp->limit_pp;
     }
     $modelObjCamp->limitON = false;
     $campaign = $modelObjCamp->getOne(false, array("campaign_id" => $email_object['campaign_id']));
     $this->setviewStatsfilter();
     $this->modelObj->reset();
     $this->modelObj->noCheck = true;
     // 0 - counting request
     $queryCmmonStart = 'SELECT count(distinct B.user_id) as users FROM `[wysija]user` as A';
     $queryCmmonStart .= ' LEFT JOIN `[wysija]' . $this->tableQuery . '` as B on A.user_id=B.user_id';
     // all the counts query
     $query = "SELECT count(user_id) as users, status FROM `[wysija]email_user_stat` as A\n\t\t\tWHERE A.email_id=" . $email_object['email_id'] . " GROUP BY status";
     $countss = $this->modelObj->query("get_res", $query, ARRAY_A);
     // we also count what is in the queue
     $query = "SELECT count(user_id) as users FROM `[wysija]queue` as A\n\t\t\tWHERE A.email_id=" . $email_object['email_id'];
     $countss[-2]['status'] = -3;
     $countss[-2]['users'] = $this->modelObj->count($query, 'users');
     $counts = array();
     $truetotal = $total = 0;
     foreach ($countss as $count) {
         switch ($count['status']) {
             case "-3":
                 $type = 'inqueue';
                 break;
             case "-2":
                 $type = 'notsent';
                 break;
             case "-1":
                 $type = 'bounced';
                 break;
             case "0":
                 $type = 'sent';
                 break;
             case "1":
                 $type = 'opened';
                 break;
             case "2":
                 $type = 'clicked';
                 break;
             case "3":
                 $type = 'unsubscribe';
                 break;
         }
         if ($count['status'] != "-2") {
             $total = $total + $count['users'];
         }
         $truetotal = $truetotal + $count['users'];
         $counts[$type] = $count['users'];
     }
     $counts['allsent'] = $total;
     $counts['all'] = $truetotal;
     $this->modelObj->reset();
     $this->filters['equal']["B.email_id"] = $email_object['email_id'];
     $this->modelObj->noCheck = true;
     if ($this->filters) {
         $this->modelObj->setConditions($this->filters);
     }
     // 1 - subscriber request
     $query = 'SELECT A.user_id, A.firstname, A.lastname,A.status as ustatus,' . $this->statusemail . ' , A.email, B.* FROM `[wysija]user` as A';
     $query .= ' LEFT JOIN `[wysija]' . $this->tableQuery . '` as B on A.user_id=B.user_id';
     $queryFinal = $this->modelObj->makeWhere();
     // without filter we already have the total number of subscribers
     if ($this->filters) {
         $this->modelObj->countRows = $this->modelObj->count($queryCmmonStart . $queryFinal, 'users');
     } else {
         $this->modelObj->countRows = $counts['all'];
     }
     $orderby = '';
     /**
      * Until now, we have
      * - 3 possible values of $this->tableQuery (queue, email_user_url, email_user_stat), set by $this->setviewStatsfilter()
      * - 2 possible values of $_REQUEST['orderby']
      * => 3x2 = 6 cases
      */
     if (isset($_REQUEST['orderby'])) {
         switch ($this->tableQuery) {
             case 'email_user_url':
             case 'email_user_stat':
                 if (!is_string($_REQUEST['orderby']) or preg_match('|[^a-z0-9#_.-]|i', $_REQUEST['orderby']) !== 0) {
                     $_REQUEST['orderby'] = '';
                     break;
                 }
                 if (!in_array(strtoupper($_REQUEST['ordert']), array('DESC', 'ASC'))) {
                     $_REQUEST['ordert'] = 'DESC';
                 }
                 $orderby = ' ORDER BY ' . $_REQUEST['orderby'] . ' ' . $_REQUEST['ordert'];
                 break;
             case 'queue':
             default:
                 $orderby .= ' ORDER BY A.user_id DESC';
                 break;
         }
     } else {
         switch ($this->tableQuery) {
             case 'email_user_url':
                 $orderby = ' ORDER BY B.clicked_at DESC, B.number_clicked DESC';
                 // by default, sort by last clicked and biggest hit
                 break;
             case 'email_user_stat':
                 $orderby = ' ORDER BY B.opened_at DESC, B.status DESC';
                 // by default, sort by last open and its staus value
                 break;
             case 'queue':
             default:
                 $orderby = ' ORDER BY A.user_id DESC';
                 break;
         }
     }
     $this->data['tableQuery'] = $this->tableQuery;
     $this->modelObj->limitON = true;
     $subscribers = array();
     $hook_params = array('email_id' => $email_object['email_id'], 'url_id' => isset($_REQUEST['url_id']) && $_REQUEST['url_id'] ? $_REQUEST['url_id'] : false, 'subscribers' => &$subscribers, 'id' => $email_object['campaign_id']);
     $this->data['subscribers'] = $this->modelObj->getResults($query . $queryFinal . " GROUP BY A.user_id" . $orderby . $this->modelObj->setLimit(0, (int) $limit_pp));
     $this->modelObj->reset();
     // make the data object for the listing view
     $modelList = WYSIJA::get("list", "model");
     // 2 - list request
     $query = "SELECT A.list_id, A.name,A.is_enabled, count( B.user_id ) AS users FROM `[wysija]" . $modelList->table_name . "` as A";
     $query .= " LEFT JOIN `[wysija]user_list` as B on A.list_id = B.list_id";
     $query .= " GROUP BY A.list_id";
     $listsDB = $modelList->getResults($query);
     $lists = array();
     foreach ($listsDB as $listobj) {
         $lists[$listobj["list_id"]] = $listobj;
     }
     $listsDB = null;
     $user_ids = array();
     foreach ($this->data['subscribers'] as $subscriber) {
         $user_ids[] = $subscriber['user_id'];
     }
     // 3 - user_list request
     if ($user_ids) {
         $modeluList = WYSIJA::get("user_list", "model");
         $userlists = $modeluList->get(array("list_id", "user_id"), array("user_id" => $user_ids));
     }
     $this->data['lists'] = $lists;
     $this->data['counts'] = array_reverse($counts);
     // regrouping all the data in the same array
     foreach ($this->data['subscribers'] as $keysus => $subscriber) {
         // default key while we don't have the data
         //TODO add data for stats about emails opened clicked etc
         $this->data['subscribers'][$keysus]["emails"] = 0;
         $this->data['subscribers'][$keysus]["opened"] = 0;
         $this->data['subscribers'][$keysus]["clicked"] = 0;
         if ($userlists) {
             foreach ($userlists as $key => $userlist) {
                 if ($subscriber["user_id"] == $userlist["user_id"] && isset($lists[$userlist["list_id"]])) {
                     if (!isset($this->data['subscribers'][$keysus]["lists"])) {
                         $this->data['subscribers'][$keysus]["lists"] = $lists[$userlist["list_id"]]["name"];
                     } else {
                         $this->data['subscribers'][$keysus]["lists"] .= ", " . $lists[$userlist["list_id"]]["name"];
                     }
                 }
             }
         }
     }
     $this->data['email'] = $email_object;
     if (!$this->data['subscribers']) {
         $this->notice(__("Your request can't retrieve any subscribers. Change your filters!", WYSIJA));
     }
     // execute hooks
     $hook_params = array('email_id' => $_REQUEST['id'], 'email_object' => $email_object, 'url_id' => !empty($_REQUEST['url_id']) ? (int) $_REQUEST['url_id'] : null, 'id' => $email_object['campaign_id']);
     $this->data['hooks']['hook_newsletter_top'] = apply_filters('hook_newsletter_top', WYSIJA_module::execute_hook('hook_newsletter_top', $hook_params), $hook_params);
     $this->data['hooks']['hook_newsletter_bottom'] = apply_filters('hook_newsletter_bottom', WYSIJA_module::execute_hook('hook_newsletter_bottom', $hook_params), $hook_params);
 }