Changeset 315
- Timestamp:
- 03/16/12 14:04:47 (13 years ago)
- Location:
- Dev/branches/jos-branch
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
Dev/branches/jos-branch
-
Property
svn:mergeinfo
set to
/Dev/branches/rest-dojo-ui/server merged eligible
-
Property
svn:mergeinfo
set to
-
Dev/branches/jos-branch/server/classes/Model.php
r314 r315 59 59 * per type, because the result is cached. 60 60 */ 61 protected abstract static function createFIELDS(); 61 protected abstract static function createFIELDS(); 62 63 /** 64 * Provides the modifiable fields of this object, throws an exception otherwise. 65 * Needs to be implemented by every class to specify what fields are modifiable 66 * in each state. 67 */ 68 protected abstract function getModifiableFields(); 69 70 /** 71 * Returns whether the object is removable in its current state. Needs to be 72 * implemented by every class. 73 */ 74 // protected abstract function isRemovable(); 75 62 76 63 77 // instance fields 64 78 65 79 private $uid = null; 66 80 private $uri = null; 67 81 private $values = array(); 68 82 … … 77 91 public function getType() { 78 92 return static::TYPE(); 79 93 } 80 94 81 95 // PHP magic functions to expose values … … 97 111 throw new Exception("Field " . $name . " not defined on " . self::TYPE()); 98 112 } 99 113 } 100 114 101 115 private function get_field($name) { … … 119 133 120 134 public function __set($name, $value) { 121 135 self::ensure_field($name); 122 136 $this->values[$name] = $value; 123 137 } 124 138 125 139 public function __unset($name) { 126 140 unset($this->values[$name]); 127 141 } 128 142 … … 162 176 } 163 177 164 protected function evaluate() { 178 protected function evaluate() { 179 $realClass = self::TYPE(); 180 $oldResults = $realClass::get(array("uid" => $this->uid)); 165 181 foreach (static::FIELDS() as $name => $field) { 166 182 if ($field->required() 167 && (!is _set($this->values[$name])183 && (!isset($this->values[$name]) 168 184 || ( $field->multiple() && empty($this->values[$name]) ) )) { 169 185 throw new Exception("Required field $name not found."); 170 } 186 } 187 if (!empty($oldResults) 188 && $this->values[$name] != $oldResults[0]->values[$name] 189 && !in_array($name, $this->getModifiableFields())) 190 { 191 $state = ""; 192 if(isset($this->values[$state])) 193 $state = $this->values[$state]; 194 throw new Exception("Field " . $name . " is not modifiable on type " . $realClass . " in current state " . $state); 195 } 196 171 197 } 172 198 } … … 174 200 public function save() { 175 201 $this->evaluate(); 176 202 177 203 $model = self::get_model(); 178 204 179 205 // create new resource and remove old saved resource 180 206 $resource = new Resource($this->uri); 181 207 $model->subtract($model->find($resource, null, null)); 182 208 … … 259 285 } 260 286 } 261 287 $info = self::resourceUriToTypeAndUid($uri); 262 288 $objects[] = new $realClass($info['uid'], $values); 263 289 } … … 423 449 } 424 450 451 class RdfInteger implements RdfType { 452 static function save($model, $resource, $name, $value) { 453 $model->add(new Statement($resource, new Resource(RDfObject::PREDICATES_NS . $name), 454 new Literal($value))); 455 } 456 static function load($value) { 457 return (int) $value->label; 458 } 459 static function predicate($name, $value) { 460 return 'str(?' . $name .') = "' . $value . '"'; 461 } 462 } 463 464 function RdfInteger() { 465 return new RdfInteger(); 466 } 467 425 468 class RdfReference implements RdfType { 426 469 … … 454 497 'values' => RdfField(RdfString(), array(RdfField::MULTIPLE)) 455 498 ); 456 } 457 499 } 500 501 protected function getModifiableFields() { 502 return array('question', 'values'); 503 } 458 504 } 459 505 … … 467 513 'answers' => RdfField(RdfReference(), array(RdfField::MULTIPLE)) 468 514 ); 469 } 470 515 } 516 517 protected function getModifiableFields() { 518 return array('survey', 'respondent', 'answers'); 519 } 471 520 } 472 521 … … 479 528 'style' => RdfField(RdfString()) 480 529 ); 481 } 482 530 } 531 532 protected function getModifiableFields() { 533 return array('title', 'description', 'style'); 534 } 483 535 } 484 536 … … 493 545 ); 494 546 } 547 protected function getModifiableFields() { 548 return array(); 549 } 495 550 496 551 } … … 508 563 ); 509 564 } 565 protected function getModifiableFields() { 566 return array(); 567 } 510 568 511 569 } … … 521 579 ); 522 580 } 581 protected function getModifiableFields() { 582 switch($this->getState()) 583 { 584 case 0: return array('title', 'pipeline'); 585 case 1: return array('title'); 586 } 587 } 523 588 524 589 } … … 539 604 ); 540 605 } 606 protected function getModifiableFields() { 607 return array(); 608 } 541 609 542 610 } … … 552 620 ); 553 621 } 622 protected function getModifiableFields() { 623 switch($this->getState()) 624 { 625 case 0: return array('title', 'description', 'creator', 'questions'); 626 case 1: return array('title', 'description', 'questions'); 627 default: return array('title', 'description'); 628 } 629 } 554 630 555 631 } … … 567 643 ); 568 644 } 645 protected function getModifiableFields() { 646 return array(); 647 } 569 648 570 649 } … … 579 658 ); 580 659 } 660 protected function getModifiableFields() { 661 return array('passwordHash', 'passwordSalt'); 662 } 581 663 582 664 }
Note: See TracChangeset
for help on using the changeset viewer.