/**
  * Load the session from the database into the object instance
  * 
  * @access private
  * @internal
  * @version 1.2.0
  * @since 1.0.1
  * @param string $sessionID
  * @return boolean 
  */
 private function load_session($sessionID)
 {
     $db = new argent_database();
     $query = "\r\n                            SELECT \r\n                                * \r\n                            FROM \r\n                                `ua_sessions` \r\n                            WHERE \r\n                                `session_id` = '{$db->escape_value($sessionID)}'\r\n                            AND\r\n                                `session_name` = '{$db->escape_value($this->name)}'\r\n                            AND \r\n                                `userAgent` = '{$db->escape_value($_SERVER['HTTP_USER_AGENT'])}'";
     $sessionData = $db->returnrow($query);
     /**
      * Check the session checksum for validity 
      */
     $session_verifier = argent_identifier::session_verifier($sessionData['started']);
     $session_checksum = substr($sessionData['session_id'], 33);
     if ($session_verifier != $session_checksum) {
         return false;
     }
     if ($sessionData['session_id'] == $sessionID && $sessionData['last_activity'] > mktime() - $sessionData['timeout']) {
         $this->id = $sessionData['session_id'];
         $this->timeout = $sessionData['timeout'];
         $this->secure = (bool) $sessionData['secure'];
         $this->domain = $sessionData['domain'];
         $this->expiry = $sessionData['last_activity'] + $sessionData['timeout'];
         $this->path = $sessionData['path'];
         $this->data = unserialize($sessionData['data']);
         $query = "\r\n                                UPDATE \r\n                                    `ua_sessions`\r\n                                SET \r\n                                    `last_activity` = " . mktime() . "\r\n                                WHERE\r\n                                    `session_id` = '{$db->escape_value($sessionID)}'\r\n                                AND \r\n                                    `session_name` = '{$db->escape_value($this->name)}'";
         $db->query($query);
         unset($db);
         return true;
     } else {
         unset($db);
         return false;
     }
 }
 /**
  * Returns true if the specified User Right exists
  * 
  * @param string $right
  * @return \argent_error|boolean
  */
 public static function right_exists($right)
 {
     $error = new argent_error();
     $db = new argent_database();
     if (!is_string($right)) {
         $error->add('1050', 'Invalid data type: expecting STRING', $relationship, 'argent_meta');
     }
     if ($error->has_errors()) {
         return $error;
     }
     $sql = "\r\n                        SELECT\r\n                            *\r\n                        FROM\r\n                            `ua_rights`\r\n                        WHERE\r\n                            `right` = '{$db->escape_value($right)}'\r\n                        ";
     $rights = $db->returnrow($sql);
     if ($rights['right'] == $right) {
         return $rights['object_id'];
     }
     return false;
 }
 public static function related($primary_object_id, $secondary_object_id, $relationship = null, $include_reverse = false)
 {
     $error = new argent_error();
     $db = new argent_database();
     if (!argent_meta::object_registered($primary_object_id)) {
         $error->add('1038', 'Object does not exist', $primary_object_id, 'argent_uauth');
     }
     if (!argent_meta::object_registered($secondary_object_id)) {
         $error->add('1038', 'Object does not exist', $secondary_object_id, 'argent_uauth');
     }
     if (!is_string($relationship) && $relationship != null) {
         $error->add('1050', 'Invalid data type: expecting STRING', $relationship, 'argent_meta');
     }
     if ($error->has_errors()) {
         return $error;
     }
     $sql = "\r\n                    SELECT\r\n                        *\r\n                    FROM\r\n                        `ua_relationships`\r\n                    WHERE\r\n                        (`primary_object_id` = '{$db->escape_value($primary_object_id)}'\r\n                    AND\r\n                        `secondary_object_id` = '{$db->escape_value($secondary_object_id)}' )\r\n                    ";
     if ($include_reverse) {
         $sql .= "\r\n                    OR\r\n                        (`primary_object_id` = '{$db->escape_value($secondary_object_id)}'\r\n                    AND\r\n                        `secondary_object_id` = '{$db->escape_value($primary_object_id)}' )\r\n                    ";
     }
     if ($relationship != null) {
         $sql .= "\r\n                    AND\r\n                        `relationship` = '{$db->escape_value($relationship)}'\r\n                    ";
     }
     $relationship_data = $db->returnrow($sql);
     if (!empty($relationship_data['primary_object_id'])) {
         return $relationship_data;
     }
     return false;
 }