Ignore:
Timestamp:
03/04/12 15:48:42 (13 years ago)
Author:
hendrikvanantwerpen
Message:

[Server] Refactored model classes with some meta-programming. Specific classes only define their fields and inherit from class RdfObject?. Changes to handle the new model objects correctly.
[Client] Added rft/store module for uniform resource access. Removed dependencies on 'uid' field name. Added support for references without loading full object nor exposing uri.
[Client] Added reset() to QuestionWidget?.
[RDFAPI] Fixed PHP warning.

Location:
Dev/branches/rest-dojo-ui/server
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • Dev/branches/rest-dojo-ui/server/api.php

    r292 r303  
    44ini_set('display_errors', True);
    55
     6define("RDFAPI_INCLUDE_DIR", "rdfapi/");
    67require_once 'tonic/lib/tonic.php';
     8require_once 'classes/Model.php';
    79require_once 'classes/master.php';
    810
     
    1315
    1416function set_session_cookie($response, $user) {
    15     $response->addHeader('Set-Cookie', 'rft_uid=' . $user->uid . '; Max-Age: 3600; Path=' . $response->request->baseUri);
     17    $response->addHeader('Set-Cookie', 'rft_uid=' . $user->getUid() . '; Max-Age: 3600; Path=' . $response->request->baseUri);
    1618}
    1719
     
    8789class DataResource extends Resource {
    8890
    89     function getTypeAndUid($request) {
     91    private function getTypeAndUid($request) {
    9092        $uri = get_clean_uri($request);
    9193        $path = explode('/', $uri);
     
    155157            $object->$key = $val;
    156158        }
    157         if (isset($object->creator)) {
    158             $object->creator = $user;
    159         }
    160         if (!$object->save()) {
    161             throw new ResponseException("Save failed", Response::INTERNALSERVERERROR);
    162         }
     159        $object->save();
    163160
    164161        $response->body = $object;
  • Dev/branches/rest-dojo-ui/server/classes/Auth.php

    r274 r303  
    77    public static function register($email, $password) {
    88        $user_results = User::get(array("email" => $email));
    9         if ( !empty($user_results) ) {
     9        if (!empty($user_results)) {
    1010            throw new Exception("User with email $email already exists.");
    1111        }
    1212        $salt = rand();
    13         $user = new User(null,$email,sha1($password.$salt),$salt);
     13        $user = new User(null, array(
     14                    'email' => $email,
     15                    'passwordHash' => sha1($password . $salt),
     16                    'passwordSalt' => $salt));
    1417        $user->save();
    1518        return $user;
    1619    }
    17    
     20
    1821    public static function login($email, $password) {
    1922        $user_results = User::get(array("email" => $email));
     
    2225        }
    2326        $user = $user_results[0];
    24         if (sha1($password.$user->passwordSalt) != $user->passwordHash) {
     27        if (sha1($password . $user->passwordSalt) != $user->passwordHash) {
    2528            throw new Exception("Wrong password.");
    2629        }
     
    3538        return $user_results[0];
    3639    }
    37    
     40
    3841}
    3942
  • Dev/branches/rest-dojo-ui/server/classes/Marshaller.php

    r274 r303  
    44
    55    const OBJ_TYPE = '__objectType';
     6    const OBJ_UID = '__objectUid';
     7    const REF_TYPE = '__referenceType';
     8    const REF_UID = '__referenceUid';
    69
    710    private static function isWrappedObject($obj) {
     
    912    }
    1013
     14    private static function isWrappedReference($obj) {
     15        return isset($obj[self::REF_TYPE]);
     16    }
     17
    1118    public static function marshall($obj) {
    1219        switch (gettype($obj)) {
    1320            case 'array':
    14                 return array_map(array('Marshaller','marshall'), $obj);
     21                return array_map(array('Marshaller', 'marshall'), $obj);
    1522            case 'object':
    1623                return static::wrapObject($obj);
     
    2431        if ($objectType == 'DateTime') {
    2532            return array(self::OBJ_TYPE => 'DateTime', 'timestamp' => $obj->getTimestamp());
     33        } else if ($obj instanceof RdfObject) {
     34            $array = array(
     35                self::OBJ_TYPE => $obj->getType(),
     36                self::OBJ_UID => $obj->getUid()
     37            );
     38            foreach ($obj as $prop => $val) {
     39                $array[$prop] = static::marshall($val);
     40            }
     41            return $array;
     42        } else if ($obj instanceof RdfPointer) {
     43            return array(
     44                self::REF_TYPE => $obj->getType(),
     45                self::REF_UID => $obj->getUid()
     46            );
    2647        } else {
    27             $newObj = static::marshall((array) $obj);
    28             $newObj[self::OBJ_TYPE] = get_class($obj);
    29             return $newObj;
     48            return static::marshall((array) $obj);
    3049        }
    3150    }
     
    3857                if (static::isWrappedObject($obj)) {
    3958                    return static::unwrapObject($obj);
     59                } else if (static::isWrappedReference($obj)) {
     60                    return static::unwrapReference($obj);
    4061                } else {
    41                     return array_map(array('Marshaller','unmarshall'), $obj);
     62                    return array_map(array('Marshaller', 'unmarshall'), $obj);
    4263                }
    4364            default:
     
    4768
    4869    private static function unwrapObject($obj) {
    49         $objectType = $obj[self::OBJ_TYPE];
    50         unset($obj[self::OBJ_TYPE]);
     70        if (isset($obj[self::OBJ_TYPE])) {
     71            $objectType = $obj[self::OBJ_TYPE];
     72            unset($obj[self::OBJ_TYPE]);
     73        }
     74        if (isset($obj[self::OBJ_UID])) {
     75            $objectUid = $obj[self::OBJ_UID];
     76            unset($obj[self::OBJ_UID]);
     77        }
    5178        if ($objectType == 'DateTime') {
    5279            $date = new DateTime();
    5380            $date->setTimestamp($obj['timestamp']);
    5481            return $date;
    55         } else if (is_subclass_of($objectType, 'ResearchToolObjectInterface')) {
    56             return $objectType::create((object)static::unmarshall($obj));
     82        } else if (is_subclass_of($objectType, 'RdfObject')) {
     83            $rdfObject = new $objectType($objectUid);
     84            foreach ($obj as $prop => $val) {
     85                $rdfObject->$prop = static::unmarshall($val);
     86            }
     87            return $rdfObject;
    5788        } else {
    5889            return $obj;
     
    6091    }
    6192
     93    private static function unwrapReference($ref) {
     94        $refType = $ref[self::REF_TYPE];
     95        $refUid = $ref[self::REF_UID];
     96        return new RdfPointer(RdfObject::typeAndUidToResourceUri($refType, $refUid));
     97    }
     98   
    6299}
    63100
  • Dev/branches/rest-dojo-ui/server/classes/master.php

    r256 r303  
    88 * @author fpvanagthoven
    99 */
    10 // Determine our absolute document root
    11 define('DOC_ROOT', realpath(dirname(__FILE__) . '/../'));
    1210
    1311function __autoload($class_name) {
    1412        if (file_exists('classes/' . $class_name . '.php'))
    15                 require 'classes/' . $class_name . '.php';
    16         else if (file_exists('classes/models/' . $class_name . '.php'))
    17                 require 'classes/models/' . $class_name . '.php';
    18         else if (file_exists('classes/widgets/' . $class_name . '.php'))
    19                 require 'classes/widgets/' . $class_name . '.php';
    20         else if (file_exists('classes/styles/' . $class_name . '.php'))
    21                 require 'classes/styles/' . $class_name . '.php';
     13                require_once 'classes/' . $class_name . '.php';
    2214}
    2315
  • Dev/branches/rest-dojo-ui/server/rdfapi/syntax/RdfSerializer.php

    r256 r303  
    196196                }
    197197                // check if model is empty
    198                 if ($model->size() == 0) return "<". $this->rdf_qname_prefix . RDF_RDF ." xmlns:rdf='".RDF_NAMESPACE_URI."' />";
     198                if ($model->size() == 0) {
     199            $elementStr = "<". $this->rdf_qname_prefix . RDF_RDF ." xmlns:rdf='".RDF_NAMESPACE_URI."' />";
     200            return $elementStr;
     201        }
    199202
    200203                foreach($nsps as $ns => $pre){
Note: See TracChangeset for help on using the changeset viewer.