/**
  * Front-end display of widget.
  *
  * @see WP_Widget::widget()
  *
  * @param array $args
  *        	Widget arguments.
  * @param array $instance
  *        	Saved values from database.
  * @since 2.0.0
  * @author Panagiotis Vagenas <*****@*****.**>
  */
 public function widget($args, $instance)
 {
     global $post;
     // get instance of main plugin
     $plugin = easyRelatedPosts::get_instance();
     // check if it's time to take action
     if (is_single($post->ID)) {
         if ($plugin->isInExcludedPostTypes($post) || $plugin->isInExcludedTaxonomies($post)) {
             return;
         }
         // Fill missing options
         if (empty($instance)) {
             $instance = erpDefaults::$comOpts + erpDefaults::$widOpts;
         } else {
             $instance = $instance + erpDefaults::$comOpts + erpDefaults::$widOpts;
         }
         erpPaths::requireOnce(erpPaths::$erpRelated);
         erpPaths::requireOnce(erpPaths::$erpMainOpts);
         erpPaths::requireOnce(erpPaths::$erpWidOpts);
         $mainOpts = new erpMainOpts();
         $instance['tags'] = $mainOpts->getTags();
         $instance['categories'] = $mainOpts->getCategories();
         $instance['postTypes'] = $mainOpts->getPostTypes();
         $widOpts = new erpWidOpts($instance);
         // Get related
         $relatedObj = erpRelated::get_instance($widOpts);
         $wpQ = $relatedObj->getRelated($post->ID);
         // If we have some posts to show
         if ($wpQ->have_posts()) {
             // Get template instance for the specific widget number
             erpPaths::requireOnce(erpPaths::$VPluginThemeFactory);
             VPluginThemeFactory::registerThemeInPathRecursive(erpPaths::getAbsPath(erpPaths::$widgetThemesFolder), $instance['dsplLayout']);
             $theme = VPluginThemeFactory::getThemeByName($instance['dsplLayout']);
             if (!$theme) {
                 return $this->displayEmptyWidget($args, $instance);
             }
             $theme->setOptions($instance);
             $theme->formPostData($wpQ, $widOpts, $relatedObj->getRatingsFromRelDataObj());
             $content = $theme->renderW($this->number);
             echo $args['before_widget'];
             echo $args['before_title'] . $instance['title'] . $args['after_title'];
             echo $content;
             echo $args['after_widget'];
         } else {
             // else diplay empty widget
             $this->displayEmptyWidget($args, $instance);
         }
     }
 }
 /**
  * Checks if current post belongs in an excluded taxonimies
  * Returns true iff all post categories are in excluded ones
  * or all post tags are in excluded ones
  *
  * @author Panagiotis Vagenas <*****@*****.**>
  * @since 2.0.0
  */
 public function isInExcludedTaxonomies($post)
 {
     if (is_a($post, 'WP_Post')) {
         $post = $post->ID;
     }
     $exCats = $this->mainOpts->getCategories();
     if (!empty($exCats)) {
         $postCategories = get_the_category($post);
         if (is_array($postCategories) && !empty($postCategories)) {
             $catIds = array();
             foreach ($postCategories as $cat) {
                 array_push($catIds, $cat->term_id);
             }
             $intersect = array_intersect($catIds, $exCats);
             if (!empty($intersect) && count($intersect) == count($postCategories)) {
                 return TRUE;
             }
         }
     }
     $exTags = $this->mainOpts->getTags();
     if (!empty($exTags)) {
         $postTags = get_the_tags($post);
         if (is_array($postTags) && !empty($postTags)) {
             $tagsIds = array();
             foreach ($postTags as $tag) {
                 array_push($tagsIds, (string) $tag->term_id);
             }
             $intersect = array_intersect($tagsIds, $exTags);
             if (!empty($intersect) && count($intersect) == count($postTags)) {
                 return TRUE;
             }
         }
     }
     return FALSE;
 }
 private static function delMainOptions()
 {
     erpPaths::requireOnce(erpPaths::$erpMainOpts);
     $mOpts = new erpMainOpts();
     delete_option($mOpts->getOptionsArrayName());
 }
 /**
  * Get default thumb url
  * @return string|NULL
  * @author Panagiotis Vagenas <*****@*****.**>
  * @since 2.0.0
  */
 public function getDefaultThumbnail()
 {
     if ($this instanceof erpMainOpts) {
         $t = $this->getValue('defaultThumbnail');
     } else {
         erpPaths::requireOnce(erpPaths::$erpMainOpts);
         $mOpts = new erpMainOpts();
         $t = $mOpts->getDefaultThumbnail();
     }
     return !empty($t) ? $t : erpDefaults::$comOpts['defaultThumbnail'];
 }
 /**
  * Saves admin options.
  * This is called through a hook
  *
  * @author Panagiotis Vagenas <*****@*****.**>
  * @since 2.0.0
  */
 public function saveOptions()
 {
     if (!current_user_can('manage_options')) {
         wp_die('Not allowed');
     }
     erpPaths::requireOnce(erpPaths::$erpMainOpts);
     // Save template options
     if (isset($_POST['dsplLayout'])) {
         erpPaths::requireOnce(erpPaths::$VPluginThemeFactory);
         VPluginThemeFactory::registerThemeInPathRecursive(erpPaths::getAbsPath(erpPaths::$mainThemesFolder), $_POST['dsplLayout']);
         $theme = VPluginThemeFactory::getThemeByName($_POST['dsplLayout']);
         if ($theme) {
             $theme->saveSettings($_POST);
             foreach ($theme->getDefOptions() as $key => $value) {
                 unset($_POST[$key]);
             }
         } else {
             $message = new WP_Error_Notice('Theme ' . $_POST['dsplLayout'] . ' not found. Theme options discarded', 1, array('settings_page_erp_settings'));
             WP_Admin_Notices::getInstance()->addNotice($message);
         }
     }
     // Save the rest of the options
     $mainOptionsObj = new erpMainOpts();
     $mainOptionsObj->saveOptions($_POST);
     $message = new WP_Updated_Notice('Options saved', 1, array('settings_page_erp_settings'));
     WP_Admin_Notices::getInstance()->addNotice($message);
     wp_redirect(add_query_arg(array('page' => $this->plugin_slug . '_settings', 'tab-spec' => wp_strip_all_tags($_POST['tab-spec'])), admin_url('options-general.php')));
     exit;
 }