Example #1
0
 public static function sync($params)
 {
     $item = Item::find_by_subject($params["type"], $params["id"]);
     if (empty($item)) {
         // create
         Item::create($params);
     } else {
         // sync
         $item->update($params);
     }
 }
 function render()
 {
     // view-specific stuff
     switch ($this->view) {
         case 'item':
             $this->subject_type = $this->params['subject_type'];
             $this->subject_id = $this->params['subject_id'];
             $this->item = Item::find_by_subject($this->subject_type, $this->subject_id);
             if (empty($this->item)) {
                 return "Item {$this->subject_type}:{$this->subject_id} not found.  Is the frontend server sending it correctly?";
             }
             // actually get the fans here
             list($this->fans, $this->n_fans, $this->n_pages, $this->page, $this->per_page) = Fan::get_recent_by_subject($this->subject_type, $this->subject_id, $this->per_page, $this->page);
             // see if current user isFan
             $this->isFan = FALSE;
             foreach ($this->fans as $i => $fan) {
                 if ($fan->user_id == PA::$login_user->user_id) {
                     $this->isFan = TRUE;
                     break;
                 }
             }
             break;
         case 'recent_by_user':
             if (empty($this->uid)) {
                 return "user_id is required";
             }
             list($this->fanof, $this->n_items, $this->n_pages, $this->page, $this->per_page) = Fan::get_recent_by_user($this->uid, $this->per_page, $this->page);
             break;
         case 'top':
             // $this->items = Item::get_most_fans($this->subject_type, 5);
             break;
         default:
             return "Unknown FansWidgetModule view {$this->view}";
             break;
     }
     $tpl =& new Template(dirname(__FILE__) . "/" . $this->skin . "_" . $this->view . ".tpl", $this);
     $this->inner_HTML = $tpl->fetch();
     return parent::render();
 }
 function render()
 {
     $this->title = __('Reviews');
     $this->subject_type = @$this->params['subject_type'];
     $this->subject_id = @$this->params['subject_id'];
     $this->page = (int) @$this->params['page'] ? (int) $this->params['page'] : 1;
     switch ($this->view) {
         case 'item':
             // reviews on an item
             if (empty($this->subject_type) || empty($this->subject_id)) {
                 return "subject_type and subject_id are required";
             }
             $this->item = Item::find_by_subject($this->subject_type, $this->subject_id);
             if (empty($this->item)) {
                 return "Item {$this->subject_type}:{$this->subject_id} not found.  Is the frontend server sending it correctly?";
             }
             list($this->reviews, $this->n_reviews, $this->n_pages, $this->page, $this->per_page) = Review::get_recent_by_subject($this->subject_type, $this->subject_id, 5, $this->page);
             // get tags
             $this->tags = ItemTags::get_tags_for_item($this->subject_type, $this->subject_id);
             break;
         case 'recent_single':
             // most recent review of an item (a chosen new release)
             if (empty($this->subject_type) || empty($this->subject_id)) {
                 return "subject_type and subject_id are required";
             }
             $this->item = Item::find_by_subject($this->subject_type, $this->subject_id);
             if (empty($this->item)) {
                 return "Item {$this->subject_type}:{$this->subject_id} not found.  Is the frontend server sending it correctly?";
             }
             list($this->reviews, , , , ) = Review::get_recent_by_subject($this->subject_type, $this->subject_id, 1, 1);
             break;
         case 'recent':
             // recent reviews
             if (empty($this->subject_type)) {
                 return "subject_type is required";
             }
             $this->reviews = Review::get_recent_by_subject_type($this->subject_type, 3);
             foreach ($this->reviews as &$review) {
                 $review->item = Item::find_by_subject($review->subject_type, $review->subject_id);
                 if (empty($review->item)) {
                     return "Item {$this->subject_type}:{$this->subject_id} not found.  Is the frontend server sending it correctly?";
                 }
             }
             break;
         case 'top':
             // top reviewers
             $this->reviewers = User::get_top_reviewers(8);
             foreach ($this->reviewers as &$u) {
                 foreach ($u->get_profile_fields("videoplay", array("display_login_name", "url", "thumbnail_url")) as $k => $v) {
                     $u->{$k} = $v;
                 }
             }
             break;
         case 'recent_by_user':
             if (empty($this->uid)) {
                 return "user_id parameter is required";
             }
             // recent reviews from a user
             list($this->reviews, $this->n_reviews, $this->n_pages, $this->page, $this->per_page) = Review::get_recent_by_user($this->uid, 5, $this->page);
             break;
         default:
             return "Unknown ReviewModule view: {$this->view}";
     }
     // find unique author user_id values
     $user_ids = array();
     foreach ($this->reviews as $rev) {
         $user_ids[$rev->author_id] = 1;
     }
     if (!empty($user_ids)) {
         // load all users
         $us = new User();
         $users = $us->load_users(array_keys($user_ids));
         // add in videoplay-specific profile data
         foreach ($users as &$u) {
             $us->user_id = $u['user_id'];
             foreach ($us->get_profile_fields("videoplay", array("display_login_name", "url", "thumbnail_url")) as $k => $v) {
                 $u[$k] = $v;
             }
         }
         unset($u);
         // map ids to user info
         $user_map = array();
         foreach ($users as $u) {
             $user_map[$u['user_id']] = $u;
         }
         // and finally put them all in the review objects
         foreach ($this->reviews as $rev) {
             $rev->author = $user_map[$rev->author_id];
         }
     }
     $tpl =& new Template(dirname(__FILE__) . "/" . $this->skin . "_" . $this->view . ".tpl", $this);
     $this->inner_HTML = $tpl->fetch();
     if (preg_match($this->skin, "/_inner\$/")) {
         $content = parent::render();
     } else {
         $content = $this->inner_HTML;
     }
     return $content;
 }
Example #4
0
 /**
  * Function to rate an entity. If their is no existing record for the entity rating a new record will be inserted,
  * otherwise the existing entry will be updated  
  */
 public function rate()
 {
     Logger::log("Enter: Rating::rate()");
     try {
         $sql = 'SELECT index_id FROM {rating} WHERE rating_type = ? AND type_id = ? AND attribute_id = ? AND user_id = ?';
         $data = array($this->rating_type, $this->type_id, $this->attribute_id, $this->user_id);
         $res = Dal::query($sql, $data);
         if ($res->numRows()) {
             //update the existing rating
             $row = $res->fetchRow(DB_FETCHMODE_OBJECT);
             $this->index_id = $row->index_id;
             $sql = 'UPDATE {rating} SET rating = ?, max_rating = ? WHERE index_id = ?';
             $data = array($this->rating, $this->max_rating, $this->index_id);
             Dal::query($sql, $data);
         } else {
             //creating a new rating
             $sql = 'INSERT INTO {rating} (rating_type, type_id, attribute_id, rating, max_rating, user_id) values (?, ?, ?, ?, ?, ?)';
             $data = array($this->rating_type, $this->type_id, $this->attribute_id, $this->rating, $this->max_rating, $this->user_id);
             Dal::query($sql, $data);
         }
         //TODO: update denormalization
     } catch (PAException $e) {
         throw $e;
     }
     // update the avg rating for item if we have items
     try {
         $overall = $this->get_rating();
         // get the overall rating
         $avg_rating = $overall[0]->total_rating / $overall[0]->total_max_rating * $this->max_rating;
         $ratings = $overall[0]->ratings;
         require_once PA::$path . '/api/Item/Item.php';
         $item = Item::find_by_subject($this->rating_type, $this->type_id);
         $item->update(array("average_rating" => $avg_rating, "rating_count" => $ratings));
     } catch (PAException $e) {
         Logger::log("NOTE: Rating::rate(), there seems to be a problem with items " . $e->getMessage());
         throw $e;
     }
     Logger::log("Exit: Rating::rate()");
 }
 function render()
 {
     $login_uid = @PA::$login_user->user_id;
     $this->gid = @$this->params['blog_id'];
     $this->blog_name = @$this->params['blog_name'];
     $this->note = '';
     if ($this->blog_name) {
         $this->find_or_create_blog();
     }
     if ($this->gid) {
         $this->type == 'group';
         $group = new Group();
         $group->collection_id = $this->gid;
         $group->load($this->gid);
         $this->group_member = Group::member_exists($group->collection_id, $login_uid) ? TRUE : FALSE;
         switch ($this->view) {
             case "recent_post":
                 // load content
                 $this->contents = $group->get_contents_for_collection($type = 'all', $cnt = FALSE, 1, 1, 'created', 'DESC');
                 $this->inner_template = 'recent_post.tpl';
                 break;
             case 'user':
                 // load content
                 if (@$this->params['cid']) {
                     // permalink, load only this one
                     $bp = new BlogPost();
                     try {
                         $bp->load((int) $this->params['cid']);
                         $this->count = 1;
                         $content = array();
                         foreach ($bp as $k => $v) {
                             $content[$k] = $v;
                         }
                         $this->contents[] = $content;
                     } catch (PAException $e) {
                         $this->err = __("Couldn't load BlogPost. ") . $e->getMessage();
                     }
                 } else {
                     $this->count = $group->get_contents_for_collection($type = 'all', $cnt = TRUE, 'all', 0, $sort_by = 'created', $direction = 'DESC');
                     $this->contents = $group->get_contents_for_collection($type = 'all', $cnt = FALSE, $this->show, $this->page, 'created', 'DESC');
                 }
                 break;
             case "admin":
                 $this->title = "Managing authors for " . $this->blog_name;
                 $this->inner_template = 'manageauthors.tpl';
                 // find members
                 $this->members = $group->get_members();
                 $this->member_count = count($this->members);
                 break;
         }
         // load Items for all BlogPosts -> for Comments to work
         foreach ($this->contents as $i => $post) {
             $item_params = array("type" => 'blogpost', "id" => $post['content_id'], "name" => $post['content_id'], "thumbnail" => "", "thumbnail_w" => "0", "thumbnail_h" => "0", "genres" => "blog", "url" => $this->blog_url . "?b_cid=" . $post['content_id']);
             Item::sync($item_params);
             // create or update row in 'items' database table
             $item = Item::find_by_subject('blogpost', $post['content_id']);
             $this->contents[$i]['comment_count'] = $item->comment_count;
         }
     } else {
         $this->err = __("No Blog found.");
     }
     $tmp_file = dirname(__FILE__) . "/" . $this->skin . "_" . $this->inner_template;
     $inner_html_gen =& new Template($tmp_file, $this);
     $this->inner_HTML = $inner_html_gen->fetch();
     $content = parent::render();
     return $content;
 }
Example #6
0
function peopleaggregator_getItems($args)
{
    global $_PA;
    require_once PA::$path . "/api/Item/Item.php";
    $remote_user = @$args['remoteUser'];
    if ($remote_user) {
        if (!$_PA->enable_widgetization_server) {
            throw new PAException(OPERATION_NOT_PERMITTED, "Widgetization disabled; you cannot use remote user functions");
        }
        require_once PA::$path . "/api/User/ShadowUser.php";
        require_once PA::$path . "/api/Rating/Rating.php";
        require_once PA::$path . "/ext/PA_Rating/PA_Rating.php";
        $remote_id = explode(":", $remote_user);
        if (count($remote_id) == 1) {
            throw new PAException(INVALID_ID, "Remote user IDs must be of the form 'namespace:id'");
        }
        $u = new ShadowUser($remote_id[0]);
        $u->load($remote_id[1]);
        if (!$u->user_id) {
            throw new PAException(USER_NOT_FOUND, "Failed to locate user '" . $remote_id[1] . "' in namespace '" . $remote_id[0] . "'");
        }
    } else {
        $u = NULL;
    }
    $items_out = array();
    foreach (explode(",", $args['ids']) as $packed_id) {
        $item_id = explode(":", $packed_id);
        if (count($item_id) == 1) {
            throw new PAException(INVALID_ID, "Individual item IDs must be of the form 'type:id'");
        }
        $item = Item::find_by_subject($item_id[0], $item_id[1]);
        if ($item == NULL) {
            continue;
        }
        // ignore IDs that don't exist
        $item_out = item_to_array($item);
        if ($u) {
            $params = array('rating_type' => $item_id[0], 'user_id' => $u->user_id, 'type_id' => $item_id[1]);
            $user_rating_details = PA_Rating::get($params);
            if (count($user_rating_details)) {
                $item_out['userRating'] = (int) $user_rating_details[0]->rating;
            }
        }
        $items_out[] = $item_out;
    }
    return array("success" => TRUE, "msg" => "Retrieved " . count($items_out) . " item(s)", "items" => $items_out);
}
 function render()
 {
     // if (empty(PA::$login_user)) return __("Login required");
     $this->title = __('Comments');
     $this->subject_type = @$this->params['subject_type'];
     $this->page = (int) @$this->params['page'] ? (int) $this->params['page'] : 1;
     switch ($this->view) {
         case 'item':
             $this->subject_id = $this->params['subject_id'];
             $this->item = Item::find_by_subject($this->subject_type, $this->subject_id);
             if (empty($this->item)) {
                 return "Item {$this->subject_type}:{$this->subject_id} not found.  Is the frontend server sending it correctly?";
             }
             if (empty($this->subject_type) || empty($this->subject_id)) {
                 return "subject_type and subject_id are required";
             }
             list($this->comments, $this->n_comments, $this->n_pages, $this->page, $this->per_page) = Comment2::get_recent_by_subject($this->subject_type, $this->subject_id, 5, $this->page);
             break;
         case 'most_commented':
             if (empty($this->subject_type)) {
                 return "subject_type is required";
             }
             $this->items = Item::get_most_commented_by_subject_type($this->subject_type, 3);
             break;
         case 'recent_by_user':
             if (empty($this->uid)) {
                 return "user_id is required";
             }
             //TODO
             list($this->comments, $this->n_comments, $this->n_pages, $this->page, $this->per_page) = Comment2::get_recent_by_user($this->uid, 5, $this->page);
             break;
         default:
             return "Unknown CommentModule view: {$this->view}";
     }
     // find unique author user_id values
     $user_ids = array();
     foreach ($this->comments as $c) {
         $user_ids[$c->author_id] = 1;
     }
     if (!empty($user_ids)) {
         // load all users
         $us = new User();
         $users = $us->load_users(array_keys($user_ids));
         // add in videoplay-specific profile data
         foreach ($users as &$u) {
             $us->user_id = $u['user_id'];
             foreach ($us->get_profile_fields("videoplay", array("display_login_name", "url", "thumbnail_url")) as $k => $v) {
                 $u[$k] = $v;
             }
         }
         unset($u);
         // free the reference so we don't break stuff down below by assigning $u
         // map ids to user info
         $user_map = array();
         foreach ($users as $u) {
             $user_map[$u['user_id']] = $u;
         }
         // and finally put them all in the comment objects
         foreach ($this->comments as $rev) {
             $rev->author = $user_map[$rev->author_id];
         }
     }
     $this->inner_HTML = $this->generate_inner_html();
     if (preg_match($this->skin, "/_inner\$/")) {
         $content = parent::render();
     } else {
         $content = $this->inner_HTML;
     }
     return $content;
 }
 function get_recent_by_user($uid, $cnt)
 {
     $scale = 5;
     $user_ratings = PA_Rating::get_recent_by_user($uid, $cnt);
     foreach ($user_ratings as $i => $r) {
         $r->html = $this->stars($r->rating);
         $r->item = Item::find_by_subject($r->rating_type, $r->type_id);
     }
     return $user_ratings;
 }