Esempio n. 1
0
 /**
  * Retrieves the prepared notification body text
  *
  * @return string
  */
 public function getNotificationBody()
 {
     if ($this->_notificationBody === null) {
         // see: http://stackoverflow.com/questions/6275380/does-html-entity-decode-replaces-nbsp-also-if-not-how-to-replace-it
         if (IfwPsn_Wp_Proxy_Blog::getCharset() == 'UTF-8') {
             $body = str_replace(" ", ' ', html_entity_decode($this->get('notification_body'), ENT_COMPAT, IfwPsn_Wp_Proxy_Blog::getCharset()));
         } else {
             $body = str_replace(" ", ' ', html_entity_decode($this->get('notification_body'), ENT_COMPAT, IfwPsn_Wp_Proxy_Blog::getCharset()));
         }
         $body = IfwPsn_Wp_Proxy_Filter::apply('psn_rule_notification_body', $this->_replacer->replace($body), $this);
         $this->_notificationBody = $body;
     }
     return $this->_notificationBody;
 }
Esempio n. 2
0
 /**
  * Initializes commonly used properties
  */
 protected function _initFormView()
 {
     require_once $this->_pm->getPathinfo()->getRootLib() . 'Psn/Patch/Database.php';
     require_once $this->_pm->getPathinfo()->getRootLib() . 'Psn/Admin/Form/NotificationRule.php';
     require_once $this->_pm->getPathinfo()->getRootLib() . 'Psn/Notification/Placeholders.php';
     require_once $this->_pm->getPathinfo()->getRootLib() . 'IfwPsn/Wp/Plugin/Menu/Help.php';
     $dbPatcher = new Psn_Patch_Database();
     $this->view->dbPatcher = $dbPatcher;
     if (!$this->_pm->isPremium()) {
         IfwPsn_Wp_Proxy_Filter::add('psn_rule_form_description_cc', create_function('$var', 'return $var . " " .
             __("Limited to 1. Get the Premium version for unlimited Cc emails.", "psn");'));
         IfwPsn_Wp_Proxy_Filter::add('psn_rule_form_description_bcc', create_function('$var', 'return $var . " " .
             __("(Premium feature)", "psn");'));
     }
     $formOptions = array();
     if ($this->_pm->getOptionsManager()->getOption('psn_hide_nonpublic_posttypes') != null) {
         $formOptions['hide_nonpublic_posttypes'] = true;
     }
     $this->_form = new Psn_Admin_Form_NotificationRule($formOptions);
     if (!$this->_pm->isPremium()) {
         $this->_form->getElement('recipient')->setDescription(__('Get additional recipients like user roles (including custom roles) or all users with the Premium version.', 'psn'));
     }
     $this->_helper->viewRenderer('form');
     $placeholders = new Psn_Notification_Placeholders();
     $help = new IfwPsn_Wp_Plugin_Menu_Help($this->_pm);
     $help->setTitle(__('Placeholders', 'psn'))->setId('placeholders')->setHelp($placeholders->getOnScreenHelp())->setSidebar($this->_getHelpSidebar())->load();
     $help = new IfwPsn_Wp_Plugin_Menu_Help($this->_pm);
     $help->setTitle(__('Conditions', 'psn'))->setId('conditions')->setHelp(IfwPsn_Wp_Tpl::getFilesytemInstance($this->_pm)->render('admin_help_conditions.html.twig', array('pm' => $this->_pm)))->setSidebar($this->_getHelpSidebar())->load();
     $this->view->langListOfPlaceholdersLabel = __('Show list of placeholders available for subject and text', 'psn');
     $this->view->langListOfPlaceholdersLink = __('List of placeholders', 'psn');
     $this->view->langHelp = __('Help', 'ifw');
     if (Psn_Model_Rule::hasMax() && Psn_Model_Rule::reachedMax() && $this->getRequest()->getActionName() == 'create') {
         $this->view->maxReached = __(sprintf('You reached the maximum number of rules (%s) for the free version. Get the <a href="%s" target="_blank">Premium Version</a> for unlimmited rules and more features.', Psn_Model_Rule::getMax(), $this->_pm->getConfig()->plugin->premiumUrl), 'psn');
     }
     if ($this->_request->getActionName() == 'create') {
         $this->view->langHeadline = __('Create new rule', 'psn');
         IfwPsn_Wp_Proxy_Script::loadAdmin('psn_rule_examples', $this->_pm->getEnv()->getUrlAdminJs() . 'rule_examples.js', array(), $this->_pm->getEnv()->getVersion());
         IfwPsn_Wp_Proxy_Script::localize('psn_rule_examples', 'PsnExampleRule', array('ThePendingPost' => __('The pending post', 'psn'), 'ThePendingPostSubject' => __('[blog_name]: New post is waiting for review', 'psn'), 'ThePendingPostBody' => str_replace('<br>', "\n", __('Howdy admin,<br>there is a new post by [author_display_name] waiting for review:<br>"[post_title]".<br><br>Here is the permalink: [post_permalink]<br><br>Here is the backend edit link: [post_editlink]<br><br>The author\'s email address is [author_email]<br><br>[blog_wpurl]', 'psn')), 'TheHappyAuthor' => __('The happy author', 'psn'), 'TheHappyAuthorSubject' => __('Your post on [blog_name] got published!', 'psn'), 'TheHappyAuthorBody' => str_replace('<br>', "\n", __('Howdy [author_display_name],<br>we are happy to tell you that your post "[post_title]" got published.<br><br>Here is the permalink: [post_permalink]<br><br>Thanks for your good work,<br>your [blog_name]-Team<br><br>[blog_wpurl]', 'psn')), 'ThePedanticAdmin' => __('The pedantic admin', 'psn'), 'ThePedanticAdminSubject' => __('[blog_name]: Post status transition from [post_status_before] to [post_status_after]', 'psn'), 'ThePedanticAdminBody' => str_replace('<br>', "\n", __('Howdy admin,<br>a post status transition was a detected on "[post_title]".<br><br>Status before: [post_status_before]<br>Status after: [post_status_after]<br><br>Post permalink: [post_permalink]', 'psn'))));
         IfwPsn_Wp_Proxy_Style::loadAdmin('psn_rule_examples', $this->_pm->getEnv()->getUrlAdminCss() . 'rule_examples.css');
         $this->view->langExamples = __('Examples', 'psn');
         $this->view->langExamplesDesc = __('Click the buttons below to get an idea of how you can set up notification rules.', 'psn');
         $this->view->langExamplesRuleThePendingPost = __('The pending post', 'psn');
         $this->view->langExamplesRuleThePendingPostDesc = __('This rule sends a notification when a new post got submitted for review.', 'psn');
         $this->view->langExamplesRuleTheHappyAuthor = __('The happy author', 'psn');
         $this->view->langExamplesRuleTheHappyAuthorDesc = __('This rule sends an email to the author of a post when it got published.', 'psn');
         $this->view->langExamplesRuleThePedanticAdmin = __('The pedantic admin', 'psn');
         $this->view->langExamplesRuleThePedanticAdminDesc = __('This rule is for blog admins who want to be informed about every single post status change.', 'psn');
         $this->view->langExamplesRuleDebug = __('Debug rule', 'psn');
         $this->view->langExamplesRuleDebugDesc = __('This rule is just for creating log entries to monitor all available values when the rule matched. Remember to activate option Logger / Log rule matches.', 'psn') . ' ' . sprintf('<a href="%s" target="_blank">' . __('More details', 'psn') . '</a>', $this->_pm->getConfig()->plugin->docUrl . 'rules.html#debug-rule');
     } else {
         $this->view->langHeadline = __('Edit notification rule', 'psn');
         $this->_form->getElement('submit')->setLabel(__('Update', 'psn'));
         $this->_form->getElement('submit_and_stay')->setLabel(__('Update and stay on page', 'psn'));
     }
     $this->view->actionName = $this->_request->getActionName();
     IfwPsn_Wp_Proxy_Script::loadAdmin('psn_rule_form', $this->_pm->getEnv()->getUrlAdminJs() . 'rule_form.js', array(), $this->_pm->getEnv()->getVersion());
     IfwPsn_Wp_Proxy_Script::localize('psn_rule_form', 'psn', array('is_premium' => $this->_pm->isPremium()));
     IfwPsn_Wp_Proxy_Script::localize('psn_rule_form', 'psn_taxonomies', array_merge(IfwPsn_Wp_Proxy_Post::getAllTypesCategories(), array('lang_Categories' => __('Categories', 'psn'), 'lang_categories_help' => sprintf(__('To select multiple categories hold down the control button (ctrl) on Windows or command button (cmd) on Mac.<br>If nothing is selected, all categories get included.<br>Exclude is dominant. See the <a href="%s" target="_blank">docs</a> for more details.', 'psn'), 'http://docs.ifeelweb.de/post-status-notifier/rules.html#category-filter'), 'lang_include_categories' => __('Include only these categories', 'psn'), 'lang_exclude_categories' => __('Exclude categories', 'psn'), 'lang_select_all' => __('select all', 'psn'), 'lang_remove_all' => __('remove all', 'psn'), 'lang_no_categories' => __('Post type "%s" has no categories.', 'psn'), 'lang_premium_feature' => sprintf(__('This is a <a href="%s" target="_blank">Premium</a> feature.', 'psn'), $this->_pm->getConfig()->plugin->premiumUrl))));
     IfwPsn_Wp_Proxy_Action::doAction('psn_rule_form', $this->_form);
 }
Esempio n. 3
0
 /**
  * @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();
 }
Esempio n. 4
0
 /**
  * Executes the service with submitted post object
  *
  * @param $post
  */
 public function execute($post)
 {
     $this->_rule->setReplacer(Psn_Notification_Placeholders::getInstance($post));
     $this->_service->execute($this->_rule, $post);
 }