/** * * Posta sulla timeline di Facebook (se possibile) * @param array $reviewDescription * @param PCModelWebsite $onSite * @param PCModelUserOauth $user * @return boolean */ public static function postReviewToFacebook($reviewDescription, $onSite, $user){ PCAutoloader::importLibrary('facebook'); $oauth = $user->getOauthStore(); if($oauth == null){ return FALSE; } $domain = $onSite->getDomain(); $usa = $reviewDescription['usability']; $rel = $reviewDescription['reliability']; $cont = $reviewDescription['contents']; $vote = sprintf("%.1f",(($usa+$rel+$cont)/3.0)); $text = "I've just reviewed $domain (Vote: $vote) using http://websherpa.me : ".$reviewDescription['comment']; $facebook = new Facebook(array( "appId" => FB_APP_ID, "secret" => FB_APP_SECRET, "cookie" => true )); $facebook->setAccessToken($oauth['oauth_token']); try { $result = $facebook->api("/me/feed", 'post', array( 'message' => $text, 'name' => 'WebSherpa', 'link' => "http://websherpa.me/sites/site?id=".$onSite->getIdentifier(), 'picture' => 'http://websherpa.me/public/fresh/img/logo_footer.png', )); return isset($result['id']); } catch (FacebookApiException $exc) { c_dump($exc); return FALSE; } return FALSE; }
/** * * @param string $user_id * @param PCModelWebsite $site * @return PCModelReview */ public static function lastReviewForSite($user_id, $site){ if($user_id == NULL) return NULL; $keys = array('user_identifier' => $user_id, 'site_identifier'=> $site->getIdentifier()); $reviews = PCModelManager::fetchModelObjectInstances(PCModelReview::getMapper(), $keys); if(count($reviews) <= 0){ return NULL; } return $reviews[0]; }
/** * * @param PCRequest $request */ public function siteAction($request) { $param = $request->getParams(); $hostName = $request->dequeuePathComponent(); if (isset($hostName)) { $site = PCMapperWebsite::getSiteWithDomain($hostName); if (isset($site) == FALSE) { throw new PCExceptionController("Page not found", 404); } $identifier = $site->getIdentifier(); throw new PCExceptionRedirection("/sites/site?id=$identifier"); } if (isset($param['id']) == FALSE) throw new PCExceptionController("Page not found", 404); /** @value PCModelWebsite $site */ $site = PCModelManager::fetchObjectWithIdentifier(PCModelWebsite::getMapper(), $param['id'], NULL, TRUE); if (!isset($site)) { throw new PCExceptionController("Page not found", 404); } if ($site->cacheIsExpired()) { $site = PCMapperWebsite::recacheSiteReview($site); if (isset($site) == FALSE) { throw new PCExceptionController('Error caching', 500); } } $result = array(); $result['siteCategory'] = PCMapperCategory::nameFromIdentifier($site->getCategory()); $result['site_id'] = $site->getIdentifier(); $result['siteHost'] = $site->getUrl(); $result['reliability'] = $site->getReliability(); $result['contents'] = $site->getContents(); $result['usability'] = $site->getUsability(); $result['averageVote'] = $site->getVote(); $result['votesCount'] = $site->getNumber_of_votes(); $result['dateAdded'] = $site->getDate_added()->format("Y-m-d"); $reviews = PCMapperReview::getReviewsWithSiteIdentifier($site->getIdentifier(), 0); $reviewsList = array(); foreach ($reviews as $r) { $reviewArray = array(); $reviewArray["vote"] = sprintf("%.1f", $r->getVote()); $user = PCModelManager::fetchObjectWithIdentifier(PCModelUser::getMapper(), $r->getUserIdentifier(), NULL, TRUE); $reviewArray["user"] = $user->getUsername(); $reviewArray["date_added"] = $r->getDate_added()->format("Y-m-d"); $reviewArray["comment"] = $r->getComment(); $reviewArray["reviewId"] = $r->getIdentifier(); $reviewArray["userId"] = $r->getUserIdentifier(); $reviewArray['reliability'] = sprintf("%.1f", $r->getReliabilityVote()); $reviewArray['contents'] = sprintf("%.1f", $r->getContentsVote()); $reviewArray['usability'] = sprintf("%.1f", $r->getUsabilityVote()); $reviewsList[] = $reviewArray; } $result['reviews'] = $reviewsList; $result['title'] = "WebSherpa - " . $site->getUrl(); return PCRendererHTML::rendererForView('host', $result); }
/** * @XXX remove direct database interaction * @param PCModelWebsite $site */ public static function recacheSiteReview($site) { //error_log('RECACHING SITE INFO: '.$site->getIdentifier()); $select = "SELECT avg(usability) as usability, avg(reliability) as reliability,"; $select .= " avg(contents) as contents, count(identifier) as count "; $mapper = PCModelReview::getMapper(); $select .= " FROM " . $mapper->getTableName() . " WHERE site_identifier = :id"; $pdo = PCDatabase::getSharedDatabaseConnection(); $prepared = $pdo->prepare($select); $result = $prepared->execute(array(":id" => $site->getIdentifier())); if ($result === FALSE) { return NULL; } $item = $prepared->fetch(PDO::FETCH_ASSOC); if (!isset($item)) { return NULL; } $usability = (double) $item['usability']; $reliability = (double) $item['reliability']; $contents = (double) $item['contents']; $count = (double) $item['count']; $cache_time = new DateTime('now', new DateTimeZone('UTC')); $keys = array('usability' => $usability, 'reliability' => $reliability, 'contents' => $contents, 'number_of_votes' => $count, 'cached' => $cache_time->format('Y-m-d H:i:s')); $condition = "identifier = :id"; $bindings = array(':id' => $site->getIdentifier()); $websiteMapper = PCModelWebsite::getMapper(); if (PCModelManager::updateObject($websiteMapper, $keys, $condition, $bindings)) { $site->cached_date = $cache_time; $site->contents = $contents; $site->number_of_votes = $count; $site->reliability = $reliability; $site->usability = $usability; PCCache::cacheProvider()->setItem($site, $websiteMapper->getTableName() . $site->getIdentifier()); return $site; } return NULL; }
/** * Posta sulla timeline di twitter * @param array $reviewDescription * @param PCModelWebsite $onSite * @param PCModelUserOauth $user * @return boolean */ public static function postReviewToTwitter($reviewDescription, $onSite ,$user){ PCAutoloader::importLibrary('twitter'); $oauth = $user->getOauthStore(); if($oauth == null) return FALSE; $connection = new TwitterOAuth(TW_CONSUMER_KEY, TW_CONSUMER_SECRET, $oauth['oauth_token'], $oauth['oauth_secret']); $domain = $onSite->getDomain(); $usa = $reviewDescription['usability']; $rel = $reviewDescription['reliability']; $cont = $reviewDescription['contents']; $vote = sprintf("$.1f",(($usa+$rel+$cont)/3.0));; $text = "I've just reviewed http://$domain (Vote: $vote) using @WebSherpa_me http://websherpa.me/sites/site?id=".$onSite->getIdentifier(); $status = $connection->post('statuses/update', array('status' => $text)); if(isset($status->errors)) return FALSE; return TRUE; }
/** * Restituisce le recensioni legate ad un sito oppure ad un utente * @param PCRequest $request */ public function getSiteReviewsAction($request) { $params = $request->getParams(); if( isset($params['offset']) == FALSE) return new PCRendererJSON(array("error" => "missing param 'offset'"), 400); $offset = $params['offset']; if( isset($params['site_id'])){ $site_id = $params['site_id']; $result = array(); $reviews = PCMapperReview::getReviewsWithSiteIdentifier($site_id, $offset); foreach ($reviews as $r) { $tmp = array(); $tmp["vote"] = sprintf("%.1f", $r->getVote()); //XXX pensare ad un modo più efficente per risolvere gli identificativi $user = PCModelManager::fetchObjectWithIdentifier(PCModelUser::getMapper(), $r->getUserIdentifier(), NULL, TRUE); $tmp["user"] = $user->getUsername(); $tmp["date_added"] = $r->getDate_added()->format("Y-m-d"); $tmp["comment"] = $r->getComment(); $tmp["reviewId"] = $r->getIdentifier(); $tmp["userId"] = $user->getIdentifier(); $tmp['reliability'] = sprintf("%.1f", $r->getReliabilityVote()); $tmp['contents'] = sprintf("%.1f", $r->getContentsVote()); $tmp['usability'] = sprintf("%.1f", $r->getUsabilityVote()); $result[] = $tmp; } return new PCRendererJSON($result); } if (isset($params['user_id'])) { $user_id = $params['user_id']; $result = array(); $user = PCModelManager::fetchObjectWithIdentifier(PCModelUser::getMapper(), $user_id, NULL, TRUE); if (!isset($user)) new PCRendererJSON(array("error" => "wrong user identifier"), 400); // $user_name = $user->getUsername(); $reviews = PCMapperReview::getReviewsWithUserIdentifier($user_id, $offset); foreach ($reviews as $r) { $tmp = array(); //XXX pensare ad un modo più efficente per risolvere gli identificativi $site = PCModelManager::fetchObjectWithIdentifier(PCModelWebsite::getMapper(), $r->getSiteIdentifier(), NULL, TRUE); $tmp["vote"] = sprintf("%.1f",$r->getVote()); $tmp["site"] = $site->getDomain(); $tmp["date_added"] = $r->getDate_added()->format("Y-m-d"); $tmp["comment"] = $r->getComment(); $tmp["reviewId"] = $r->getIdentifier(); $tmp["siteId"] = $site->getIdentifier(); $tmp['reliability'] = sprintf("%.1f",$r->getReliabilityVote()); $tmp['contents'] = sprintf("%.1f",$r->getContentsVote()); $tmp['usability'] = sprintf("%.1f",$r->getUsabilityVote()); $result[] = $tmp; } return new PCRendererJSON($result); } return new PCRendererJSON(array("error" => "missing param 'site_id' or 'user_id"), 400); }