/** * XXX rimuovere utilizzo diretto db * @param string $user_identifier * @return array */ public static function getUserAverageAndCount($user_identifier){ $mapper = PCModelReview::getMapper(); $pdo = PCDatabase::getSharedDatabaseConnection(); $select = "SELECT avg(usability) as usability, avg(reliability) as reliability,"; $select .= " avg(contents) as contents, count(contents) as tot FROM ".$mapper->getTableName(); $select .= " WHERE user_identifier = :id ;"; $prepared = $pdo->prepare($select); $result = $prepared->execute(array(':id'=> $user_identifier)); 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']; $tot = (int)$item['tot']; $avg = ($usability + $reliability + $contents )/3.0; return array( 'avg'=>$avg, 'tot'=>$tot, 'usability'=>$usability, 'reliability'=>$reliability, 'contents'=>$contents ); }
/** * @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; }