Changeset 1906
- Timestamp:
- 11/25/09 12:10:07 (14 years ago)
- Location:
- plugins/newsletter/trunk
- Files:
-
- 1 deleted
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
plugins/newsletter/trunk/_admin.php
r1848 r1906 35 35 36 36 // Dynamic method 37 $core->rest->addFunction('letterGetSubscribersUp', array('newsletterRest','letterGetSubscribersUp'));38 37 $core->rest->addFunction('prepareALetter', array('newsletterRest','prepareALetter')); 39 $core->rest->addFunction('sendALetter', array('newsletterRest','sendALetter'));40 $core->rest->addFunction('sendLetter', array('newsletterRest','sendLetter'));41 38 $core->rest->addFunction('sendLetterBySubscriber', array('newsletterRest','sendLetterBySubscriber')); 42 39 … … 65 62 public static function adminAutosend($cur, $post_id) 66 63 { 67 newsletterCore::autosendNewsletter(); 64 global $core; 65 66 // recupere le contenu du billet 67 $params = array(); 68 $params['post_id'] = (integer) $post_id; 69 70 $rs = $core->blog->getPosts($params); 71 72 if (!$rs->isEmpty() && $rs->post_status == 1) { 73 newsletterCore::autosendNewsletter(); 74 } 68 75 } 69 76 … … 146 153 class newsletterRest 147 154 { 148 149 // select 150 public static function prepareALetter(dcCore $core,$get,$post) { 151 155 // Prepare the xml tree 156 public static function prepareALetter(dcCore $core,$get,$post) 157 { 152 158 if (empty($get['letterId'])) { 153 159 throw new Exception('No letter selected'); … … 161 167 $letterTag = $nltr->getXmlLetterById(); 162 168 163 /*$params = array(); 164 $params['post_type'] = 'newsletter'; 165 $params['post_id'] = $letterId; 166 167 $post = $core->blog->getPosts($params); 168 169 if ($post->isEmpty()) 170 { 171 throw new Exception(__('This newsletter does not exist.')); 172 } 173 else 174 { 175 $post_id = $post->post_id; 176 $post_dt = date('Y-m-d H:i',strtotime($post->post_dt)); 177 $post_format = $post->post_format; 178 $post_password = $post->post_password; 179 $post_url = $post->post_url; 180 $post_lang = $post->post_lang; 181 $post_title = $post->post_title; 182 $post_excerpt = $post->post_excerpt; 183 $post_excerpt_xhtml = $post->post_excerpt_xhtml; 184 $post_content = $post->post_content; 185 $post_content_xhtml = $post->post_content_xhtml; 186 $post_status = $post->post_status; 187 $post_position = (integer) $post->post_position; 188 $post_open_comment = (boolean) $post->post_open_comment; 189 $post_open_tb = (boolean) $post->post_open_tb; 190 } 191 */ 192 193 // retrieve lists of active subscribers 169 // set status to publish 170 $status = 1; 171 $core->blog->updPostStatus((integer) $letterId,$status); 172 173 // retrieve lists of active subscribers or selected 194 174 $subscribers_up = array(); 195 $subscribers_up = newsletterCore::getlist(true); 175 176 if (empty($get['subscribersId'])) { 177 $subscribers_up = newsletterCore::getlist(true); 178 } else { 179 180 $sub_tmp=array(); 181 $sub_tmp = explode(",", $get['subscribersId']); 182 183 $params['subscriber_id'] = $sub_tmp; 184 185 $params['state'] = "enabled"; 186 $subscribers_up = newsletterCore::getSubscribers($params); 187 } 196 188 197 189 if (empty($subscribers_up)) { … … 200 192 201 193 $rsp = new xmlTag(); 202 203 194 $rsp->insertNode($letterTag); 204 195 205 196 $subscribers_up->moveStart(); 206 197 while ($subscribers_up->fetch()) { 207 //$core->blog->dcNewsletter->addError($subscribers_up->email);208 198 $subscriberTag = new xmlTag('subscriber'); 209 210 199 $subscriberTag->id=$subscribers_up->subscriber_id; 211 200 $subscriberTag->email=$subscribers_up->email; 212 213 //$subscriberTag->letter_id=$letterId; 214 //$subscriberTag->letter_title=$post_title; 215 201 216 202 $rsp->insertNode($subscriberTag); 217 203 } 218 204 return $rsp; 219 220 } 221 222 223 205 } 206 224 207 /** 225 208 * Rest send letter … … 245 228 } 246 229 247 248 249 /* p_sub_id: p_sub_id, 250 p_sub_email: p_sub_email, 251 p_letter_id: p_letter_id, 252 p_letter_subject: p_letter_subject, 253 p_letter_header: p_letter_header, 254 p_letter_footer: p_letter_footer, 255 p_letter_body: p_letter_body 256 */ 230 // define content 231 $scontent = newsletterLetter::renderingSubscriber($post['p_letter_body'], $post['p_sub_email']); 232 257 233 // send letter to user 258 234 $mail = new newsletterMail($core); 259 $mail->setMessage($post['p_sub_id'],$post['p_sub_email'],$post['p_letter_subject'],$post['p_letter_body'],'html'); 235 $mail->setMessage($post['p_sub_id'],$post['p_sub_email'],$post['p_letter_subject'],$scontent,'html'); 236 //throw new Exception('content='.$scontent); 260 237 $mail->send(); 261 238 $result = $mail->getState(); … … 268 245 } 269 246 270 /**271 * Rest send letter272 */273 public static function sendSubscriberLetter(dcCore $core,$get,$post) {274 275 /*if (empty($post['letterId'])) {276 throw new Exception('No letter selected');277 }*/278 //$core->meta = new dcMeta($core);279 //$core->newsletter = new dcNewsletter($core);280 //$redo = $core->gallery->refreshGallery($post['galId']);281 //$redo = $core->newsletter->sendLetter($post['letterId']);282 //$result = $core->newsletter->sendSubscriberLetter();283 //$result = newsletterSubscribersList::sendSubscriberLetter();284 285 $result = newsletterSubscribersList::sendSubscriberLetter($post['letterId']);286 287 288 //$redo = true;289 /*if ($redo) {290 $rsp = new xmlTag();291 $redoTag = new xmlTag('redo');292 $redoTag->value="1";293 $rsp->insertNode($redoTag);294 return $rsp;295 } else {*/296 return $result;297 //}298 }299 300 301 247 } // end class newsletterRest 302 248 ?> -
plugins/newsletter/trunk/_define.php
r1848 r1906 15 15 /* Description*/ "Manager newsletter", 16 16 /* Author */ "Benoit de Marne", 17 /* Version */ "3.7.0 dev0016",17 /* Version */ "3.7.0alpha001", 18 18 /* Permissions */ "usage,contentadmin", 19 19 /* Priority */ null -
plugins/newsletter/trunk/changelog.txt
r1848 r1906 1 1 TODO 2 NB : Liste des mots cles 3 LISTPOSTS 4 USER_DELETE 5 USER_SUSPEND 2 6 3 7 Note de dev : 8 - permettre la modification du fichier CSS depuis l'interface d'admin 4 9 - le format du message doit etre en xhtml pour l'envoi (a prevoir la transfo) 5 10 6 Part III 7 - statistiques sur les abonnés 8 - statistiques sur les newsletters 9 10 Part IV 11 - page par defaut (cf. plugin defaultpost) 12 11 -- Statistiques 12 Algo 13 before sending => initialize status = error 14 si user=enabled && status_sent=1 => error 15 si user=enabled && status_sent=0 => success 16 stockage des statistiques dans la lettre ? 17 after sending => print statistiques 18 => compte rendu lors de l'envoi 13 19 14 20 Newsletter 3.7.0 - 2009-xx-xx 15 21 =========================================================== 16 * ...17 22 * Ticket #103 : création d'une interface de saisie améliorée de la newsletter 18 23 * Gestion des newsletter dans la table post de type newsletter … … 20 25 * Ticket #163 : permettre la selection des billets dans une lettre 21 26 * Prise en compte des modifications proposées par Kozlika 22 * Parcours de la liste des abonnés en Ajax pour les envois de newsletters27 * Ticket #127, #198 : parcours de la liste des abonnés en Ajax pour les envois manuels 23 28 * Ajout d'une nouvelle librairie pour l'envoi des mails par Ajax 24 25 * in progress ... Permettre le remplacement de balises dans la newsletter 26 27 29 * Permettre le remplacement de balises dans la newsletter 30 * Mise en conformité avec l'ancien système d'envoi des lettres 31 * Ticket #274 : envoi automatique de la lettre que si le billet est à l'état publié 28 32 29 33 Newsletter 3.6.0 - 2009-10-07 -
plugins/newsletter/trunk/inc/class.dc.newsletter.php
r1848 r1906 122 122 } 123 123 124 ###############################################125 # MAILING126 ###############################################127 128 /**129 * Send the letter130 */131 public static function sendLetter($sub_email, $letter_id)132 {133 global $core;134 135 /*136 $obj_letter = new newsletterLetter($core,$letter_id);137 $letter = $obj_letter->getLetter();138 */139 140 /*$obj_letter->formattingLetter();141 $obj_letter->sending();*/142 143 /*$core->blog->dcNewsletter->addError('titre='.$letter->post_title);144 $core->blog->dcNewsletter->addError('send to user='.$sub_email);*/145 146 147 return true;148 }149 150 124 } // end class dcNewsletter 151 125 -
plugins/newsletter/trunk/inc/class.newsletter.admin.php
r1754 r1906 18 18 { 19 19 /** 20 * désinstallation duplugin20 * uninstall plugin 21 21 */ 22 22 public static function uninstall() 23 23 { 24 // suppression du schéma24 // delete schema 25 25 global $core; 26 26 try { 27 // d ésactivation duplugin27 // disable plugin 28 28 newsletterPlugin::inactivate(); 29 29 30 // suppression des paramètres par défaut30 // delete parameters 31 31 newsletterPlugin::deleteSettings(); 32 32 newsletterPlugin::delete_version(); … … 46 46 47 47 /** 48 * export du contenu du schéma48 * export the schema content 49 49 */ 50 50 public static function Export($onlyblog = true, $outfile = null) … … 55 55 $blogid = (string)$blog->id; 56 56 57 // g énérer le contenu du fichier à partir des données57 // generate the content of file from data 58 58 if (isset($outfile)) { 59 59 $filename = $outfile; … … 73 73 $elems = array(); 74 74 75 // g énération des élements de données75 // generate component 76 76 $elems[] = $datas->subscriber_id; 77 77 $elems[] = base64_encode($datas->blog_id); … … 89 89 } 90 90 91 // écrire le contenu dans le fichier91 // write in file 92 92 if(@file_put_contents($filename, $content)) { 93 93 return $msg = __('Datas exported in file').' '.$filename; … … 103 103 104 104 /** 105 * import du contenu du schéma105 * import the schema content 106 106 */ 107 107 public static function Import($onlyblog = true, $infile = null) … … 112 112 $blogid = (string)$blog->id; 113 113 114 // lire le contenu du fichier à partir des données114 // read the content of file 115 115 if (isset($infile)) 116 116 $filename = $infile; … … 122 122 } 123 123 124 // o uverture du fichier124 // open file 125 125 $fh = @fopen($filename, "r"); 126 126 if ($fh === FALSE) 127 127 throw new Exception(__('File not readable').' '.$filename); 128 128 else { 129 // boucle de lecture sur les lignes du fichier129 // loop reading lines from file 130 130 $err = false; 131 131 while (!feof($fh)) { … … 474 474 form::checkbox('f_check_notification',1,$f_check_notification). 475 475 '</p>'. 476 '</fieldset>'.477 '<fieldset id="advanced">'.478 '<legend>'.__('Content settings').'</legend>'.479 480 '<p class="field">'.481 '<label for="fautosend" class="classic">'.__('Automatic send').'</label>'.482 form::checkbox('fautosend',1,$fautosend).483 '</p>'.484 '<p class="field">'.485 '<label for="fminposts" class="classic">'.__('Minimum posts').'</label>'.486 form::field('fminposts',4,4,$fminposts).487 '</p>'.488 '<p class="field">'.489 '<label for="fmaxposts" class="classic">'.__('Maximum posts').'</label>'.490 form::field('fmaxposts',4,4,$fmaxposts).491 '</p>'.492 476 '<p class="field">'. 493 477 '<label for="f_view_content_post" class="classic">'.__('View contents posts').'</label>'. … … 497 481 '<label for="f_size_content_post" class="classic">'.__('Size contents posts').'</label>'. 498 482 form::field('f_size_content_post',4,4,$f_size_content_post). 499 '</p>'.500 '<p class="field">'.501 '<label for="f_category" class="classic">'.__('Category').'</label>'.502 form::combo('f_category',$categories,$f_category).503 '</p>'.504 '<p class="field">'.505 '<label for="f_check_subcategories" class="classic">'.__('Include sub-categories').'</label>'.506 form::checkbox('f_check_subcategories',1,$f_check_subcategories).507 483 '</p>'. 508 484 '<p class="field">'. … … 515 491 '</p>'. 516 492 '</fieldset>'. 493 494 '<fieldset id="advanced">'. 495 '<legend>'.__('Settings for auto letter').'</legend>'. 496 '<p class="field">'. 497 '<label for="fautosend" class="classic">'.__('Automatic send').'</label>'. 498 form::checkbox('fautosend',1,$fautosend). 499 '</p>'. 500 '<p class="field">'. 501 '<label for="fminposts" class="classic">'.__('Minimum posts').'</label>'. 502 form::field('fminposts',4,4,$fminposts). 503 '</p>'. 504 '<p class="field">'. 505 '<label for="fmaxposts" class="classic">'.__('Maximum posts').'</label>'. 506 form::field('fmaxposts',4,4,$fmaxposts). 507 '</p>'. 508 '<p class="field">'. 509 '<label for="f_category" class="classic">'.__('Category').'</label>'. 510 form::combo('f_category',$categories,$f_category). 511 '</p>'. 512 '<p class="field">'. 513 '<label for="f_check_subcategories" class="classic">'.__('Include sub-categories').'</label>'. 514 form::checkbox('f_check_subcategories',1,$f_check_subcategories). 515 '</p>'. 516 '</fieldset>'. 517 517 // boutons du formulaire 518 518 '<p>'. -
plugins/newsletter/trunk/inc/class.newsletter.core.php
r1754 r1906 373 373 } 374 374 375 if (!empty($params['subscriber_id'])) { 376 if (is_array($params['subscriber_id'])) { 377 array_walk($params['subscriber_id'],create_function('&$v,$k','if($v!==null){$v=(integer)$v;}')); 378 } else { 379 $params['subscriber_id'] = array((integer) $params['subscriber_id']); 380 } 381 $strReq .= 'AND N.subscriber_id '.$con->in($params['subscriber_id']); 382 } 383 375 384 if (!$count_only) 376 385 { … … 866 875 case 'newsletter': 867 876 self::prepareMessagesNewsletter($ids,$newsletter_mailing,$newsletter_settings); 877 self::insertMessageNewsletter($newsletter_mailing,$newsletter_settings); 868 878 break; 869 879 case 'confirm': … … 1013 1023 1014 1024 /** 1025 * Prepare le contenu des messages de type newsletter 1026 * Modifie l'objet newsletterMailing fourni en parametre 1027 * 1028 * @param: $ids array 1029 * @param: $newsletter_mailing newsletterMailing 1030 * 1031 * @return: boolean 1032 */ 1033 public static function insertMessageNewsletter($newsletter_mailing, newsletterSettings $newsletter_settings) 1034 { 1035 global $core; 1036 // initialisation des variables de travail 1037 $mode = $newsletter_settings->getSendMode(); 1038 $subject = text::toUTF8($newsletter_settings->getNewsletterSubject()); 1039 $minPosts = $newsletter_settings->getMinPosts(); 1040 1041 // initialisation du moteur de template 1042 self::BeforeSendmailTo($newsletter_settings->getPresentationMsg(), $newsletter_settings->getConcludingMsg()); 1043 1044 // recuperation des billets 1045 $newsletter_posts = self::getNewsletterPosts(); 1046 1047 if(count($newsletter_posts) < $minPosts) { 1048 ; 1049 } else { 1050 $body = ''; 1051 1052 // intégration dans le template des billets en génération du rendu 1053 nlTemplate::assign('posts', $newsletter_posts); 1054 1055 $body = nlTemplate::render('newsletter', $mode); 1056 1057 if($mode == 'text') { 1058 $convert = new html2text(); 1059 $convert->set_html($body); 1060 $convert->labelLinks = __('Links:'); 1061 $body = $convert->get_text(); 1062 } 1063 1064 // ajoute le message dans la liste d'envoi 1065 $old_nltr = new newsletterLetter($core); 1066 $old_nltr->insertOldLetter($subject,$body); 1067 1068 } 1069 1070 return $old_nltr->getLetterId(); 1071 } 1072 1073 /** 1015 1074 * Prepare le contenu des messages de type confirm 1016 1075 * Modifie l'objet newsletterMailing fourni en parametre -
plugins/newsletter/trunk/inc/class.newsletter.letter.php
r1848 r1906 11 11 # -- END LICENSE BLOCK ------------------------------------ 12 12 13 define("POST_TYPE","newsletter"); 14 13 15 if (!defined('DC_CONTEXT_ADMIN')) { return; } 14 16 15 17 class newsletterLetter 16 18 { 17 // Variables18 19 protected $core; 19 20 protected $blog; … … 22 23 23 24 protected $letter_subject; 24 //protected $letter_header;25 protected $letter_header; 25 26 protected $letter_body; 26 //protected $letter_footer;27 protected $letter_footer; 27 28 29 protected $post_id; 30 protected $cat_id; 31 protected $post_dt; 32 protected $post_format; 33 protected $post_password; 34 protected $post_url; 35 protected $post_lang; 36 protected $post_title; 37 protected $post_excerpt; 38 protected $post_excerpt_xhtml; 39 protected $post_content; 40 protected $post_content_xhtml; 41 protected $post_notes; 42 protected $post_status; 43 protected $post_selected; 44 protected $post_open_comment; 45 protected $post_open_tb; 46 protected $post_meta; 47 48 private static $post_type = 'newsletter'; 49 50 /** 51 * Class constructor. Sets new letter object 52 * @param dcCore $core 53 * @param $letter_id 54 */ 55 public function __construct(dcCore $core,$letter_id=null) 56 { 57 $this->core = $core; 58 $this->blog = $core->blog; 59 60 $this->meta = new dcMeta($core); 61 62 $this->init(); 63 $this->setLetterId($letter_id); 64 $this->letter_subject = ''; 65 $this->letter_header = ''; 66 $this->letter_body = ''; 67 $this->letter_footer = ''; 68 } 69 70 private function init() 71 { 72 $this->post_id = ''; 73 $this->cat_id = ''; 74 $this->post_dt = ''; 75 $this->post_format = $this->core->auth->getOption('post_format'); 76 $this->post_password = ''; 77 $this->post_url = ''; 78 $this->post_lang = $this->core->auth->getInfo('user_lang'); 79 $this->post_title = ''; 80 $this->post_excerpt = ''; 81 $this->post_excerpt_xhtml = ''; 82 $this->post_content = ''; 83 $this->post_content_xhtml = ''; 84 $this->post_notes = ''; 85 $this->post_status = $this->core->auth->getInfo('user_post_status'); 86 $this->post_selected = false; 87 $this->post_open_comment = false; 88 $this->post_open_tb = false; 89 90 $this->post_media = array(); 91 $this->post_meta = array(); 92 } 28 93 29 94 /** 30 * Class constructor. Sets new letter object 31 * 32 * @param: $core dcCore 95 * Set id of the letter 96 * @param $letter_id 33 97 */ 34 public function __construct(dcCore $core,$letter_id=null)35 {36 $this->core = $core;37 $this->blog = $core->blog;38 39 $this->meta = new dcMeta($core);40 41 $this->setLetterId($letter_id);42 }43 44 98 public function setLetterId($letter_id=null) 45 99 { … … 49 103 } 50 104 105 /** 106 * Get id of the letter 107 * @return integer 108 */ 51 109 public function getLetterId() 52 110 { 53 return $this->letter_id; 54 } 55 56 public function getLetter() 57 { 58 global $core; 59 60 $params['post_type'] = 'newsletter'; 111 return (integer) $this->letter_id; 112 } 113 114 /** 115 * Get the ressource mysql result for the current letter 116 * @return mysql result 117 */ 118 public function getRSLetter() 119 { 120 $params['post_type'] = $this->post_type; 61 121 $params['post_id'] = $this->letter_id; 62 122 63 $letter = $core->blog->getPosts($params); 64 65 if ($letter->isEmpty()) 66 { 67 $core->error->add(__('This letter does not exist.')); 68 } 69 else 70 { 71 return $letter; 72 /* 73 $post_id = $post->post_id; 74 $cat_id = $post->cat_id; 75 $post_dt = date('Y-m-d H:i',strtotime($post->post_dt)); 76 $post_format = $post->post_format; 77 $post_password = $post->post_password; 78 $post_url = $post->post_url; 79 $post_lang = $post->post_lang; 80 $post_title = $post->post_title; 81 $post_excerpt = $post->post_excerpt; 82 $post_excerpt_xhtml = $post->post_excerpt_xhtml; 83 $post_content = $post->post_content; 84 $post_content_xhtml = $post->post_content_xhtml; 85 $post_notes = $post->post_notes; 86 $post_status = $post->post_status; 87 $post_selected = (boolean) $post->post_selected; 88 $post_open_comment = (boolean) $post->post_open_comment; 89 $post_open_tb = (boolean) $post->post_open_tb; 90 $post_meta = $post->post_meta; 91 */ 92 } 93 } 94 95 96 public function getLetterToSend(){ 97 98 99 100 } 101 123 $rs_letter = $this->core->blog->getPosts($params); 124 125 if ($rs_letter->isEmpty()) { 126 $this->core->error->add(__('This letter does not exist.')); 127 } else { 128 return $rs_letter; 129 } 130 } 102 131 103 132 public function displayTabLetter() … … 141 170 $next_link = $prev_link = $next_headlink = $prev_headlink = null; 142 171 143 # If user can't publish 172 /* 173 # If user can't publish 144 174 if (!$can_publish) { 145 175 $post_status = -2; 146 176 } 177 //*/ 178 # Default value 179 $post_status = -2; 147 180 148 181 # Status combo … … 625 658 } 626 659 627 /** 628 */ 629 public function getPostsLetter($letter_id) 630 { 631 global $core; 632 633 $meta = new dcMeta($core); 660 public function getPostsLetter() 661 { 662 $meta = new dcMeta($this->core); 663 $newsletter_settings = new newsletterSettings($this->core); 634 664 635 665 $params=array(); 636 666 $params['no_content'] = true; 637 667 638 $params['meta_id'] = $letter_id;668 $params['meta_id'] = (integer) $this->letter_id; 639 669 $params['meta_type'] = 'letter_post'; 640 670 $params['post_type'] = ''; 641 671 642 672 $rs = $meta->getPostsByMeta($params); 643 return $rs; 673 unset($params); 674 675 // paramétrage de la récupération des billets 676 $params = array(); 677 678 while ($rs->fetch()) { 679 $params['post_id'][] = $rs->post_id; 680 } 681 682 // sélection du contenu 683 $params['no_content'] = ($newsletter_settings->getViewContentPost() ? false : true); 684 // sélection des billets 685 $params['post_type'] = 'post'; 686 // uniquement les billets publiés, sans mot de passe 687 $params['post_status'] = 1; 688 // sans mot de passe 689 $params['sql'] = ' AND P.post_password IS NULL'; 690 691 // définition du tris des enregistrements et filtrage dans le temps 692 $params['order'] = ' P.'.$newsletter_settings->getOrderDate().' DESC'; 693 694 // récupération des billets 695 $rs = $this->blog->getPosts($params, false); 696 697 //throw new Exception('value is ='.$rs->count()); 698 699 return($rs->isEmpty()?null:$rs); 644 700 } 645 701 … … 661 717 $this->core->error->add($link_id.',letter_post,'.$letter_id); 662 718 } 719 720 721 722 ############################################### 723 # ACTIONS 724 ############################################### 663 725 664 726 /** … … 728 790 } 729 791 730 /** 731 * Display tab to select associate posts with letter 732 */ 733 public function displayTabLetterAssociate() 734 { 735 global $core; 736 737 $redir_url = 'plugin.php?p=newsletter&m=letter'; 738 739 $letter_id = !empty($_GET['post_id']) ? (integer) $_GET['post_id'] : null; 740 741 if ($letter_id) { 742 $post = $core->blog->getPosts(array('post_id'=>$letter_id,'post_type'=>'')); 743 if ($post->isEmpty()) { 744 $letter_id = null; 745 } 746 $post_title = $post->post_title; 747 $post_type = $post->post_type; 748 unset($post); 749 750 echo 751 '<fieldset>'. 752 '<legend>'.__('Associate posts for this letter').'</legend>'; 753 echo '<h3>'.__('Title of letter :').' '.$post_title.'</h3>'; 754 755 self::displayPostsList($letter_id); 756 757 echo '</fieldset>'; 758 echo '<p><a class="back" href="'.html::escapeURL($redir_url).'&id='.$letter_id.'">'.__('back').'</a></p>'; 759 760 } else { 761 echo 762 '<fieldset>'. 763 '<legend>'.__('Associate posts for this letter').'</legend>'. 764 'no letter active'. 765 '</fieldset>'; 766 echo '<p><a class="back" href="'.html::escapeURL('plugin.php?p=newsletter&m=letters').'">'.__('back').'</a></p>'; 767 } 768 } 769 770 771 /** 772 * Display list of posts for associate 773 */ 774 private static function displayPostsList($letter_id = null) 775 { 776 global $core; 777 778 # Getting categories 779 try { 780 $categories = $core->blog->getCategories(array('post_type'=>'post')); 781 } catch (Exception $e) { 782 $core->error->add($e->getMessage()); 783 } 784 785 # Getting authors 786 try { 787 $users = $core->blog->getPostsUsers(); 788 } catch (Exception $e) { 789 $core->error->add($e->getMessage()); 790 } 791 792 # Getting dates 793 try { 794 $dates = $core->blog->getDates(array('type'=>'month')); 795 } catch (Exception $e) { 796 $core->error->add($e->getMessage()); 797 } 798 799 # Getting langs 800 try { 801 $langs = $core->blog->getLangs(); 802 } catch (Exception $e) { 803 $core->error->add($e->getMessage()); 804 } 805 806 # Creating filter combo boxes 807 if (!$core->error->flag()) 808 { 809 # Filter form we'll put in html_block 810 $users_combo = $categories_combo = array(); 811 $users_combo['-'] = $categories_combo['-'] = ''; 812 while ($users->fetch()) 813 { 814 $user_cn = dcUtils::getUserCN($users->user_id,$users->user_name, 815 $users->user_firstname,$users->user_displayname); 816 817 if ($user_cn != $users->user_id) { 818 $user_cn .= ' ('.$users->user_id.')'; 819 } 820 821 $users_combo[$user_cn] = $users->user_id; 822 } 823 824 while ($categories->fetch()) { 825 $categories_combo[str_repeat(' ',$categories->level-1).'• '. 826 html::escapeHTML($categories->cat_title). 827 ' ('.$categories->nb_post.')'] = $categories->cat_id; 828 } 829 830 $status_combo = array( 831 '-' => '' 832 ); 833 foreach ($core->blog->getAllPostStatus() as $k => $v) { 834 $status_combo[$v] = (string) $k; 835 } 836 837 $selected_combo = array( 838 '-' => '', 839 __('selected') => '1', 840 __('not selected') => '0' 841 ); 842 843 # Months array 844 $dt_m_combo['-'] = ''; 845 while ($dates->fetch()) { 846 $dt_m_combo[dt::str('%B %Y',$dates->ts())] = $dates->year().$dates->month(); 847 } 848 849 $lang_combo['-'] = ''; 850 while ($langs->fetch()) { 851 $lang_combo[$langs->post_lang] = $langs->post_lang; 852 } 853 854 $sortby_combo = array( 855 __('Date') => 'post_dt', 856 __('Title') => 'post_title', 857 __('Category') => 'cat_title', 858 __('Author') => 'user_id', 859 __('Status') => 'post_status', 860 __('Selected') => 'post_selected' 861 ); 862 863 $order_combo = array( 864 __('Descending') => 'desc', 865 __('Ascending') => 'asc' 866 ); 867 } 868 869 # Actions combo box 870 $combo_action = array(); 871 872 if ($core->auth->check('admin',$core->blog->id)) { 873 $combo_action[__('associate')] = 'associate'; 874 } 875 876 # --BEHAVIOR-- adminPostsActionsCombo 877 $core->callBehavior('adminLetterActionsCombo',array(&$combo_action)); 878 879 /* Get posts 880 -------------------------------------------------------- */ 881 $user_id = !empty($_GET['user_id']) ? $_GET['user_id'] : ''; 882 $cat_id = !empty($_GET['cat_id']) ? $_GET['cat_id'] : ''; 883 $status = isset($_GET['status']) ? $_GET['status'] : ''; 884 $selected = isset($_GET['selected']) ? $_GET['selected'] : ''; 885 $month = !empty($_GET['month']) ? $_GET['month'] : ''; 886 $lang = !empty($_GET['lang']) ? $_GET['lang'] : ''; 887 $sortby = !empty($_GET['sortby']) ? $_GET['sortby'] : 'post_dt'; 888 $order = !empty($_GET['order']) ? $_GET['order'] : 'desc'; 889 890 $show_filters = false; 891 892 $page = !empty($_GET['page']) ? (integer) $_GET['page'] : 1; 893 $nb_per_page = 30; 894 895 if (!empty($_GET['nb']) && (integer) $_GET['nb'] > 0) { 896 if ($nb_per_page != $_GET['nb']) { 897 $show_filters = true; 898 } 899 $nb_per_page = (integer) $_GET['nb']; 900 } 901 902 $params['limit'] = array((($page-1)*$nb_per_page),$nb_per_page); 903 $params['no_content'] = true; 904 905 # - User filter 906 if ($user_id !== '' && in_array($user_id,$users_combo)) { 907 $params['user_id'] = $user_id; 908 $show_filters = true; 909 } 910 911 # - Categories filter 912 if ($cat_id !== '' && in_array($cat_id,$categories_combo)) { 913 $params['cat_id'] = $cat_id; 914 $show_filters = true; 915 } 916 917 # - Status filter 918 if ($status !== '' && in_array($status,$status_combo)) { 919 $params['post_status'] = $status; 920 $show_filters = true; 921 } 922 923 # - Selected filter 924 if ($selected !== '' && in_array($selected,$selected_combo)) { 925 $params['post_selected'] = $selected; 926 $show_filters = true; 927 } 928 929 # - Month filter 930 if ($month !== '' && in_array($month,$dt_m_combo)) { 931 $params['post_month'] = substr($month,4,2); 932 $params['post_year'] = substr($month,0,4); 933 $show_filters = true; 934 } 935 936 # - Lang filter 937 if ($lang !== '' && in_array($lang,$lang_combo)) { 938 $params['post_lang'] = $lang; 939 $show_filters = true; 940 } 941 942 # - Sortby and order filter 943 if ($sortby !== '' && in_array($sortby,$sortby_combo)) { 944 if ($order !== '' && in_array($order,$order_combo)) { 945 $params['order'] = $sortby.' '.$order; 946 } 947 948 if ($sortby != 'post_dt' || $order != 'desc') { 949 $show_filters = true; 950 } 951 } 952 953 # Get posts 954 try { 955 $posts = $core->blog->getPosts($params); 956 $counter = $core->blog->getPosts($params,true); 957 $post_list = new adminPostList($core,$posts,$counter->f(0)); 958 } catch (Exception $e) { 959 $core->error->add($e->getMessage()); 960 } 961 962 if (!$core->error->flag()) 963 { 964 if (!$show_filters) { 965 echo '<p><a id="filter-control" class="form-control" href="#">'. 966 __('Filters').'</a></p>'; 967 } 968 969 echo 970 '<form action="plugin.php" method="get" id="filters-form">'. 971 //'<form action="posts.php" method="get" id="filters-form">'. 972 973 974 '<fieldset><legend>'.__('Filters').'</legend>'. 975 '<div class="three-cols">'. 976 '<div class="col">'. 977 '<label>'.__('Author:'). 978 form::combo('user_id',$users_combo,$user_id).'</label> '. 979 '<label>'.__('Category:'). 980 form::combo('cat_id',$categories_combo,$cat_id).'</label> '. 981 '<label>'.__('Status:'). 982 form::combo('status',$status_combo,$status).'</label> '. 983 '</div>'. 984 985 '<div class="col">'. 986 '<label>'.__('Selected:'). 987 form::combo('selected',$selected_combo,$selected).'</label> '. 988 '<label>'.__('Month:'). 989 form::combo('month',$dt_m_combo,$month).'</label> '. 990 '<label>'.__('Lang:'). 991 form::combo('lang',$lang_combo,$lang).'</label> '. 992 '</div>'. 993 994 '<div class="col">'. 995 '<p><label>'.__('Order by:'). 996 form::combo('sortby',$sortby_combo,$sortby).'</label> '. 997 '<label>'.__('Sort:'). 998 form::combo('order',$order_combo,$order).'</label></p>'. 999 '<p><label class="classic">'. form::field('nb',3,3,$nb_per_page).' '. 1000 __('Entries per page').'</label> '. 1001 '<input type="hidden" name="p" value="'.newsletterPlugin::pname().'" />'. 1002 '<input type="hidden" name="m" value="letter_associate" />'. 1003 '<input type="hidden" name="post_id" value='.$letter_id.' />'. 1004 '<input type="submit" value="'.__('filter').'" /></p>'. 1005 '</div>'. 1006 '</div>'. 1007 '<br class="clear" />'. //Opera sucks 1008 '</fieldset>'. 1009 '</form>'; 1010 1011 # Show posts 1012 $post_list->display($page,$nb_per_page, 1013 '<form action="plugin.php?p=newsletter&m=letter" method="post" id="letter_associate">'. 1014 1015 '%s'. 1016 1017 '<div class="two-cols">'. 1018 '<p class="col checkboxes-helpers"></p>'. 1019 1020 '<p class="col right">'.__('Selected entries action:').' '. 1021 form::combo('action',$combo_action). 1022 '<input type="submit" value="'.__('ok').'" /></p>'. 1023 1024 form::hidden(array('m'),'letter'). 1025 form::hidden(array('p'),newsletterPlugin::pname()). 1026 form::hidden(array('id'),$letter_id). 1027 $core->formNonce(). 1028 '</div>'. 1029 '</form>' 1030 ); 1031 } 1032 } 1033 792 ############################################### 793 # FORMATTING LETTER FOR MAILING 794 ############################################### 795 796 public static function renderingSubscriber($scontent, $sub_email) 797 { 798 //$newsletter_settings = new newsletterSettings($this->core); 799 800 /* Remplacement des liens pour les users */ 801 // remplace USER_DELETE par l'url correspondante 802 $patterns[0] = '/USER_DELETE/'; 803 $replacements[0] = newsletterCore::url('disable/'.newsletterTools::base64_url_encode($sub_email)); 804 $patterns[1] = '/USER_SUSPEND/'; 805 $replacements[1] = newsletterCore::url('suspend/'.newsletterTools::base64_url_encode($sub_email)); 806 807 /* chaine initiale */ 808 $count = 0; 809 $scontent = preg_replace($patterns, $replacements, $scontent, 1, $count); 810 811 return $scontent; 812 } 813 814 public function letter_style() { 815 $css_style = '<style type="text/css">'; 816 $css_style .= 'p{'; 817 $css_style .= 'color: #943f3b;'; 818 $css_style .= 'font: 1.0em Verdana, sans-serif;'; 819 $css_style .= 'margin:0 0 20px 0; padding:10px;'; 820 $css_style .= '}'; 821 $css_style .= 'a:link { color:#33cc33; text-decoration:none; outline: none; }'; 822 $css_style .= '</style>'; 823 824 return $css_style; 825 } 826 1034 827 public function letter_header($title) { 828 1035 829 $res = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'; 1036 830 $res .= '<html>'; … … 1039 833 $res .= '<meta name="MSSmartTagsPreventParsing" content="TRUE" />'; 1040 834 $res .= '<title>'.$title.'</title>'; 835 $res .= $this->letter_style(); 1041 836 $res .= '</head>'; 1042 837 $res .= '<body>'; … … 1051 846 1052 847 1053 public function rendering($body = null) { 1054 848 /** 849 * Replace keywords 850 * @param String $scontent 851 * @return String 852 */ 853 public function rendering($scontent = null) 854 { 855 $newsletter_settings = new newsletterSettings($this->core); 856 857 $format = ''; 858 if (!empty($attr['format'])) { 859 $format = addslashes($attr['format']); 860 } 861 862 /* Preparation de la liste des billets associes */ 863 $rs_attach_posts = $this->getPostsLetter(); 864 865 if (!$rs_attach_posts->isEmpty()) 866 { 867 $replacements[0]= ''; 868 while ($rs_attach_posts->fetch()) 869 { 870 $replacements[0] .= '<p>'; 871 $replacements[0] .= '<b><a href="'.$rs_attach_posts->getURL().'">'.$rs_attach_posts->post_title.'</a></b><br/>'; 872 $replacements[0] .= '('.$rs_attach_posts->getDate($format).' '.__('by').' '.$rs_attach_posts->getAuthorCN().')<br/>'; 873 $replacements[0] .= html::escapeHTML(newsletterTools::cutString(html::decodeEntities(html::clean($rs_attach_posts->getExcerpt().$rs_attach_posts->getContent())),$newsletter_settings->getSizeContentPost())).'<br/>'; 874 $replacements[0] .= '</p>'; 875 } 876 } 877 878 /* Liste des chaines a remplacer */ 1055 879 $patterns[0] = '/LISTPOSTS/'; 1056 $replacements[0] = 'liste des billets'; 1057 1058 $scontent=$body; 1059 880 //$replacements[0] = 'liste des billets'; 881 882 // Lancement du traitement 1060 883 $count = 0; 1061 884 $scontent = preg_replace($patterns, $replacements, $scontent, 1, $count); … … 1066 889 * 2 - formatte les champs de la letter pour l'envoi 1067 890 * 3 - creation de l'arbre xml correspondant 891 */ 892 893 894 /** 895 * - define the letter's content 896 * - format the letter 897 * - create the XML tree corresponding to the newsletter 898 * @return xmlTag 1068 899 */ 1069 900 public function getXmlLetterById() … … 1086 917 // formatte les champs de la letter pour l'envoi 1087 918 $subject=text::toUTF8($rs->post_title); 1088 $header=self::letter_header($rs->post_title); 1089 $footer=self::letter_footer(); 1090 $body=self::rendering($rs->post_content); 919 $header=$this->letter_header($rs->post_title); 920 $footer=$this->letter_footer(); 921 //$footer=self::letter_footer(); 922 $body=$this->rendering($rs->post_content); 1091 923 $body=text::toUTF8($body); 1092 924 … … 1095 927 $rsp->letter_id = $rs->post_id; 1096 928 1097 //$rsp->letter_subject = $subject;1098 929 $rsp->letter_subject($subject); 1099 930 $rsp->letter_header($header); … … 1149 980 return $rsp; 1150 981 } 1151 982 983 /** 984 * Display tab to select associate posts with letter 985 */ 986 public function displayTabLetterAssociate() 987 { 988 global $core; 989 990 $redir_url = 'plugin.php?p=newsletter&m=letter'; 991 992 $letter_id = !empty($_GET['post_id']) ? (integer) $_GET['post_id'] : null; 993 994 if ($letter_id) { 995 $post = $core->blog->getPosts(array('post_id'=>$letter_id,'post_type'=>'')); 996 if ($post->isEmpty()) { 997 $letter_id = null; 998 } 999 $post_title = $post->post_title; 1000 $post_type = $post->post_type; 1001 unset($post); 1002 1003 echo 1004 '<fieldset>'. 1005 '<legend>'.__('Associate posts for this letter').'</legend>'; 1006 echo '<h3>'.__('Title of letter :').' '.$post_title.'</h3>'; 1007 1008 self::displayPostsList($letter_id); 1009 1010 echo '</fieldset>'; 1011 echo '<p><a class="back" href="'.html::escapeURL($redir_url).'&id='.$letter_id.'">'.__('back').'</a></p>'; 1012 1013 } else { 1014 echo 1015 '<fieldset>'. 1016 '<legend>'.__('Associate posts for this letter').'</legend>'. 1017 'no letter active'. 1018 '</fieldset>'; 1019 echo '<p><a class="back" href="'.html::escapeURL('plugin.php?p=newsletter&m=letters').'">'.__('back').'</a></p>'; 1020 } 1021 } 1022 1023 1024 /** 1025 * Display list of posts for associate 1026 */ 1027 private static function displayPostsList($letter_id = null) 1028 { 1029 global $core; 1030 1031 # Getting categories 1032 try { 1033 $categories = $core->blog->getCategories(array('post_type'=>'post')); 1034 } catch (Exception $e) { 1035 $core->error->add($e->getMessage()); 1036 } 1037 1038 # Getting authors 1039 try { 1040 $users = $core->blog->getPostsUsers(); 1041 } catch (Exception $e) { 1042 $core->error->add($e->getMessage()); 1043 } 1044 1045 # Getting dates 1046 try { 1047 $dates = $core->blog->getDates(array('type'=>'month')); 1048 } catch (Exception $e) { 1049 $core->error->add($e->getMessage()); 1050 } 1051 1052 # Getting langs 1053 try { 1054 $langs = $core->blog->getLangs(); 1055 } catch (Exception $e) { 1056 $core->error->add($e->getMessage()); 1057 } 1058 1059 # Creating filter combo boxes 1060 if (!$core->error->flag()) 1061 { 1062 # Filter form we'll put in html_block 1063 $users_combo = $categories_combo = array(); 1064 $users_combo['-'] = $categories_combo['-'] = ''; 1065 while ($users->fetch()) 1066 { 1067 $user_cn = dcUtils::getUserCN($users->user_id,$users->user_name, 1068 $users->user_firstname,$users->user_displayname); 1069 1070 if ($user_cn != $users->user_id) { 1071 $user_cn .= ' ('.$users->user_id.')'; 1072 } 1073 1074 $users_combo[$user_cn] = $users->user_id; 1075 } 1076 1077 while ($categories->fetch()) { 1078 $categories_combo[str_repeat(' ',$categories->level-1).'• '. 1079 html::escapeHTML($categories->cat_title). 1080 ' ('.$categories->nb_post.')'] = $categories->cat_id; 1081 } 1082 1083 $status_combo = array( 1084 '-' => '' 1085 ); 1086 foreach ($core->blog->getAllPostStatus() as $k => $v) { 1087 $status_combo[$v] = (string) $k; 1088 } 1089 1090 $selected_combo = array( 1091 '-' => '', 1092 __('selected') => '1', 1093 __('not selected') => '0' 1094 ); 1095 1096 # Months array 1097 $dt_m_combo['-'] = ''; 1098 while ($dates->fetch()) { 1099 $dt_m_combo[dt::str('%B %Y',$dates->ts())] = $dates->year().$dates->month(); 1100 } 1101 1102 $lang_combo['-'] = ''; 1103 while ($langs->fetch()) { 1104 $lang_combo[$langs->post_lang] = $langs->post_lang; 1105 } 1106 1107 $sortby_combo = array( 1108 __('Date') => 'post_dt', 1109 __('Title') => 'post_title', 1110 __('Category') => 'cat_title', 1111 __('Author') => 'user_id', 1112 __('Status') => 'post_status', 1113 __('Selected') => 'post_selected' 1114 ); 1115 1116 $order_combo = array( 1117 __('Descending') => 'desc', 1118 __('Ascending') => 'asc' 1119 ); 1120 } 1121 1122 # Actions combo box 1123 $combo_action = array(); 1124 1125 if ($core->auth->check('admin',$core->blog->id)) { 1126 $combo_action[__('associate')] = 'associate'; 1127 } 1128 1129 # --BEHAVIOR-- adminPostsActionsCombo 1130 $core->callBehavior('adminLetterActionsCombo',array(&$combo_action)); 1131 1132 /* Get posts 1133 -------------------------------------------------------- */ 1134 $user_id = !empty($_GET['user_id']) ? $_GET['user_id'] : ''; 1135 $cat_id = !empty($_GET['cat_id']) ? $_GET['cat_id'] : ''; 1136 $status = isset($_GET['status']) ? $_GET['status'] : ''; 1137 $selected = isset($_GET['selected']) ? $_GET['selected'] : ''; 1138 $month = !empty($_GET['month']) ? $_GET['month'] : ''; 1139 $lang = !empty($_GET['lang']) ? $_GET['lang'] : ''; 1140 $sortby = !empty($_GET['sortby']) ? $_GET['sortby'] : 'post_dt'; 1141 $order = !empty($_GET['order']) ? $_GET['order'] : 'desc'; 1142 1143 $show_filters = false; 1144 1145 $page = !empty($_GET['page']) ? (integer) $_GET['page'] : 1; 1146 $nb_per_page = 30; 1147 1148 if (!empty($_GET['nb']) && (integer) $_GET['nb'] > 0) { 1149 if ($nb_per_page != $_GET['nb']) { 1150 $show_filters = true; 1151 } 1152 $nb_per_page = (integer) $_GET['nb']; 1153 } 1154 1155 $params['limit'] = array((($page-1)*$nb_per_page),$nb_per_page); 1156 $params['no_content'] = true; 1157 1158 # - User filter 1159 if ($user_id !== '' && in_array($user_id,$users_combo)) { 1160 $params['user_id'] = $user_id; 1161 $show_filters = true; 1162 } 1163 1164 # - Categories filter 1165 if ($cat_id !== '' && in_array($cat_id,$categories_combo)) { 1166 $params['cat_id'] = $cat_id; 1167 $show_filters = true; 1168 } 1169 1170 # - Status filter 1171 if ($status !== '' && in_array($status,$status_combo)) { 1172 $params['post_status'] = $status; 1173 $show_filters = true; 1174 } 1175 1176 # - Selected filter 1177 if ($selected !== '' && in_array($selected,$selected_combo)) { 1178 $params['post_selected'] = $selected; 1179 $show_filters = true; 1180 } 1181 1182 # - Month filter 1183 if ($month !== '' && in_array($month,$dt_m_combo)) { 1184 $params['post_month'] = substr($month,4,2); 1185 $params['post_year'] = substr($month,0,4); 1186 $show_filters = true; 1187 } 1188 1189 # - Lang filter 1190 if ($lang !== '' && in_array($lang,$lang_combo)) { 1191 $params['post_lang'] = $lang; 1192 $show_filters = true; 1193 } 1194 1195 # - Sortby and order filter 1196 if ($sortby !== '' && in_array($sortby,$sortby_combo)) { 1197 if ($order !== '' && in_array($order,$order_combo)) { 1198 $params['order'] = $sortby.' '.$order; 1199 } 1200 1201 if ($sortby != 'post_dt' || $order != 'desc') { 1202 $show_filters = true; 1203 } 1204 } 1205 1206 # Get posts 1207 try { 1208 $posts = $core->blog->getPosts($params); 1209 $counter = $core->blog->getPosts($params,true); 1210 $post_list = new adminPostList($core,$posts,$counter->f(0)); 1211 } catch (Exception $e) { 1212 $core->error->add($e->getMessage()); 1213 } 1214 1215 if (!$core->error->flag()) 1216 { 1217 if (!$show_filters) { 1218 echo '<p><a id="filter-control" class="form-control" href="#">'. 1219 __('Filters').'</a></p>'; 1220 } 1221 1222 echo 1223 '<form action="plugin.php" method="get" id="filters-form">'. 1224 //'<form action="posts.php" method="get" id="filters-form">'. 1225 1226 1227 '<fieldset><legend>'.__('Filters').'</legend>'. 1228 '<div class="three-cols">'. 1229 '<div class="col">'. 1230 '<label>'.__('Author:'). 1231 form::combo('user_id',$users_combo,$user_id).'</label> '. 1232 '<label>'.__('Category:'). 1233 form::combo('cat_id',$categories_combo,$cat_id).'</label> '. 1234 '<label>'.__('Status:'). 1235 form::combo('status',$status_combo,$status).'</label> '. 1236 '</div>'. 1237 1238 '<div class="col">'. 1239 '<label>'.__('Selected:'). 1240 form::combo('selected',$selected_combo,$selected).'</label> '. 1241 '<label>'.__('Month:'). 1242 form::combo('month',$dt_m_combo,$month).'</label> '. 1243 '<label>'.__('Lang:'). 1244 form::combo('lang',$lang_combo,$lang).'</label> '. 1245 '</div>'. 1246 1247 '<div class="col">'. 1248 '<p><label>'.__('Order by:'). 1249 form::combo('sortby',$sortby_combo,$sortby).'</label> '. 1250 '<label>'.__('Sort:'). 1251 form::combo('order',$order_combo,$order).'</label></p>'. 1252 '<p><label class="classic">'. form::field('nb',3,3,$nb_per_page).' '. 1253 __('Entries per page').'</label> '. 1254 '<input type="hidden" name="p" value="'.newsletterPlugin::pname().'" />'. 1255 '<input type="hidden" name="m" value="letter_associate" />'. 1256 '<input type="hidden" name="post_id" value='.$letter_id.' />'. 1257 '<input type="submit" value="'.__('filter').'" /></p>'. 1258 '</div>'. 1259 '</div>'. 1260 '<br class="clear" />'. //Opera sucks 1261 '</fieldset>'. 1262 '</form>'; 1263 1264 # Show posts 1265 $post_list->display($page,$nb_per_page, 1266 '<form action="plugin.php?p=newsletter&m=letter" method="post" id="letter_associate">'. 1267 1268 '%s'. 1269 1270 '<div class="two-cols">'. 1271 '<p class="col checkboxes-helpers"></p>'. 1272 1273 '<p class="col right">'.__('Selected entries action:').' '. 1274 form::combo('action',$combo_action). 1275 '<input type="submit" value="'.__('ok').'" /></p>'. 1276 1277 form::hidden(array('m'),'letter'). 1278 form::hidden(array('p'),newsletterPlugin::pname()). 1279 form::hidden(array('id'),$letter_id). 1280 $core->formNonce(). 1281 '</div>'. 1282 '</form>' 1283 ); 1284 } 1285 } 1286 1287 public function insertOldLetter($subject,$body) 1288 { 1289 global $core; 1290 1291 # Create or update post 1292 $cur = $core->con->openCursor($core->prefix.'post'); 1293 $cur->post_type = 'newsletter'; 1294 $cur->post_title = $subject; 1295 $cur->post_content = $body; 1296 $cur->post_status = 1; 1297 1298 $cur->user_id = $core->auth->userID(); 1299 1300 try 1301 { 1302 # --BEHAVIOR-- adminBeforeLetterCreate 1303 $core->callBehavior('adminBeforeLetterCreate',$cur); 1304 1305 $return_id = $core->blog->addPost($cur); 1306 1307 # --BEHAVIOR-- adminAfterLetterCreate 1308 $core->callBehavior('adminAfterLetterCreate',$cur,$return_id); 1309 1310 //http::redirect($redir_url.'&id='.$return_id.'&crea=1'); 1311 $this->letter_id = $cur->post_id; 1312 } 1313 catch (Exception $e) 1314 { 1315 $core->error->add($e->getMessage()); 1316 } 1317 } 1318 1152 1319 } 1153 1320 -
plugins/newsletter/trunk/inc/class.newsletter.letters.php
r1848 r1906 129 129 if (!newsletterPlugin::isInstalled()) { 130 130 return; 131 } 131 } 132 132 133 133 try { … … 292 292 { 293 293 global $core; 294 294 295 295 $params = array(); 296 297 /* Get posts 298 -------------------------------------------------------- */ 299 $user_id = !empty($_POST['user_id']) ? $_POST['user_id'] : ''; 300 $cat_id = !empty($_POST['cat_id']) ? $_POST['cat_id'] : ''; 301 $status = isset($_POST['status']) ? $_POST['status'] : ''; 302 $selected = isset($_POST['selected']) ? $_POST['selected'] : ''; 303 $month = !empty($_POST['month']) ? $_POST['month'] : ''; 304 $lang = !empty($_POST['lang']) ? $_POST['lang'] : ''; 305 $sortby = !empty($_POST['sortby']) ? $_POST['sortby'] : ''; 306 $order = !empty($_POST['order']) ? $_POST['order'] : ''; 307 $page = !empty($_POST['page']) ? (integer) $_POST['page'] : 1; 308 $nb = !empty($_POST['nb']) ? trim($_POST['nb']) : 0; 296 309 297 310 /* Actions … … 305 318 } else { 306 319 $redir = 307 'posts.php?user_id='.$ _POST['user_id'].308 '&cat_id='.$ _POST['cat_id'].309 '&status='.$ _POST['status'].310 '&selected='.$ _POST['selected'].311 '&month='.$ _POST['month'].312 '&lang='.$ _POST['lang'].313 '&sortby='.$ _POST['sortby'].314 '&order='.$ _POST['order'].315 '&page='.$ _POST['page'].316 '&nb='.$ _POST['nb'];320 'posts.php?user_id='.$user_id. 321 '&cat_id='.$cat_id. 322 '&status='.$status. 323 '&selected='.$selected. 324 '&month='.$month. 325 '&lang='.$lang. 326 '&sortby='.$sortby. 327 '&order='.$order. 328 '&page='.$page. 329 '&nb='.$nb; 317 330 } 318 331 … … 402 415 $core->error->add($e->getMessage()); 403 416 } 404 } elseif ($action == 'send' && $core->auth->check('admin',$core->blog->id)) { 417 } elseif (($action == 'send' || $action == 'send_old') 418 && $core->auth->check('admin',$core->blog->id)) { 405 419 echo '<fieldset>'; 406 420 echo '<legend>'.__('Send letters').'</legend>'; … … 425 439 } else { 426 440 $hidden_fields .= 427 form::hidden(array('user_id'),$ _POST['user_id']).428 form::hidden(array('cat_id'),$ _POST['cat_id']).429 form::hidden(array('status'),$ _POST['status']).430 form::hidden(array('selected'),$ _POST['selected']).431 form::hidden(array('month'),$ _POST['month']).432 form::hidden(array('lang'),$ _POST['lang']).433 form::hidden(array('sortby'),$ _POST['sortby']).434 form::hidden(array('order'),$ _POST['order']).435 form::hidden(array('page'),$ _POST['page']).436 form::hidden(array('nb'),$ _POST['nb']);441 form::hidden(array('user_id'),$user_id). 442 form::hidden(array('cat_id'),$cat_id). 443 form::hidden(array('status'),$status). 444 form::hidden(array('selected'),$selected). 445 form::hidden(array('month'),$month). 446 form::hidden(array('lang'),$lang). 447 form::hidden(array('sortby'),$sortby). 448 form::hidden(array('order'),$order). 449 form::hidden(array('page'),$page). 450 form::hidden(array('nb'),$nb); 437 451 } 438 452 … … 443 457 # --BEHAVIOR-- adminPostsActionsContent 444 458 $core->callBehavior('adminPostsActionsContent',$core,$action,$hidden_fields); 445 446 459 447 460 if ($action == 'author' && $core->auth->check('admin',$core->blog->id)) { -
plugins/newsletter/trunk/inc/class.newsletter.settings.php
r1754 r1906 689 689 */ 690 690 public function getNewsletterSubject() 691 { 692 return (string)$this->getParameter('newsletter_subject'); 691 { 692 $time = time() + dt::getTimeOffset($this->core->blog->settings->blog_timezone); 693 $format = $this->core->blog->settings->date_format; 694 $date_sent = dt::str( 695 $format, 696 $time 697 ); 698 return (string)$this->getParameter('newsletter_subject').' du '.$date_sent; 693 699 } 694 700 -
plugins/newsletter/trunk/inc/class.newsletter.subscribers.php
r1754 r1906 310 310 $params = array(); 311 311 312 # Getting letters 313 try { 314 $params = array( 315 'post_type' => 'newsletter', 316 'post_status' => 1, 317 ); 318 319 $rs_letters = $core->blog->getPosts($params); 320 $counter = $core->blog->getPosts($params,true); 321 } catch (Exception $e) { 322 $core->error->add($e->getMessage()); 323 } 324 325 $letters_combo = array(); 326 $letters_combo['-'] = ''; 327 328 while ($rs_letters->fetch()) { 329 $letters_combo[html::escapeHTML($rs_letters->post_title).' ('.$rs_letters->post_id.')'] = $rs_letters->post_id; 330 } 331 312 332 /* Actions 313 333 -------------------------------------------------------- */ 314 334 if (!empty($_POST['op']) && !empty($_POST['subscriber'])) 315 335 { 316 $entries = $_POST['subscriber'];336 //$entries = $_POST['subscriber']; 317 337 $action = $_POST['op']; 318 319 foreach ($entries as $k => $v) { 320 $entries[$k] = (integer) $v; 321 } 322 323 if ($action == 'send' && $core->auth->check('admin',$core->blog->id)) 324 { 325 echo 326 '<fieldset>'. 327 '<legend>'.__('Send letter').'</legend>'; 328 329 echo '<p><input type="button" id="cancel" value="'.__('cancel').'" /></p>'; 330 echo '<h3>'.__('Actions').'</h3>'; 331 echo '<table id="process"><tr class="keepme"><th>ID</th><th>Action</th><th>Status</th></tr></table>'; 332 333 echo '</fieldset>'; 334 335 echo '<p><a class="back" href="plugin.php?p=newsletter&m=subscribers">'.__('back').'</a></p>'; 336 } 337 338 339 } 338 339 if ($action == 'send' && $core->auth->check('admin',$core->blog->id)) { 340 341 $entries = $_POST['subscriber']; 342 foreach ($entries as $k => $v) { 343 344 // check if users are enabled 345 if ($subscriber = newsletterCore::get((integer) $v)){ 346 if ($subscriber->state == 'enabled') { 347 $subscribers_id[$k] = (integer) $v; 348 } 349 } 350 } 351 352 //$core->error->add('Launch lettersActions on '.count($subscribers_id)); 353 354 $hidden_fields = ''; 355 foreach ($subscribers_id as $k => $v) { 356 $hidden_fields .= form::hidden(array('subscribers_id[]'),(integer) $v); 357 } 358 359 $letters_id = array(); 360 echo '<fieldset>'; 361 echo '<legend>'.__('Select letter to send').'</legend>'; 362 echo '<form action="plugin.php?p=newsletter&m=letters" method="post">'; 363 364 echo 365 '<p><label class="classic">'.__('Letter:').' '. 366 form::combo(array('letters_id[]'),$letters_combo,$letters_id). 367 '</label> '. 368 '</p>'; 369 370 echo 371 $hidden_fields. 372 $core->formNonce(). 373 form::hidden(array('action'),'send'). 374 form::hidden(array('m'),'letters'). 375 form::hidden(array('p'),newsletterPlugin::pname()). 376 form::hidden(array('post_type'),'newsletter'). 377 form::hidden(array('redir'),html::escapeHTML($_SERVER['REQUEST_URI'])). 378 '<input type="submit" value="'.__('send').'" /></p>'; 379 echo '</form>'; 380 echo '</fieldset>'; 381 382 echo '<fieldset>'; 383 echo '<legend>'.__('Send auto letter').'</legend>'; 384 echo '<form action="plugin.php?p=newsletter&m=letters" method="post">'; 385 386 echo 387 $hidden_fields. 388 $core->formNonce(). 389 form::hidden(array('action'),'send_old'). 390 form::hidden(array('m'),'letters'). 391 form::hidden(array('p'),newsletterPlugin::pname()). 392 form::hidden(array('post_type'),'newsletter'). 393 form::hidden(array('redir'),html::escapeHTML($_SERVER['REQUEST_URI'])). 394 '<input type="submit" value="'.__('send').'" /></p>'; 395 396 echo '</form>'; 397 echo '</fieldset>'; 398 399 echo '<p><a class="back" href="plugin.php?p=newsletter&m=subscribers">'.__('back').'</a></p>'; 400 } 401 402 } 340 403 341 404 } 342 405 343 public static function send Letter()406 public static function sendOldLetter() 344 407 { 345 // retrieve selected letter 346 347 // prepare letter 348 349 // retrieve selected users 350 351 352 353 408 if (empty($post['userId'])) { 409 throw new Exception('No subscriber selected'); 410 } 411 412 if (empty($entries)) { 413 throw new Exception('secNo subscriber selected'); 414 } 415 416 $subscriber = $post['userId']; 417 354 418 // send letter to selected users 355 356 419 //$msg = newsletterCore::send($subscribers,'newsletter'); 357 420 358 421 //return true; -
plugins/newsletter/trunk/index.php
r1848 r1906 459 459 case 'send': 460 460 { 461 if (is_array($_POST['subscriber'])) { 461 //$core->error->add('Launch lettersActions on '.count($letters_id)); 462 463 /* 464 "var letters = [".implode(',',$letters_id)."];\n". 465 "var subscribers = [".implode(',',$subscribers_id)."];\n". 466 */ 467 /* Creation de la lettre */ 468 469 // bidouille en attendant 470 if(!empty($_POST['subscriber'])) { 471 $subscribers_id = array(); 472 $subscribers_id = $_POST['subscriber']; 473 //if (is_array($_POST['subscriber'])) { 474 462 475 $ids = array(); 463 476 foreach ($_POST['subscriber'] as $k => $v) { … … 469 482 } 470 483 } 471 472 $entries = array(); 473 $entries = $ids; 474 475 if(!empty($_POST['id'])) $id = $_POST['id']; 476 477 //$core->error->add('Launch subcribersActions on '.count($entries)); 484 485 $subscribers_id = $ids; 486 487 /* Create old newsletter to send */ 488 /*$msg = newsletterCore::send($ids,'newsletter'); 489 newsletterTools::redirection($m,$msg);*/ 490 491 //if(!empty($_POST['id'])) $id = $_POST['id']; 492 493 //$core->error->add('Launch subcribersActions on '.count($subscribers_id)); 478 494 //newsletterSubscribersList::subcribersActions(); 479 495 … … 657 673 break; 658 674 675 case 'send_old': 676 { 677 //$core->error->add('Launch lettersActions on '.count($subscribers_id)); 678 //$core->error->add('Launch lettersActions on '.count($letters_id)); 679 $subscribers_id = array(); 680 $letters_id = array(); 681 $newsletter_mailing = new newsletterMailing($core); 682 $newsletter_settings = new newsletterSettings($core); 683 $letters_id[] = newsletterCore::insertMessageNewsletter($newsletter_mailing,$newsletter_settings); 684 if(!empty($_POST['subscribers_id'])) $subscribers_id = $_POST['subscribers_id']; 685 } 686 break; 687 659 688 case 'send': 660 689 case 'author': 661 //$core->error->add('Launch lettersActions on '.count($letters_id)); 690 { 691 $subscribers_id = array(); 662 692 if(!empty($_POST['letters_id'])) $letters_id = $_POST['letters_id']; 693 if(!empty($_POST['subscribers_id'])) $subscribers_id = $_POST['subscribers_id']; 694 } 663 695 break; 664 696 … … 715 747 echo dcPage::jsPageTabs($plugin_tab); 716 748 717 } else if ($plugin_tab == 'tab_letters' && $action == 'send') { 749 } else if (($plugin_tab == 'tab_letters' || $plugin_tab == 'tab_subscribers') 750 && ($action == 'send' || $action == 'send_old')) { 718 751 echo 719 752 dcPage::jsLoad(DC_ADMIN_URL.'?pf=newsletter/js/_sequential_ajax.js'). … … 735 768 echo dcPage::jsPageTabs($plugin_tab); 736 769 737 } else if ($plugin_tab == 'tab_subscribers' && $plugin_op == 'send') {738 echo739 dcPage::jsLoad(DC_ADMIN_URL.'?pf=newsletter/js/_sequential_ajax.js').740 dcPage::jsLoad(DC_ADMIN_URL.'?pf=newsletter/js/_subscribers_actions.js');741 742 echo743 '<script type="text/javascript">'."\n".744 "//<![CDATA[\n".745 "var subscribers = [".implode(',',$entries)."];\n".746 "dotclear.msg.send_letters = '".html::escapeJS(__('Send letter'))."';\n".747 "\n//]]>\n".748 "</script>\n";749 750 echo dcPage::jsPageTabs($plugin_tab);751 752 770 } else if ($plugin_tab == 'tab_subscribers' || $plugin_tab == 'tab_letters') { 753 771 echo … … 851 869 echo '<p><a href="plugin.php?p=newsletter&m=addedit" class="multi-part">'.$edit_subscriber.'</a></p>'; 852 870 echo '<div class="multi-part" id="tab_letters" title="'.__('Letters').'">'; 853 if($action == 'author' || $action == 'send' ) {871 if($action == 'author' || $action == 'send' || $action == 'send_old') { 854 872 newsletterLettersList::lettersActions($letters_id); 855 873 } else { -
plugins/newsletter/trunk/js/_letters_actions.js
r1848 r1906 38 38 } 39 39 40 40 function statsLetter(data) { 41 var retrieve = retrieves[currentRetrieve-1]; 42 $("#"+retrieve.line_id).html('... not yet available ... '); 43 doProcess(); 44 } 45 41 46 $("input#cancel").click(function() { 42 47 cancel = true; … … 49 54 currentRetrieve=0; 50 55 nbActions=0; 51 retrieves=[] 56 retrieves=[]; 52 57 53 58 for (var i=0; i<letters.length; i++) { 54 59 var action_id = addLine(requestid,dotclear.msg.search_subscribers_for_letter,'id='+letters[i], dotclear.msg.please_wait); 55 //retrieves.push({line_id: action_id, request: {f: 'letterGetSubscribersUp', letterId: letters[i]}, callback: processSendALetter}); 56 //retrieves.push({line_id: action_id, request: {f: 'prepareALetter', letterId: letters[i]}, callback: processSendALetter}); 57 retrieves.push({line_id: action_id, request: {f: 'prepareALetter', letterId: letters[i]}, callback: processSendALetter}); 58 } 60 retrieves.push({line_id: action_id, request: {f: 'prepareALetter', letterId: letters[i], subscribersId: subscribers.join(',')}, callback: processSendALetter}); 61 62 // var action2_id = addLine(requestid,"Statistiques sur la lettre d'informations",'id='+letters[i], dotclear.msg.please_wait); 63 // retrieves.push({line_id: action2_id, params: {f: "statsLetter", letterId: letters[i]}, callback: statsLetter}); 64 } 59 65 doProcess(); 60 66 67 68 61 69 });
Note: See TracChangeset
for help on using the changeset viewer.