Пример #1
0
function _likebtn_get_entity_title($entity_name, $entity_id, $max_length = LIKEBTN_TITLE_MAX_LENGTH)
{
    switch ($entity_name) {
        case LIKEBTN_ENTITY_COMMENT:
            $title = get_comment_text($entity_id);
            break;
        case LIKEBTN_ENTITY_BP_ACTIVITY_POST:
        case LIKEBTN_ENTITY_BP_ACTIVITY_UPDATE:
        case LIKEBTN_ENTITY_BP_ACTIVITY_COMMENT:
        case LIKEBTN_ENTITY_BP_ACTIVITY_TOPIC:
            $title = _likebtn_bp_get_activity_title($entity_id);
            break;
        case LIKEBTN_ENTITY_BP_MEMBER:
        case LIKEBTN_ENTITY_BBP_USER:
        case LIKEBTN_ENTITY_USER:
            if (function_exists('bp_core_get_user_displayname')) {
                $title = bp_core_get_user_displayname($entity_id);
            } else {
                $title = get_the_author_meta('user_nicename', $entity_id);
            }
            break;
        default:
            $title = get_the_title($entity_id);
            break;
    }
    if ($max_length) {
        $title = _likebtn_shorten_title($title, $max_length);
    }
    return $title;
}
 function widget($args, $instance = array())
 {
     global $wpdb;
     global $likebtn_nonpost_entities;
     global $likebtn_bbp_post_types;
     $has_posts = false;
     $post_types_count = 0;
     if (is_array($args)) {
         extract($args);
     }
     $instance = LikeBtnLikeButtonMostLikedWidget::prepareInstance($instance);
     if (is_array($instance)) {
         extract($instance);
     }
     /*$title = '';
             if (isset($instance['title'])) {
                 $title = $instance['title'];
             }
             $show_thumbnail = '';
             if (isset($instance['show_thumbnail'])) {
                 $show_thumbnail = $instance['show_thumbnail'];
             }
             $show_excerpt = '';
             if (isset($instance['show_excerpt'])) {
                 $show_excerpt = $instance['show_excerpt'];
             }
             $show_date = '';
             if (isset($instance['show_date'])) {
                 $show_date = $instance['show_date'];
             }
             $show_likes = '';
             if (isset($instance['show_likes'])) {
                 $show_likes = $instance['show_likes'];
             }
             $show_dislikes = '';
             if (isset($instance['show_dislikes'])) {
                 $show_dislikes = $instance['show_dislikes'];
             }
     
             // validate parameters
             if ($show_thumbnail == 'true') {
                 $show_thumbnail = '1';
             }
             if ($show_date == 'true') {
                 $show_date = '1';
             }
             if ($show_likes == 'true') {
                 $show_likes = '1';
             }
             if ($show_dislikes == 'true') {
                 $show_dislikes = '1';
             }*/
     if (empty($instance['entity_name'])) {
         $instance['entity_name'] = array(LIKEBTN_ENTITY_POST);
     }
     // Add bbPress
     $nonpost_entities = $likebtn_nonpost_entities;
     $nonpost_entities[] = LIKEBTN_ENTITY_BBP_POST;
     foreach ($instance['entity_name'] as $entity_index => $entity_name) {
         $instance['entity_name'][$entity_index] = str_replace("'", '', trim($entity_name));
         if (!in_array($entity_name, $nonpost_entities)) {
             $has_posts = true;
         }
     }
     $query_limit = '';
     if (isset($instance['number']) && (int) $instance['number'] > 0) {
         $query_limit = "LIMIT " . (int) $instance['number'];
     }
     // getting the most liked content
     $query = '';
     // Posts
     if ($has_posts) {
         $query_post_types = "'" . implode("','", $instance['entity_name']) . "'";
         $query_attachment = '';
         if (in_array(LIKEBTN_ENTITY_ATTACHMENT, $instance['entity_name'])) {
             $query_attachment = " OR (p.post_type = 'attachment') ";
         }
         $query .= "\n                 SELECT\n                    p.ID as 'post_id',\n                    p.post_title,\n                    p.post_date,\n                    CONVERT(pm_likes.meta_value, UNSIGNED INTEGER) as 'likes',\n                    CONVERT(pm_dislikes.meta_value, UNSIGNED INTEGER) as 'dislikes',\n                    CONVERT(pm_likes_minus_dislikes.meta_value, UNSIGNED INTEGER) as 'likes_minus_dislikes',\n                    p.post_type,\n                    p.post_mime_type,\n                    '' as url\n                 FROM {$wpdb->prefix}postmeta pm_likes\n                 LEFT JOIN {$wpdb->prefix}posts p\n                     ON (p.ID = pm_likes.post_id)\n                 LEFT JOIN {$wpdb->prefix}postmeta pm_dislikes\n                     ON (pm_dislikes.post_id = pm_likes.post_id AND pm_dislikes.meta_key = '" . LIKEBTN_META_KEY_DISLIKES . "')\n                 LEFT JOIN {$wpdb->prefix}postmeta pm_likes_minus_dislikes\n                     ON (pm_likes_minus_dislikes.post_id = pm_likes.post_id AND pm_likes_minus_dislikes.meta_key = '" . LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES . "')\n                 WHERE\n                    pm_likes.meta_key = '" . LIKEBTN_META_KEY_LIKES . "'\n                    AND ((p.post_status = 'publish'\n                    AND p.post_type in ({$query_post_types})) {$query_attachment})";
         if (!empty($instance['time_range']) && $instance['time_range'] != 'all') {
             $query .= " AND post_date >= '" . $this->timeRangeToDateTime($instance['time_range']) . "'";
         }
         $post_types_count++;
     }
     // Comments
     if (in_array(LIKEBTN_ENTITY_COMMENT, $instance['entity_name'])) {
         if ($post_types_count > 0) {
             $query .= " UNION ";
         }
         $query .= "\n                 SELECT\n                    p.comment_ID as 'post_id',\n                    p.comment_content as post_title,\n                    p.comment_date as 'post_date',\n                    CONVERT(pm_likes.meta_value, UNSIGNED INTEGER) as 'likes',\n                    CONVERT(pm_dislikes.meta_value, UNSIGNED INTEGER) as 'dislikes',\n                    CONVERT(pm_likes_minus_dislikes.meta_value, UNSIGNED INTEGER) as 'likes_minus_dislikes',\n                    '" . LIKEBTN_ENTITY_COMMENT . "' as post_type,\n                    '' as post_mime_type,\n                    '' as url\n                 FROM {$wpdb->prefix}commentmeta pm_likes\n                 LEFT JOIN {$wpdb->prefix}comments p\n                    ON (p.comment_ID = pm_likes.comment_id)\n                 LEFT JOIN {$wpdb->prefix}commentmeta pm_dislikes\n                    ON (pm_dislikes.comment_id = pm_likes.comment_id AND pm_dislikes.meta_key = '" . LIKEBTN_META_KEY_DISLIKES . "')\n                 LEFT JOIN {$wpdb->prefix}commentmeta pm_likes_minus_dislikes\n                     ON (pm_likes_minus_dislikes.comment_id = pm_likes.comment_id AND pm_likes_minus_dislikes.meta_key = '" . LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES . "')\n                 WHERE\n                    pm_likes.meta_key = '" . LIKEBTN_META_KEY_LIKES . "' \n                    AND p.comment_approved = 1 ";
         if (!empty($instance['time_range']) && $instance['time_range'] != 'all') {
             $query .= " AND comment_date >= '" . $this->timeRangeToDateTime($instance['time_range']) . "'";
         }
         $post_types_count++;
     }
     // Custom items
     if (in_array(LIKEBTN_ENTITY_CUSTOM_ITEM, $instance['entity_name'])) {
         if ($post_types_count > 0) {
             $query .= " UNION ";
         }
         $query_post_types = "'" . implode("','", $instance['entity_name']) . "'";
         $query .= "\n                 SELECT\n                    p.ID as 'post_id',\n                    p.identifier as 'post_title',\n                    '' as 'post_date',\n                    p.likes,\n                    p.dislikes,\n                    p.likes_minus_dislikes,\n                    '" . LIKEBTN_ENTITY_CUSTOM_ITEM . "' as 'post_type',\n                    '' as 'post_mime_type',\n                    url\n                 FROM {$wpdb->prefix}" . LIKEBTN_TABLE_ITEM . " p\n                 WHERE\n                    1 = 1 ";
         $post_types_count++;
     }
     // BuddyPress Member
     if (in_array(LIKEBTN_ENTITY_BP_MEMBER, $instance['entity_name'])) {
         if ($post_types_count > 0) {
             $query .= " UNION ";
         }
         $query .= "\n                 SELECT\n                    p.ID as 'post_id',\n                    p.display_name as post_title,\n                    p.user_registered as 'post_date',\n                    CONVERT(pm_likes.meta_value, UNSIGNED INTEGER) as 'likes',\n                    CONVERT(pm_dislikes.meta_value, UNSIGNED INTEGER) as 'dislikes',\n                    CONVERT(pm_likes_minus_dislikes.meta_value, UNSIGNED INTEGER) as 'likes_minus_dislikes',\n                    '" . LIKEBTN_ENTITY_BP_MEMBER . "' as post_type,\n                    '' as post_mime_type,\n                    '' as url\n                 FROM {$wpdb->prefix}bp_xprofile_meta pm_likes\n                 LEFT JOIN {$wpdb->prefix}users p\n                    ON (p.ID = pm_likes.object_id AND pm_likes.object_type = '" . LIKEBTN_BP_XPROFILE_OBJECT_TYPE . "')\n                 LEFT JOIN {$wpdb->prefix}bp_xprofile_meta pm_dislikes\n                    ON (pm_dislikes.object_id = pm_likes.object_id AND pm_dislikes.object_type = '" . LIKEBTN_BP_XPROFILE_OBJECT_TYPE . "' AND pm_dislikes.meta_key = '" . LIKEBTN_META_KEY_DISLIKES . "')\n                 LEFT JOIN {$wpdb->prefix}bp_xprofile_meta pm_likes_minus_dislikes\n                    ON (pm_likes_minus_dislikes.object_id = pm_likes.object_id AND pm_likes_minus_dislikes.object_type = '" . LIKEBTN_BP_XPROFILE_OBJECT_TYPE . "' AND pm_likes_minus_dislikes.meta_key = '" . LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES . "')\n                 WHERE\n                    pm_likes.meta_key = '" . LIKEBTN_META_KEY_LIKES . "' \n                    AND p.user_status = 0 ";
         if (!empty($instance['time_range']) && $instance['time_range'] != 'all') {
             $query .= " AND p.user_registered >= '" . $this->timeRangeToDateTime($instance['time_range']) . "'";
         }
         $post_types_count++;
     }
     // BuddyPress Activities
     if (in_array(LIKEBTN_ENTITY_BP_ACTIVITY_POST, $instance['entity_name']) || in_array(LIKEBTN_ENTITY_BP_ACTIVITY_UPDATE, $instance['entity_name']) || in_array(LIKEBTN_ENTITY_BP_ACTIVITY_COMMENT, $instance['entity_name']) || in_array(LIKEBTN_ENTITY_BP_ACTIVITY_TOPIC, $instance['entity_name'])) {
         if ($post_types_count > 0) {
             $query .= " UNION ";
         }
         $query .= "\n                SELECT \n                    p.id as 'post_id',\n                    CONCAT( IF(p.action != '', p.action, IF(p.content !='', p.content, IF(p.primary_link != '', p.primary_link, p.type))), IF(p.content != '' && p.type != 'bbp_topic_create' && p.type != 'new_blog_post', CONCAT(': ', p.content), '') ) as 'post_title',\n                    p.date_recorded as 'post_date',\n                    CONVERT(pm_likes.meta_value, UNSIGNED INTEGER) as 'likes',\n                    CONVERT(pm_dislikes.meta_value, UNSIGNED INTEGER) as 'dislikes',\n                    CONVERT(pm_likes_minus_dislikes.meta_value, UNSIGNED INTEGER) as 'likes_minus_dislikes',\n                    IF (p.type = 'bbp_topic_create',\n                        '" . LIKEBTN_ENTITY_BP_ACTIVITY_TOPIC . "',\n                        IF (p.type = 'new_blog_post',\n                            '" . LIKEBTN_ENTITY_BP_ACTIVITY_POST . "',\n                            '" . LIKEBTN_ENTITY_BP_ACTIVITY_UPDATE . "'\n                        )\n                    ) as post_type,\n                    '' as post_mime_type,\n                    '' as url\n                 FROM {$wpdb->prefix}bp_activity_meta pm_likes\n                 LEFT JOIN {$wpdb->prefix}bp_activity p\n                     ON (p.id = pm_likes.activity_id)\n                 LEFT JOIN {$wpdb->prefix}bp_activity_meta pm_dislikes\n                     ON (pm_dislikes.activity_id = pm_likes.activity_id AND pm_dislikes.meta_key = '" . LIKEBTN_META_KEY_DISLIKES . "')\n                 LEFT JOIN {$wpdb->prefix}bp_activity_meta pm_likes_minus_dislikes\n                     ON (pm_likes_minus_dislikes.activity_id = pm_likes.activity_id AND pm_likes_minus_dislikes.meta_key = '" . LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES . "')\n                 WHERE\n                    pm_likes.meta_key = '" . LIKEBTN_META_KEY_LIKES . "' \n                    AND p.hide_sitewide = 0\n                    AND p.is_spam = 0 ";
         if (!empty($instance['time_range']) && $instance['time_range'] != 'all') {
             $query .= " AND p.user_registered >= '" . $this->timeRangeToDateTime($instance['time_range']) . "'";
         }
         $post_types_count++;
     }
     // bbPress Post
     if (in_array(LIKEBTN_ENTITY_BBP_POST, $instance['entity_name'])) {
         if ($post_types_count > 0) {
             $query .= " UNION ";
         }
         $query .= "\n                 SELECT\n                    p.ID as 'post_id',\n                    IF (p.post_title != '', p.post_title, p.post_content) as post_title,\n                    p.post_date,\n                    CONVERT(pm_likes.meta_value, UNSIGNED INTEGER) as 'likes',\n                    CONVERT(pm_dislikes.meta_value, UNSIGNED INTEGER) as 'dislikes',\n                    CONVERT(pm_likes_minus_dislikes.meta_value, UNSIGNED INTEGER) as 'likes_minus_dislikes',\n                    p.post_type,\n                    p.post_mime_type,\n                    '' as url\n                 FROM {$wpdb->prefix}postmeta pm_likes\n                 LEFT JOIN {$wpdb->prefix}posts p\n                     ON (p.ID = pm_likes.post_id)\n                 LEFT JOIN {$wpdb->prefix}postmeta pm_dislikes\n                     ON (pm_dislikes.post_id = pm_likes.post_id AND pm_dislikes.meta_key = '" . LIKEBTN_META_KEY_DISLIKES . "')\n                 LEFT JOIN {$wpdb->prefix}postmeta pm_likes_minus_dislikes\n                     ON (pm_likes_minus_dislikes.post_id = pm_likes.post_id AND pm_likes_minus_dislikes.meta_key = '" . LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES . "')\n                 WHERE\n                    pm_likes.meta_key = '" . LIKEBTN_META_KEY_LIKES . "'\n                    AND p.post_type in ('" . implode("', '", $likebtn_bbp_post_types) . "') \n                    AND p.post_status = 'publish' ";
         if (!empty($instance['time_range']) && $instance['time_range'] != 'all') {
             $query .= " AND post_date >= '" . $this->timeRangeToDateTime($instance['time_range']) . "'";
         }
         $post_types_count++;
     }
     // bbPress User
     if (in_array(LIKEBTN_ENTITY_BBP_USER, $instance['entity_name'])) {
         if ($post_types_count > 0) {
             $query .= " UNION ";
         }
         $query .= "\n                 SELECT\n                    p.ID as 'post_id',\n                    p.display_name as post_title,\n                    p.user_registered as 'post_date',\n                    CONVERT(pm_likes.meta_value, UNSIGNED INTEGER) as 'likes',\n                    CONVERT(pm_dislikes.meta_value, UNSIGNED INTEGER) as 'dislikes',\n                    CONVERT(pm_likes_minus_dislikes.meta_value, UNSIGNED INTEGER) as 'likes_minus_dislikes',\n                    '" . LIKEBTN_ENTITY_BBP_USER . "' as post_type,\n                    '' as post_mime_type,\n                    '' as url\n                 FROM {$wpdb->prefix}usermeta pm_likes\n                 LEFT JOIN {$wpdb->prefix}users p\n                    ON (p.ID = pm_likes.user_id)\n                 LEFT JOIN {$wpdb->prefix}usermeta pm_dislikes\n                    ON (pm_dislikes.user_id = pm_likes.user_id AND pm_dislikes.meta_key = '" . LIKEBTN_META_KEY_DISLIKES . "')\n                 LEFT JOIN {$wpdb->prefix}usermeta pm_likes_minus_dislikes\n                    ON (pm_likes_minus_dislikes.user_id = pm_likes.user_id AND pm_likes_minus_dislikes.meta_key = '" . LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES . "')\n                 WHERE\n                    pm_likes.meta_key = '" . LIKEBTN_META_KEY_LIKES . "' \n                    AND p.user_status = 0 ";
         if (!empty($instance['time_range']) && $instance['time_range'] != 'all') {
             $query .= " AND p.user_registered >= '" . $this->timeRangeToDateTime($instance['time_range']) . "'";
         }
         $post_types_count++;
     }
     if ($post_types_count > 1) {
         $query = "SELECT * FROM (" . $query . ") main_query";
     }
     $query .= "\n            ORDER BY ";
     switch ($instance['order']) {
         default:
         case 'likes':
             $query .= "likes";
             break;
         case 'dislikes':
             $query .= "dislikes";
             break;
         case 'likes_minus_dislikes':
             $query .= "likes_minus_dislikes";
             break;
     }
     $query .= " DESC";
     $query .= " {$query_limit}";
     // echo "<pre>";
     // print_r($query);
     // exit();
     $posts = $wpdb->get_results($query);
     $post_loop = array();
     if (count($posts) > 0) {
         foreach ($posts as $i => $db_post) {
             $post = array('id' => $db_post->post_id, 'type' => $db_post->post_type, 'post_mime_type' => $db_post->post_mime_type, 'title' => '', 'link' => '', 'likes' => '', 'dislikes' => '', 'date' => '', 'excerpt' => '');
             // Title
             $post['title'] = _likebtn_prepare_title($db_post->post_type, $db_post->post_title);
             // Link
             $post['link'] = _likebtn_get_entity_url($db_post->post_type, $db_post->post_id, $db_post->url);
             $post['likes'] = $db_post->likes;
             $post['dislikes'] = $db_post->dislikes;
             if ($show_date) {
                 $post['date'] = strtotime($db_post->post_date);
             }
             if ($show_excerpt) {
                 $post['excerpt'] = _likebtn_get_entity_excerpt($db_post->post_type, $db_post->post_id);
             }
             // For bbPress replies
             if (!$post['title']) {
                 $post['title'] = _likebtn_shorten_title($post['excerpt'], LIKEBTN_WIDGET_TITLE_LENGTH);
             }
             $post_loop[$i] = $post;
         }
     }
     // Get and include the template we're going to use
     ob_start();
     include $this->getTemplateHierarchy(self::TEMPLATE);
     $result = ob_get_contents();
     ob_get_clean();
     return $result;
 }
Пример #3
0
function _likebtn_prepare_title($entity_name, $title, $max = LIKEBTN_WIDGET_TITLE_LENGTH)
{
    $title = stripslashes($title);
    if (in_array($entity_name, array(LIKEBTN_ENTITY_BP_ACTIVITY_POST, LIKEBTN_ENTITY_BP_ACTIVITY_UPDATE, LIKEBTN_ENTITY_BP_ACTIVITY_COMMENT, LIKEBTN_ENTITY_BP_ACTIVITY_TOPIC))) {
        $title = strip_tags($title);
    }
    if (function_exists('qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage')) {
        $title = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage($title);
    }
    /*if ($entity_name == LIKEBTN_ENTITY_COMMENT) {
          if (mb_strlen($title) > 30) {
              $title = mb_substr($title, 0, 30) . '...';
          }
      } else*/
    return _likebtn_shorten_title($title, $max);
}