Example #1
0
 /**
  * checks for userID of existing user in sessions, then cookies
  * if not found, it creates a new user and saves his userID into the Sessions and cookies
  */
 function __construct()
 {
     session_start();
     if (isset($_SESSION["user"]) and intval($_SESSION["user"]) != 0) {
         //everything is 	OK
         $this->userID = $_SESSION["user"];
         $this->sessionID = $_SESSION["session_no"];
     } else {
         if (isset($_COOKIE["user"]) and intval($_COOKIE["user"]) != 0) {
             //starting new session, session_no++, post updated cookie
             $cookie_expire = time() + 60 * 60 * 24 * 30 * 24;
             if (isset($_COOKIE["session_no"])) {
                 $ses_no = $_COOKIE["session_no"];
             } else {
                 $ses_no = 0;
             }
             $ses_no++;
             $this->userID = $_COOKIE["user"];
             $_SESSION["user"] = $_COOKIE["user"];
             $_SESSION["session_no"] = $ses_no;
             $this->sessionID = $ses_no;
             setcookie("user", $_COOKIE["user"], $cookie_expire);
             setcookie("session_no", $ses_no, $cookie_expire);
         } else {
             $usertable = Config::$userTableName;
             //check whether user is a bot or a human
             $botFreeUser = true;
             $browser = $_SERVER["HTTP_USER_AGENT"];
             $botNames = Config::$botsAndCrawlersNames;
             foreach ($botNames as $name) {
                 if (stripos($browser, $name) !== false) {
                     $botFreeUser = false;
                     break;
                 }
             }
             if ($botFreeUser) {
                 $query = "insert into  `" . $usertable . "`\n                        (`name`)\n                        values\n                        (\"Anonym " . Date("Y-m-d h:i:s") . ", browser:" . $_SERVER["HTTP_USER_AGENT"] . "\") ";
                 $database = ComponentDatabase::get_instance();
                 $qr = $database->executeQuery($query);
                 $this->userID = $database->getInsertedId();
                 //starting new session, create cookie
                 $cookie_expire = time() + 60 * 60 * 24 * 30 * 24;
                 $ses_no = 1;
                 $_SESSION["user"] = $this->userID;
                 $_SESSION["session_no"] = $ses_no;
                 $this->sessionID = $ses_no;
                 setcookie("user", $this->userID, $cookie_expire);
                 setcookie("session_no", $ses_no, $cookie_expire);
             }
             //echo "new user create";
         }
     }
 }
Example #2
0
 /**
  * saves event to the database
  */
 function saveEvent()
 {
     /**
      * TODO: kontrola typu udalosti, pripadne akce svazane s typem
      */
     /* check whether we have an approved event*/
     if (in_array($this->event->getEventType(), Config::$recognizedAggregatedEvent)) {
         $database = ComponentDatabase::get_instance();
         echo $this->event->getSQL();
         $database->executeQuery($this->event->getSQL());
         $database->disconnect();
     }
 }
Example #3
0
 /**
  * @return next row from the ResponseList
  */
 public function getNextRow()
 {
     if (is_array($this->ResponseList)) {
         if (isset($this->ResponseList[$this->responseListPosition])) {
             $this->responseListPosition++;
             return $this->ResponseList[$this->responseListPosition - 1];
         } else {
             return false;
         }
     } else {
         $db = ComponentDatabase::get_instance();
         return $db->getNextRow($this->ResponseList);
     }
 }
Example #4
0
 /**
  * saves event to the database
  */
 function saveEvent()
 {
     /**
      * TODO: kontrola typu udalosti, pripadne akce svazane s typem
      */
     /* check whether we have an approved event*/
     if (in_array($this->event->getEventType(), Config::$recognizedAggregatedEvent)) {
         $database = ComponentDatabase::get_instance();
         $implicitTable = Config::$implicitEventStorageTable;
         $sql_vsm = "select count(distinct objectID) as pocet from {$implicitTable} " . "where userID=" . $this->event->getUserID() . " and eventType=\"pageview\" ";
         //echo $this->event->getSQL();
         $objects = 0;
         $d = $database->executeQuery($sql_vsm);
         $obj = $d->getResponseList();
         while ($rec = $database->getNextRow($obj)) {
             $objects = $rec["pocet"];
         }
         //echo $sql_vsm;
         //echo $this->event->getSQL($objects) ;
         $database->executeQuery($this->event->getSQL($objects));
     }
 }
Example #5
0
 /**
  * returns $noOfObjects of the best objects for users in $usersArray
  * method just pick randomly demanded number of the objects from the allowed ones
  * @param <type> $usersArray array of (userID => similarity) of the selected users
  * @param <type> $noOfObjects number of objects, we search for
  * @param <type> $objectList list of allowed objects
  * @return <type> array( objectID => similarity: 1 ) )
  */
 public function getBestObjectForUsers($usersArray, $noOfObjects, $objectList = "")
 {
     $table = Config::$objectTableName;
     $objectIDName = Config::$objectIDColumnName;
     if (is_array($objectList) and sizeof($objectList) != 0) {
         $objectQuery = " `" . $objectIDName . "` in (";
         $first = 1;
         foreach ($objectList as $obj) {
             if ($first) {
                 $first = 0;
                 $objectQuery .= "" . $obj . "";
             } else {
                 $objectQuery .= ", " . $obj . "";
             }
         }
         $objectQuery .= ")";
     } else {
         $objectQuery = " 1 ";
     }
     $query = "select distinct `" . $objectIDName . "` from `" . $table . "` where " . $objectQuery . " order by RAND() limit " . $noOfObjects . " ";
     //echo $query;
     $database = ComponentDatabase::get_instance();
     $qr = $database->executeQuery($query);
     $objectsList = $qr->getResponseList();
     //packing answer into the array
     if (!$objectsList) {
         //wrong query
         $errLog = ErrorLog::get_instance();
         $errLog->logError("Wrong SQL query, no prediction made", "Dummy");
         return false;
     } else {
         $returnlist = array();
         while ($record = $database->getNextRow($objectsList)) {
             $returnlist[$record[$objectIDName]] = 1;
         }
         return $returnlist;
     }
 }
Example #6
0
 /**
  * method returns count of events specified type
  * usable for decision which method to use
  * @param $eventType type of the interaction: "implicit" or "explicit"
  * @param $eventName optional name of the event (pageview, user_rating etc.)
  * @return <type> num. of events
  */
 public static function getEventsCount($eventType, $eventName = "")
 {
     if ($eventType == "implicit") {
         $table = Config::$implicitEventStorageTable;
     } else {
         if ($eventType == "explicit") {
             $table = Config::$explicitEventStorageTable;
         } else {
             return false;
         }
     }
     if ($eventName != "") {
         $ev = "`eventType`=\"" . $eventName . "\"";
     } else {
         $ev = "";
     }
     $query = "select  count(`objectID`) as `num` from `" . $table . "`\n                    where " . $ev . " ";
     $database = ComponentDatabase::get_instance();
     $qr = $database->executeQuery($query);
     $objectsList = $qr->getResponseList();
     $record = $database->getNextRow($objectsList);
     $res = $record["num"];
     return $res;
 }
Example #7
0
 private function associateToArray($mysqlResponse)
 {
     //not necesarry to save all this data (possible second query) and in first get only the objectID
     $database = ComponentDatabase::get_instance();
     $objectID = Config::$objectIDColumnName;
     $this->queryResponseArray = array();
     while ($record = $database->getNextRow($mysqlResponse)) {
         $this->queryResponseArray[$record[$objectID]] = $record;
         if ($record["relevance"] != "") {
             $this->queryObjectRelevance[$record[$objectID]] = $record["relevance"];
         } else {
             $this->queryObjectRelevance[$record[$objectID]] = 1;
         }
     }
     $database->freeResult($mysqlResponse);
 }
Example #8
0
 protected function usersToObjectRate($dbQuery)
 {
     $database = ComponentDatabase::get_instance();
     $qr = $database->executeQuery($dbQuery);
     $eventsList = $qr->getResponseList();
     //rating objects
     if (!$eventsList) {
         //wrong query
         $errLog = ErrorLog::get_instance();
         $errLog->logError("No events of the specified type found, no prediction made", "Standard");
         return false;
     } else {
         while ($record = $database->getNextRow($eventsList)) {
             if (array_key_exists($record["objectID"], $this->objectToScoreArray)) {
                 $objectRating = $this->objectToScoreArray[$record["objectID"]];
             } else {
                 $objectRating = 0;
             }
             if (is_array($this->users) and array_key_exists($record["userID"], $this->users)) {
                 $userImportance = $this->users[$record["userID"]];
             } else {
                 $userImportance = 0;
             }
             $objectRating = $this->ratingAggregation($objectRating, $record["eventValue"], $record["eventType"], $this->eventImportance, $userImportance);
             $this->objectToScoreArray[$record["objectID"]] = $objectRating;
         }
     }
 }
 /**
  * Sends query to the database, returns its response
  * @return queryResponse class
  */
 function executeQuery()
 {
     $database = ComponentDatabase::get_instance();
     return $database->executeQuery($this->query->getSQL());
 }
Example #10
0
 /**
  *Returns set of users, that this heuristic approved to be used in similarity measuring
  */
 private function getUserHeuristics($userID, $table, $eventNames, $objects)
 {
     $query = "select `userID`, count(DISTINCT `objectID`) as `count`\n               from `" . $table . "`\n                where `userID`!=" . $userID . " and " . $eventQueryImplicit . " " . $objects . "\n                group by `userID` having `count`>=2";
     //echo $query;
     $database = ComponentDatabase::get_instance();
     $qr = $database->executeQuery($query);
     $eventsList = $qr->getResponseList();
     if (!$eventsList) {
         //wrong query
         $errLog = ErrorLog::get_instance();
         $errLog->logError("No user passed the heuristics, keeping the full no. Of Users", "Standard");
         return " ";
     } else {
         $result = "and `userID` in (";
         $first = 1;
         while ($record = $database->getNextRow($eventsList)) {
             if ($first) {
                 $first = 0;
                 $result .= $record["userID"];
             } else {
                 $result .= "," . $record["userID"];
             }
         }
         $result .= " )";
         return $result;
     }
 }
Example #11
0
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
require_once "../public/ComponentCore.php";
//loadCore every time when computing meta preferences (PreferenceComputation)
ComponentCore::loadCoreEvents();
//name of the target table
//database connection needs to be established
$tableName = "implicit_events";
if ($_POST["visitID"] > 0) {
    $visit_name = "`visitID`,";
    $visit_val = "" . $_POST["visitID"] . ",";
} else {
    $visit_name = "";
    $visit_val = "";
}
//create SQL code
$sql = "\ninsert into `" . $tableName . "`\n     (" . $visit_name . " `userID`,`objectID`,`sessionID`,`pageID`,`pageType`,`imagesCount`,\n         `textSizeCount`,`linksCount`,`windowSizeX`,`windowSizeY`,`pageSizeX`,`pageSizeY`,`objectsListed`,\n      `startDatetime`,`endDatetime`,`timeOnPage`,`mouseClicksCount`,`pageViewsCount`,`mouseMovingTime`,\n      `mouseMovingDistance`,`scrollingCount`,`scrollingTime`,`scrollingDistance`,\n      `printPageCount`,`selectCount`,`selectedText`,`copyCount`,`copyText`,`clickOnPurchaseCount`,\n      `purchaseCount`,`forwardingToLinkCount`,`forwardedToLink`,`logFile`) \n     VALUES ( " . $visit_val . " " . $_POST["userID"] . ",  " . $_POST["objectID"] . "," . $_POST["sessionID"] . ",\"" . $_POST["pageID"] . "\", \"" . $_POST["pageType"] . "\"," . $_POST["imagesCount"] . ",\n              " . $_POST["textSizeCount"] . "," . $_POST["linksCount"] . ", " . $_POST["windowSizeX"] . ", " . $_POST["windowSizeY"] . ", " . $_POST["pageSizeX"] . ", " . $_POST["pageSizeY"] . ", \"" . $_POST["objectsListed"] . "\",\n            \"" . $_POST["startDatetime"] . "\", \"" . $_POST["endDatetime"] . "\", " . $_POST["timeOnPageMiliseconds"] . ", " . $_POST["mouseClicksCount"] . ", " . $_POST["pageViewsCount"] . "," . $_POST["mouseMovingTime"] . ",\n              " . $_POST["mouseMovingDistance"] . "," . $_POST["scrollingCount"] . ", " . $_POST["scrollingTime"] . ", " . $_POST["scrollingDistance"] . ",\n              " . $_POST["printPageCount"] . "," . $_POST["selectCount"] . ", \"" . $_POST["selectedText"] . "\", " . $_POST["copyCount"] . ", \"" . $_POST["copyText"] . "\", " . $_POST["clickOnPurchaseCount"] . ", \n              " . $_POST["purchaseCount"] . ", " . $_POST["forwardingToLinkCount"] . ",\"" . $_POST["forwardedToLink"] . "\",\"" . $_POST["logFile"] . "\"                                                                                                                                     \n         )\nON DUPLICATE KEY\nUPDATE  `endDatetime`= \"" . $_POST["endDatetime"] . "\",\n        `timeOnPage`= `timeOnPage` + VALUES(`timeOnPage`),\n        `mouseClicksCount`= `mouseClicksCount` + VALUES(`mouseClicksCount`),\n        `pageViewsCount`= `pageViewsCount` + VALUES(`pageViewsCount`),\n        `mouseMovingTime`= `mouseMovingTime` + VALUES(`mouseMovingTime`),\n        `mouseMovingDistance`= `mouseMovingDistance` + VALUES(`mouseMovingDistance`),\n        `scrollingCount`= `scrollingCount` + VALUES(`scrollingCount`),\n        `scrollingTime`= `scrollingTime` + VALUES(`scrollingTime`),\n        `scrollingDistance`= `scrollingDistance` + VALUES(`scrollingDistance`),\n        `printPageCount`= `printPageCount` + VALUES(`printPageCount`),\n        `selectCount`= `selectCount` + VALUES(`selectCount`),\n        `selectedText`= concat(`selectedText` , VALUES(`selectedText`)),\n        `searchedText`= concat(`searchedText` , VALUES(`searchedText`)),\n        `copyCount`= `copyCount` + VALUES(`copyCount`),\n        `copyText`= concat(`copyText` , VALUES(`copyText`)),\n        `clickOnPurchaseCount`= `clickOnPurchaseCount` + VALUES(`clickOnPurchaseCount`),\n        `purchaseCount`= `purchaseCount` + VALUES(`purchaseCount`),\n        `forwardingToLinkCount`= `forwardingToLinkCount` + VALUES(`forwardingToLinkCount`),\n        `forwardedToLink`= concat( `forwardedToLink` , VALUES(`forwardedToLink`) ),\n        `logFile`= concat(`logFile`, VALUES(`logFile`) )\n";
//echo $sql;
$database = ComponentDatabase::get_instance();
$database->executeQuery("SET character_set_client=UTF8");
$database->executeQuery($sql);
//print_r($_POST);
//echo $sql;
//echo mysql_error();
if (!$_POST["visitID"] > 0) {
    echo mysql_insert_id();
} else {
    echo $_POST["visitID"];
}
Example #12
0
 /**
  * method removes $decayCoeficient portion of the events listed in $eventNames with the lowest id
  * in $eventsTable table from the database - deletes them permanently
  * @param <type> $eventsTable storing table name
  * @param <type> $eventNames array of events name
  * @param <type> $decayCoeficient [0,1] interval - portion of data to be deleted
  * @return <type> false on error, true otherwise
  */
 public static function removeEvents($eventsTable, $eventNames, $decayCoeficient = 0.1)
 {
     $correct = true;
     if ($decayCoeficient <= 0 or $decayCoeficient > 1) {
         $correct = false;
     }
     if ($eventsTable == "implicitEvents") {
         $allowedEvents = Config::$recognizedImplicitEvent;
         $table = Config::$implicitEventStorageTable;
     } else {
         if ($eventsTable == "explicitEvents") {
             $allowedEvents = Config::$recognizedExplicitEvent;
             $table = Config::$explicitEventStorageTable;
         } else {
             if ($eventsTable == "aggregatedEvents") {
                 $allowedEvents = Config::$recognizedAggregatedEvent;
                 $table = Config::$aggregatedEventStorageTable;
             } else {
                 $correct = false;
             }
         }
     }
     if (is_array($eventNames) and sizeof($eventNames) != 0) {
         $evQuery = " `eventType` in (";
         $first = 1;
         foreach ($eventNames as $evName) {
             if (in_array($evName, $allowedEvents)) {
                 if ($first) {
                     $first = 0;
                     $evQuery .= "\"" . $evName . "\"";
                 } else {
                     $evQuery .= ", " . "\"" . $evName . "\"";
                 }
             } else {
                 $correct = false;
             }
         }
         $evQuery .= ")";
     } else {
         $evQuery = "1";
     }
     if ($correct) {
         $database = ComponentDatabase::get_instance();
         if ($eventsTable == "implicitEvents" or $eventsTable == "explicitEvents") {
             $query = "select count(`id`) as `count` from " . $table . "  where " . $evQuery . " ";
             $qResponse = $database->executeQuery($query);
             if ($qResponse->getQueryState()) {
                 $event = $qResponse->getResponseList();
                 $rowCount = $qResponse->getNextRow($event);
                 $deletedRows = round($rowCount["count"] * $decayCoeficient);
                 if ($deletedRows > 0) {
                     $query = "delete from " . $table . " where " . $evQuery . " order by `id` limit " . $deletedRows . " ";
                     $qResponse = $database->executeQuery($query);
                     return $qResponse->getQueryState();
                 } else {
                     return true;
                 }
             } else {
                 return false;
             }
         } else {
             //aggregated events
             $portion = 1 - $decayCoeficient;
             $query = "update " . $table . " set `eventValue` = round(`eventValue`* " . $portion . ") where " . $evQuery . " ";
             $qResponse = $database->executeQuery($query);
             return $qResponse->getQueryState();
         }
     } else {
         return false;
     }
 }
Example #13
0
 /**
  * saves event to the database
  */
 public function computePreferences($no_clusters = 10)
 {
     /**
      * TODO: kontrola typu udalosti, pripadne akce svazane s typem
      */
     /* check whether we have an approved event*/
     if (in_array($this->eventType, Config::$recognizedImplicitEvent)) {
         $implicit_table = Config::$implicitEventStorageTable;
         $database = ComponentDatabase::get_instance();
         $query_clusters = "\n                    select count(`objectID`) as `count`, `eventValue` from\n                        `" . $implicit_table . "`\n                    where `eventType`=\"" . $this->eventType . "\" \n                    group by `eventValue` \n                    order by `eventValue`\n                ";
         //echo $query_clusters;
         $sum_events = 0;
         $values_count = array();
         $qResponse = $database->executeQuery($query_clusters);
         if ($qResponse->getQueryState()) {
             $dbResponse = $qResponse->getResponseList();
             while ($qRow = $database->getNextRow($dbResponse)) {
                 //pole hodnota -> pocet
                 $values_count[$qRow["eventValue"]] = $qRow["count"];
                 //celkovy pocet udalosti
                 $sum_events = $sum_events + intval($qRow["count"]);
             }
         }
         //echo $sum_events;
         $max_no = 10000000;
         $clusters = array();
         //velice primitivni clusterovani bude chtit vylepsit
         $ideal_cluster_size = $sum_events / $no_clusters;
         $remaining_items = $sum_events;
         $remaining_clusters = $no_clusters;
         $last_key = 0;
         $item_no = 0;
         foreach ($values_count as $key => $value) {
             $division_point = $ideal_cluster_size * 2 / 3;
             if ($item_no >= $division_point) {
                 $clusters[$key] = $item_no;
                 $remaining_clusters--;
                 $remaining_items = $remaining_items - $item_no;
                 if ($remaining_clusters > 0) {
                     $ideal_cluster_size = $remaining_items / $remaining_clusters;
                 } else {
                     $ideal_cluster_size = $max_no;
                 }
                 $last_key = $key;
                 $item_no = 0;
             }
             $item_no = $item_no + $value;
         }
         if ($item_no > 0) {
             $clusters[$max_no] = $item_no;
         } else {
             //posledni cluster bude mit maximalni hodnotu, aby do nej spadlo vse
             $clusters[$max_no] = $clusters[$last_key];
             unset($clusters[$last_key]);
         }
         //hodnoty se ukladaji pro vypocet rozptylu
         $value_array = array();
         $cluster_orders = array();
         $query_orders = "\n                    select `ie1`.`eventValue` as `value`, `ie2`.`eventValue` as `order` from\n                        `" . $implicit_table . "` as `ie1` join `" . $implicit_table . "` as `ie2` \n                            on(`ie1`.`userID` = `ie2`.`userID` and `ie1`.`objectID` = `ie2`.`objectID` and\n                            `ie1`.`eventType`=\"" . $this->eventType . "\" and `ie2`.`eventType`=\"order\")\n                    where 1   \n                    order by `value`\n                ";
         //echo $query_orders;
         $qResponse = $database->executeQuery($query_orders);
         if ($qResponse->getQueryState()) {
             $dbResponse = $qResponse->getResponseList();
             while ($qRow = $database->getNextRow($dbResponse)) {
                 //pole hodnota -> pocet
                 $value = $qRow["value"];
                 $order = $qRow["order"];
                 $i = 0;
                 foreach ($clusters as $key => $val) {
                     $i++;
                     if ($key > $value) {
                         $value_array[] = $i;
                         //do kolikateho clusteru hodnota patri?
                         $cluster_orders[$key] = $cluster_orders[$key] + $order;
                         break;
                     }
                 }
             }
         }
         //nyni mame 2 pole - jedno s poctem prvku, druhe s poctem objednavek, udelame preferenci
         $resulting_clusters = array();
         foreach ($clusters as $key => $val) {
             $item_no = $clusters[$key];
             $purchase_no = $cluster_orders[$key];
             $preference = $purchase_no / $item_no;
             $resulting_clusters[$key] = $preference;
         }
         print_r($clusters);
         print_r($cluster_orders);
         print_r($resulting_clusters);
         //confidence of each data cluster
         $std_dev = sqrt($this->variance($value_array));
         $query_delete = "delete from `" . Config::$meta_pref_table . "` where `eventType`=\"" . $this->eventType . "\"";
         $database->executeQuery($query_delete);
         $query_insert = "insert into `" . Config::$meta_pref_table . "` (`border_from`, `border_to`, `preference`, `confidence`, `eventType`, `lastModified`) values ";
         $i = 0;
         $last_border = 0;
         foreach ($resulting_clusters as $key => $val) {
             if ($i == 0) {
                 $i++;
             } else {
                 $query_insert .= ", ";
             }
             $query_insert .= "(" . $last_border . ", " . $key . ", " . $val . ", " . $std_dev . ", \"" . $this->eventType . "\", \"" . Date("Y-m-d H:i:s") . "\")";
             $last_border = $key;
         }
         //echo $this->event->getSQL();
         // echo $query_insert;
         $database->executeQuery($query_insert);
         // $database->disconnect();
     }
 }
Example #14
0
 private function compute_user_object_rating($object_id, $user_id)
 {
     /*todo compute*/
     $database = ComponentDatabase::get_instance();
     $feedback = array();
     $rating = 0;
     $query_feedback = "select * from `" . Config::$implicitEventStorageTable . "` where `objectID`=" . $object_id . " and `userID`=" . $user_id . " ";
     //echo $query_feedback;
     $qResponse = $database->executeQuery($query_feedback);
     if ($qResponse->getQueryState()) {
         $dbResponse = $qResponse->getResponseList();
         while ($qRow = $database->getNextRow($dbResponse)) {
             $feedback[$qRow["eventType"]] = $qRow["eventValue"];
             //echo $object_id.$qRow["eventType"]." = ".$qRow["eventValue"]." ;;\n";
             //prozatim velmi primitivne agregace ratingu
             $rating = $rating + Config::$eventImportance[$qRow["eventType"]] * intval($qRow["eventValue"]);
         }
     }
     //echo $object_id." --- ".$rating." ---\n";
     return $rating;
 }
Example #15
0
 /**
  * return array of features and its relevance for current object
  * @param type $oid
  */
 private function getObjectFeatures($oid)
 {
     $res_array = array();
     $query = "SELECT * FROM `vsm_object_model` WHERE `oid`={$oid}";
     $database = ComponentDatabase::get_instance();
     $qr = $database->executeQuery($query);
     $features = $qr->getResponseList();
     while ($record = $database->getNextRow($features)) {
         $res_array[$record["feature"]] = $record["relevance"];
     }
     return $res_array;
 }
Example #16
0
 private function rateObjects($query)
 {
     $database = ComponentDatabase::get_instance();
     $qr = $database->executeQuery($query);
     $eventsList = $qr->getResponseList();
     //rating objects
     if (!$eventsList) {
         //wrong query
         //$errLog = ErrorLog::get_instance();
         //$errLog->logError("No events of the specified type found, no prediction made","Aggregated");
         return false;
     } else {
         $last_objectID = null;
         $objectEvents = array();
         while ($record = $database->getNextRow($eventsList)) {
             if ($last_objectID == $record["objectID"]) {
                 $objectEvents[$record["eventType"]] = $record["eventValue"];
             } else {
                 if ($last_objectID != null) {
                     $this->rateObject($last_objectID, $objectEvents);
                 }
                 $last_objectID = $record["objectID"];
                 $objectEvents = array($record["eventType"] => $record["eventValue"]);
             }
         }
         $this->rateObject($last_objectID, $objectEvents);
     }
 }
 /**
  * Sends query to the database, returns its queryResponse
  * @return queryResponse class type
  */
 function executeQuery()
 {
     $relevance = "";
     $attrArray = $this->query->getAttributeArray();
     if (sizeof($attrArray) != 0) {
         //some attributes to process
         $relevance = ", (";
         foreach ($attrArray as $attribute) {
             $type = $attribute->getAttributeType();
             switch ($type) {
                 case "int":
                     $relevance .= $this->compareInt($attribute);
                     break;
                 case "Date":
                     $relevance .= $this->compareDate($attribute);
                     break;
                 case "bool":
                     $relevance .= $this->compareBool($attribute);
                     break;
                 case "String":
                     $relevance .= $this->compareString($attribute);
                     break;
                 case "StringFulltext":
                     $relevance .= $this->compareStringFulltext($attribute);
                     break;
                 case "StringMultival":
                     $relevance .= $this->compareStringMultival($attribute);
                     break;
             }
         }
         if ($relevance != "") {
             $relevance .= "0 )/" . $this->total_importance . " as `relevance` ";
             $this->query->setSelect($this->query->getSelect() . $relevance);
             $this->query->setOrderBy(" order by `relevance` desc ");
         }
         if ($this->query->getWhere() != "") {
             $addedConditions = " and (1 " . $this->addedConditions . ") ";
         } else {
             $addedConditions = " where (1 " . $this->addedConditions . ") ";
         }
         $this->query->setWhere($this->query->getWhere() . $this->addedConditions);
     }
     $database = ComponentDatabase::get_instance();
     //echo $this->query->getSQL();
     return $database->executeQuery($this->query->getSQL());
 }
Example #18
0
 /**
  * returns all ratings for the user
  * @param <type> $user
  * @return <type> array of objectID -> rating
  */
 static function getUserRatings($user)
 {
     $database = ComponentDatabase::get_instance();
     $tableName = Config::$explicitEventStorageTable;
     $qResponse = $database->executeQuery("select * from  `" . $tableName . "` where `userID`=" . $user . " and `eventType`=\"user_rating\" ");
     $userRatingArray = array();
     if ($qResponse->getQueryState()) {
         $dbResponse = $qResponse->getResponseList();
         while ($qRow = $database->getNextRow($dbResponse)) {
             $userRatingArray[$qRow["objectID"]] = $qRow["eventValue"];
         }
     }
     return $userRatingArray;
 }