/** * @return void */ public function init() { $this->setMethod('post')->setName('psn_test_mail')->setAttrib('accept-charset', 'utf-8'); $this->setAttrib('class', 'ifw-wp-zend-form-ul'); $this->setDecorators(array('FormElements', 'Form')); $this->_fieldDecorators = array(new IfwPsn_Zend_Form_Decorator_SimpleInput(), array('HtmlTag', array('tag' => 'li')), 'Errors', 'Description'); $recipients = IfwPsn_Wp_Proxy_Filter::apply('psn_testmail_form_recipients_options', array('admin' => __('Blog admin', 'psn'))); $recipient = $this->createElement('select', 'recipient'); $recipient->setLabel(__('Recipient', 'psn'))->setDecorators($this->getFieldDecorators())->setFilters(array('StringTrim', 'StripTags'))->addMultiOptions($recipients)->setOrder(40); $this->addElement($recipient); $this->setNonce('psn-form-test-mail'); // Add the submit button $this->addElement('submit', 'submit', array('ignore' => true, 'label' => __('Send test email', 'psn'), 'class' => 'button-primary', 'decorators' => array('ViewHelper', array('HtmlTag', array('tag' => 'li'))), 'order' => 120)); }
/** * */ public function sendTestMailAction() { if (!$this->_verifyNonce('psn-form-test-mail')) { $this->getAdminNotices()->persistError(__('Invalid access.', 'psn')); $this->_gotoIndex(); } $this->_email = new IfwPsn_Wp_Email(); $subject = sprintf(__('Test Email from %s', 'psn'), $this->_pm->getEnv()->getName()); $body = IfwPsn_Wp_Proxy_Filter::apply('psn_send_test_mail_body', sprintf(__('This is a test email generated by %s on %s (%s)', 'psn'), $this->_pm->getEnv()->getName(), IfwPsn_Wp_Proxy_Blog::getName(), IfwPsn_Wp_Proxy_Blog::getUrl()), $this->_email); switch (trim($this->_request->get('recipient'))) { case 'custom': $recipient = esc_attr($_POST['custom_recipient']); break; case 'admin': default: $recipient = IfwPsn_Wp_Proxy_Blog::getAdminEmail(); break; } $recipient = IfwPsn_Wp_Proxy_Filter::apply('psn_send_test_mail_recipient', $recipient); if (empty($recipient)) { $resultMsg = __('Invalid recipient.', 'psn') . ' ' . __('Test email could not be sent.', 'psn'); $this->getAdminNotices()->persistError($resultMsg); } else { $this->_email->setTo($recipient)->setSubject($subject)->setMessage($body); IfwPsn_Wp_Proxy_Action::doAction('psn_send_test_mail', $this->_email); if ($this->_email->send()) { // mail sent successfully $resultMsg = __('Test email has been sent successfully.', 'psn'); $this->getAdminNotices()->persistUpdated($resultMsg); IfwPsn_Wp_Proxy_Action::doAction('psn_send_test_mail_success', $this); } else { // email could not be sent $resultMsg = __('Test email could not be sent.', 'psn'); $this->getAdminNotices()->persistError($resultMsg); IfwPsn_Wp_Proxy_Action::doAction('psn_send_test_mail_failure', $this); } IfwPsn_Wp_Proxy_Action::doAction('psn_after_test_email_send', $this->_email); } $this->_gotoIndex(); }
public static function getMax() { // please respect my work for this plugin and buy the premium version // at http://codecanyon.net/item/post-status-notifier/4809420?ref=ifeelweb // otherwise I can not continue updating this plugin with new features return IfwPsn_Wp_Proxy_Filter::apply('psn_max_rules', 2); }
/** * @return bool */ public function isPremium() { return IfwPsn_Wp_Proxy_Filter::apply($this->getAbbrLower() . '_is_premium', false); }
/** * @param $statusAfter * @param $statusBefore * @param $post */ public function handlePostStatusTransition($statusAfter, $statusBefore, $post) { /** * Block * check for block setting */ if ($this->isBlockNotifications($post->ID)) { // skip if option to block notifications is set return; } /** * Postponed * check if post should be postponed */ if ($this->_postponedHandler instanceof Psn_Notification_Postponed && $this->_postponedHandler->applies()) { $this->_postponedHandler->add($statusAfter, $statusBefore, $post); return; } $this->_pm->getErrorHandler()->enableErrorReporting(); $this->_statusBefore = $statusBefore; $this->_statusAfter = $statusAfter; // get all active rules $activeRules = IfwPsn_Wp_ORM_Model::factory('Psn_Model_Rule')->filter('active')->find_many(); if (Psn_Model_Rule::hasMax()) { $activeRules = array_slice($activeRules, 0, Psn_Model_Rule::getMax()); } if ($this->isDeferredExecution()) { $deferredHandler = new Psn_Notification_Deferred_Handler(); } /** * @var $rule Psn_Model_Rule */ foreach ($activeRules as $rule) { if ($this->_pm->hasOption('psn_ignore_status_inherit')) { $rule->setIgnoreInherit(true); } // to skip a rulematch return false $doMatch = IfwPsn_Wp_Proxy_Filter::apply('psn_do_match', true, array('rule' => $rule, 'post' => $post, 'status_before' => $statusBefore, 'status_after' => $statusAfter)); if (!is_bool($doMatch)) { // for safety: $doMatch = true; } if ($doMatch && $rule->matches($post, $statusBefore, $statusAfter)) { // rule matches /** * Execute all registered notification services * * @var $service Psn_Notification_Service_Interface */ foreach ($this->getServices() as $service) { if ($this->isDeferredExecution()) { // prepare for deferred execution $deferredContainer = new Psn_Notification_Deferred_Container(); $deferredContainer->setService($service)->setRule($rule)->setPost($post); $deferredHandler->addCotainer($deferredContainer); } else { // execute directly // set the replacer $rule->setReplacer(Psn_Notification_Placeholders::getInstance($post)); $service->execute($rule, $post); } } } } $this->_pm->getErrorHandler()->disableErrorReporting(); }
/** * Prepares the submitted values for saving * @return array */ protected function _getFormValues() { $values = $this->_form->removeNonceAndGetValues(); $posttype = $values['posttype']; // categories $categories = array(); if ($this->_request->has('category_include_' . $posttype) && $this->_pm->isPremium()) { $categoriesInclude = $this->_request->get('category_include_' . $posttype); $categoriesInclude = array_map('intval', $categoriesInclude); if (count($categoriesInclude) > 0) { sort($categoriesInclude); $categories['include'] = $categoriesInclude; } } if ($this->_request->has('category_exclude_' . $posttype) && $this->_pm->isPremium()) { $categoriesExclude = $this->_request->get('category_exclude_' . $posttype); $categoriesExclude = array_map('intval', $categoriesExclude); if (count($categoriesExclude) > 0) { sort($categoriesExclude); $categories['exclude'] = $categoriesExclude; } } if (empty($categories)) { $values['categories'] = null; } else { $values['categories'] = serialize($categories); } // serialize recipients $values['recipient'] = serialize($values['recipient']); // serialize cc_select if (empty($values['cc_select'])) { $values['cc_select'] = null; } else { $values['cc_select'] = serialize($values['cc_select']); } // serialize bcc_select if (empty($values['bcc_select'])) { $values['bcc_select'] = null; } else { $values['bcc_select'] = serialize($values['bcc_select']); } // serialize editor_restriction if (empty($values['editor_restriction'])) { $values['editor_restriction'] = null; } else { $values['editor_restriction'] = serialize($values['editor_restriction']); } if (isset($values['limit_count']) && empty($values['limit_count'])) { $values['limit_count'] = null; } return IfwPsn_Wp_Proxy_Filter::apply('psn_rule_save_form_values', $values); }
/** * Alias for get_option * * @param $option * @param bool $default * @return mixed|void */ public static function getOption($option, $default = false) { $filterTag = $option; return IfwPsn_Wp_Proxy_Filter::apply($filterTag, get_option($option, $default)); }
/** * @param $to * @param $subject * @param $message * @param $headers * @param $attachments * @return bool */ protected function _processEmail($to, $subject, $message, $headers, $attachments) { $result = true; $emailParams = array('to' => $to, 'subject' => $subject, 'message' => $message, 'headers' => $headers, 'attachments' => $attachments); // pass the email params to the filter which can decide if the sending process should be executed directly $process = IfwPsn_Wp_Proxy_Filter::apply('ifwpsn_callback_email_process', true, $emailParams, $this); if ($process) { IfwPsn_Wp_Proxy_Action::doAction('ifwpsn_callback_before_email_send', $emailParams, $this); $result = IfwPsn_Wp_Proxy::mail($to, $subject, $message, $headers, $attachments); IfwPsn_Wp_Proxy_Action::doAction('ifwpsn_callback_after_email_send', $result, $emailParams, $this); } return $result; }
/** * @return array */ protected function _getBloginfo() { $result = array(); $whitelist = IfwPsn_Wp_Proxy_Filter::apply('psn_notification_placeholders_bloginfo_whitelist', array('name', 'description', 'wpurl', 'url', 'admin_email', 'version')); foreach ($whitelist as $v) { $result['blog_' . $v] = get_bloginfo($v); } //$result['blog_admin_display_name'] = IfwPsn_Wp_Proxy_User::getAdminDisplayName(); return $result; }
/** * @return array */ protected function _getColumns() { return IfwPsn_Wp_Proxy_Filter::apply($this->_pm->getAbbrLower() . '_' . $this->_id . '_get_columns', $this->getColumns()); }
/** * @return bool */ public function isValid() { $ruleFields = array('id', 'name', 'posttype', 'status_before', 'status_after', 'notification_subject', 'notification_body', 'recipient', 'cc', 'cc_select', 'bcc', 'bcc_select', 'active', 'service_email', 'service_log', 'categories', 'from'); $diff = array_diff(IfwPsn_Wp_Proxy_Filter::apply('psn_db_patcher_rule_fields', $ruleFields), IfwPsn_Wp_Proxy_Db::getTableFieldNames('psn_rules')); return empty($diff); }
/** * @return mixed|void */ protected function _getLicenseCode() { return IfwPsn_Wp_Proxy_Filter::apply('envato_license_code', $this->_pm->getOptionsManager()->getOption('license_code')); }
/** * @return string */ public function getName() { return IfwPsn_Wp_Proxy_Filter::apply($this->_pathinfo->getDirname() . '_plugin_name', $this->_name); }
/** * @return array */ public function get_bulk_actions() { $actions = array(); if (!$this->isMetaboxEmbedded()) { $actions = array('bulk_delete' => __('Delete'), 'activate' => __('Activate', 'psn'), 'deactivate' => __('Deactivate', 'psn')); $actions = IfwPsn_Wp_Proxy_Filter::apply('psn_rules_bulk_actions', $actions); } return $actions; }
/** * @return void */ public function init() { $this->setMethod('post')->setName('psn_form_rule')->setAttrib('accept-charset', 'utf-8'); $this->setAttrib('class', 'ifw-wp-zend-form-ul'); $this->setDecorators(array('FormElements', 'Form')); $this->_fieldDecorators = array(new IfwPsn_Zend_Form_Decorator_SimpleInput(), array('HtmlTag', array('tag' => 'li')), 'Errors', 'Description'); $this->addElement('text', 'name', array('label' => __('Rule name', 'psn'), 'description' => __('Name of the rule', 'psn'), 'required' => true, 'filters' => array(new IfwPsn_Zend_Filter_SanitizeTextField()), 'maxlength' => 80, 'validators' => $_GET['appaction'] == 'create' ? array(new Psn_Admin_Form_Validate_Max()) : array(), 'decorators' => $this->getFieldDecorators(), 'order' => 10)); $postTypeOptions = array(); if ($this->isHideNonPublicPostTypes()) { $postTypeOptions['public'] = true; } /** * Post Type */ $postType = $this->createElement('select', 'posttype'); $postTypeOptions = array_merge(array('all' => __('all types', 'psn')), IfwPsn_Wp_Proxy_Post::getAllTypesWithLabels($postTypeOptions)); unset($postTypeOptions['attachment']); unset($postTypeOptions['nav_menu_item']); $postType->setLabel(__('Post type', 'psn'))->setDecorators($this->getFieldDecorators())->setFilters(array(new IfwPsn_Zend_Filter_SanitizeTextField()))->addMultiOptions($postTypeOptions)->setOrder(20); $this->addElement($postType); /** * Post status */ $statusValues = array_merge(array('new' => __('New', 'ifw'), 'not_published' => __('Not published', 'psn'), 'not_private' => __('Not private', 'psn'), 'not_pending' => __('Not pending', 'psn'), 'not_trash' => __('Not trash', 'psn')), IfwPsn_Wp_Proxy_Post::getAllStatusesWithLabels(array('show_domain' => true))); natcasesort($statusValues); $statusValues = array_merge(array('anything' => __('anything', 'psn')), $statusValues); /** * Status before */ $statusBefore = $this->createElement('select', 'status_before'); $statusBefore->setLabel(__('Status before', 'psn'))->setDecorators($this->getFieldDecorators())->setFilters(array(new IfwPsn_Zend_Filter_SanitizeTextField()))->addMultiOptions($statusValues)->setOrder(30); $this->addElement($statusBefore); /** * Status after */ $statusAfter = $this->createElement('select', 'status_after'); $statusAfter->setLabel(__('Status after', 'psn'))->setDecorators($this->getFieldDecorators())->setFilters(array(new IfwPsn_Zend_Filter_SanitizeTextField()))->addMultiOptions($statusValues)->setOrder(40); $this->addElement($statusAfter); /** * Subject */ $this->addElement('text', 'notification_subject', array('label' => __('Subject', 'psn'), 'description' => sprintf(__('Open the help menu in the upper right corner to see a list of all <a %s>supported placeholders</a>.', 'psn'), 'href="javascript:void(0)" class="placeholder_help"') . ' ' . sprintf(__('Supports <a %s>conditions</a> (if activated in the options).', 'psn'), 'href="javascript:void(0)" class="conditions_help"'), 'required' => true, 'filters' => array('StringTrim', 'StripTags'), 'maxlength' => 200, 'decorators' => $this->getFieldDecorators(), 'order' => 50)); $this->getElement('notification_subject')->getDecorator('Description')->setEscape(false); /** * Body */ $this->addElement('textarea', 'notification_body', array('label' => __('Text', 'psn'), 'description' => sprintf(__('Open the help menu in the upper right corner to see a list of all <a %s>supported placeholders</a>.', 'psn'), 'href="javascript:void(0)" class="placeholder_help"') . ' ' . sprintf(__('Supports <a %s>conditions</a> (if activated in the options).', 'psn'), 'href="javascript:void(0)" class="conditions_help"'), 'validators' => array(new Psn_Admin_Form_Validate_MailBody()), 'required' => false, 'filters' => array('StringTrim', 'HtmlEntities'), 'cols' => 80, 'rows' => 10, 'allowempty' => false, 'decorators' => $this->getFieldDecorators(), 'order' => 60)); $this->getElement('notification_body')->getDecorator('Description')->setEscape(false); /** * Recipients */ $recipients = IfwPsn_Wp_Proxy_Filter::apply('psn_rule_form_recipients_options', array('admin' => __('Blog admin', 'psn'), 'author' => __('Post author', 'psn'))); /** * TO */ $recipient = $this->createElement('multiselect', 'recipient'); $recipient->setLabel(__('Recipient', 'psn'))->setDescription(__('To select multiple recipients hold down the control button (ctrl) on Windows or command button (cmd) on Mac.', 'psn'))->setRequired(false)->setValidators(array(new Psn_Admin_Form_Validate_ToEmail()))->setAllowEmpty(false)->setRegisterInArrayValidator(false)->setDecorators($this->getFieldDecorators())->setFilters(array('StringTrim', 'StripTags'))->setAttrib('size', 10)->addMultiOptions($recipients)->setOrder(70); $this->addElement($recipient); /** * CC */ $cc_select = $this->createElement('multiselect', 'cc_select'); $cc_select->setLabel(__('CC', 'psn'))->setDescription(__('To select multiple cc recipients hold down the control button (ctrl) on Windows or command button (cmd) on Mac.', 'psn'))->setDecorators($this->getFieldDecorators())->setFilters(array('StringTrim', 'StripTags'))->setAttrib('size', 10)->addMultiOptions($recipients)->setOrder(80); $this->addElement($cc_select); $this->addElement('textarea', 'cc', array('label' => __('Custom CC', 'psn'), 'description' => IfwPsn_Wp_Proxy_Filter::apply('psn_rule_form_description_cc', sprintf(__('Add additional recipient emails. Comma separated. Supports placeholders like [author_email], [blog_admin_email], [current_user_email] or the dynamic [recipient_*] placeholders. Check the <a %s>placeholders help</a>.', 'psn'), 'href="javascript:void(0)" class="placeholder_help"')), 'filters' => array('StringTrim', 'HtmlEntities', new Psn_Admin_Form_Filter_Cc(IfwPsn_Wp_Plugin_Manager::getInstance('Psn')->isPremium())), 'cols' => 80, 'rows' => 1, 'decorators' => $this->getFieldDecorators(), 'order' => 85)); $this->getElement('cc')->getDecorator('Description')->setEscape(false); /** * BCC */ $bcc_select = $this->createElement('multiselect', 'bcc_select'); $bcc_select->setLabel(__('BCC', 'psn'))->setDescription(__('To select multiple bcc recipients hold down the control button (ctrl) on Windows or command button (cmd) on Mac.', 'psn'))->setDecorators($this->getFieldDecorators())->setFilters(array('StringTrim', 'StripTags'))->setAttrib('size', 10)->addMultiOptions($recipients)->setOrder(90); $this->addElement($bcc_select); $this->addElement('textarea', 'bcc', array('label' => __('Custom BCC', 'psn'), 'description' => IfwPsn_Wp_Proxy_Filter::apply('psn_rule_form_description_bcc', sprintf(__('Add bcc recipient emails. Comma separated. Supports placeholders like [author_email], [blog_admin_email], [current_user_email] or the dynamic [recipient_*] placeholders. Check the <a %s>placeholders help</a>.', 'psn'), 'href="javascript:void(0)" class="placeholder_help"')), 'escape' => false, 'filters' => array('StringTrim', 'HtmlEntities', new Psn_Admin_Form_Filter_Bcc(IfwPsn_Wp_Plugin_Manager::getInstance('Psn')->isPremium())), 'cols' => 80, 'rows' => 1, 'decorators' => $this->getFieldDecorators(), 'order' => 95)); $this->getElement('bcc')->getDecorator('Description')->setEscape(false); /** * Active */ $active = $this->createElement('checkbox', 'active'); $active->setLabel(__('Active', 'psn'))->setDecorators($this->getFieldDecorators())->setDescription(__('Only active rules take affect on post transition changes', 'psn'))->setChecked(true)->setCheckedValue(1)->setOrder(100); $this->addElement($active); /** * Service email */ $email = $this->createElement('checkbox', 'service_email'); $email->setLabel(__('Email', 'psn'))->setDecorators($this->getFieldDecorators())->setDescription(__('When the rule matches, an email will be send to the recipient with subject and text', 'psn'))->setChecked(true)->setCheckedValue(1)->setOrder(110); $this->addElement($email); if (isset($_REQUEST['id'])) { $this->addElement('hidden', 'id', array('value' => $_REQUEST['id'], 'decorators' => array('ViewHelper'))); } $this->setNonce('psn-form-rule'); $this->addElement('note', 'p', array('label' => '-', 'value' => ' ', 'decorators' => array('ViewHelper', array('HtmlTag', array('tag' => 'p'))), 'order' => 999)); /** * Submit button */ $this->addElement('submit', 'submit', array('ignore' => true, 'label' => __('Save', 'psn'), 'class' => 'button-primary', 'decorators' => array('ViewHelper', array('HtmlTag', array('tag' => 'span'))), 'order' => 1000)); $this->addElement('note', 'divider', array('label' => '-', 'value' => ' — ', 'decorators' => array('ViewHelper', array('HtmlTag', array('tag' => 'span'))), 'order' => 1001)); $this->addElement('submit', 'submit_and_stay', array('ignore' => true, 'label' => __('Save and stay on page', 'psn'), 'class' => 'button', 'decorators' => array('ViewHelper', array('HtmlTag', array('tag' => 'span'))), 'order' => 1002)); }
/** * @param $placeholder * @return mixed|void */ protected function _lazyGetValue($placeholder) { return IfwPsn_Wp_Proxy_Filter::apply($this->_lazyFilterPrefix . $placeholder, '', $placeholder, $this); }
/** * @param Psn_Model_Rule $rule * @return mixed|void */ protected function _getPreparedSubject(Psn_Model_Rule $rule) { $subject = $rule->getNotificationSubject(); /** * Final subject filter * @param string the email subject */ return IfwPsn_Wp_Proxy_Filter::apply('psn_service_email_subject', $subject, $this); }