+// Get last submissions of all users on kyberia.
+// XXX ad permission checking
+// XXX remove constants
+
+public static function getLast($params) {
+ global $db,$node,$error,$error_messages;
+
+ if ($params['listing_amount']=='all') $listing_amount='-1';
+ else $listing_amount=addslashes($params['listing_amount']);
+ if (empty($params['offset'])) $offset=0;
+ else $offset=addslashes($params['offset']);
+
+ global $db,$node;
+ if ($node['node_id']==DEF_LAST_NODE) {
+ $interval=" nodes.node_created>NOW()-INTERVAL 65 HOUR and";
+ $vector="00";
+ } else {
+
+ $vector=$node['node_vector'];
+ $interval=" nodes.node_created>NOW()-INTERVAL 42 DAY and";
+ }
+
+ $node_id=$node['node_id'];
+ $user_id=$_SESSION['user_id'];
+ $q="select parent.node_name as parent_name,users.*,nodes.* from nodes
+ left join nodes as parent on parent.node_id=nodes.node_parent
+ left join users on users.user_id=nodes.node_creator where $interval
+ nodes.node_vector like '$vector%' and
+ nodes.node_system_access!='private' order by nodes.node_id desc LIMIT $offset,$listing_amount ";
+
+ $set=$db->query($q);
+
+ while ($set->next()) {
+ $last[]=$set->getRecord();
+ }
+
+ return $last;
+
+}
+
+
+// Get nodes sorted by weight_k specific to user
+
+public static function getKNeurons($user_id,$interval) {
+ global $db,$node,$error,$error_messages;
+
+ $q="call k_neurons('$user_id','$interval')";
+ $set=$db->query($q);
+
+ while ($set->next()) {
+ $k_array[]=$set->getRecord();
+ }
+
+ return $k_array;
+}
+
+// setSynapse
+
+// Set synapse weight.
+// If synapse does not exists, create a new one.
+// Secure.
+// Returns true on sucess, otherwise false.
+
+public static function setSynapse($params){
+ global $db,$node,$error,$error_messages;
+
+ // security check
+ if ((!is_numeric($params['src']))
+ or (!is_numeric($params['dst']))
+ or (!is_numeric($params['weight']))) {
+
+ return false;
+ }
+
+ $src=$params['src'];
+ $dst=$params['dst'];
+ $weight=$params['weight'];
+
+ // weight could be only positive
+ if ( $weight < 0) {
+ return false;
+ }
+
+ // if already exists
+ $q="select count(src) from neurons where dst ='$dst' and src = '$src'";
+ $set=$db->query($q);
+ $set->next();
+ $isrc=$set->getString('count(src)');
+
+ if ( $isrc > 0 ) {
+ $q="update neurons set synapse_weight='$weight'
+ where dst = '$dst' and src = '$src'";
+ } else {
+ // FIXME no vector set
+ $q="insert into neurons values('$weight','$dst','$src',0,'synapse',
+ CURRENT_TIMESTAMP(),now(),NULL,$src)";
+ }
+ $set=$db->query($q);
+
+ return true;
+}
+
+// getSynapseWeight
+
+// If synapse does not exists, weight is 1
+// Secure.
+// Returns synapse weight (from user to node)
+
+public static function getSynapseWeight($user_id,$node_id){
+ global $db;
+
+ if (!is_numeric($user_id))
+ { return -1; }
+ if (!is_numeric($node_id))
+ { return -1; }
+
+ $set=$db->query("select synapse_weight from neurons where src =".
+ $user_id." and dst = ".$node_id." and link='synapse'");
+
+ $set->next();
+ $synapse_weight=$set->getString('synapse_weight');
+
+ if (! ($synapse_weight) ) { $synapse_weight = 1;}
+
+ return $synapse_weight;
+}
+
+// getNodeUserlist
+
+// Get list of users currently viewing specified node.
+// Secure.
+// Returns list of (login, user_id)
+
+public static function getNodeUserlist($node_id) {
+
+ global $db;
+ if (!is_numeric($node_id))
+ { return -1; }
+
+
+ $set=$db->query("select login,user_id from users where user_action_id='$node_id'");
+ while ($set->next()) {
+ $userlist[]=$set->getRecord();
+ }
+
+ return $userlist;
+}
+
+