00001 <?php
00002
00035 class TSDStandard extends TSDLeaf {
00036 public static $ATTRIBUTES = array(
00037 'organization_name' => false,
00038 'organization_id' => false,
00039 'grade_name' => false,
00040 'grade_id' => false,
00041 'category_id' => false,
00042 'category_name' => false,
00043 'objective_id' => false,
00044 'objective_description' => false,
00045 'resourceId' => false,
00046 'reason' => false,
00047 'version' => false,
00048 'status' => false
00049 );
00050
00075 public function __construct($id = '') {
00076 if(is_array($id)) {
00077 $arr = $id;
00078 $id = '';
00079 }
00080
00081 parent::__construct('Standard', self::$ATTRIBUTES, 'objective_id', $id, 'TSDStandardAlignment', 'objectiveId');
00082 if(isset($arr)) {
00083 foreach($arr as $elt) {
00084 switch(get_class($elt)) {
00085 case 'TSDStandardOrganization':
00086 $this->setAttr('organization_id', $elt->id);
00087 $this->setAttr('organization_name', $elt->name);
00088 break;
00089 case 'TSDStandardGrade':
00090 $this->setAttr('grade_id', $elt->id);
00091 $this->setAttr('grade_name', $elt->name);
00092 break;
00093 case 'TSDStandardCategory':
00094 $this->setAttr('category_id', $elt->id);
00095 $this->setAttr('category_name', $elt->name);
00096 break;
00097 case 'TSDStandardObjective':
00098 $this->setAttr('objective_id', $elt->id);
00099 $this->setAttr('objective_description', $elt->description);
00100 break;
00101 }
00102 }
00103 $this->setAttr('reason', '');
00104 }
00105 }
00106
00114 public function isValid() {
00115 return true;
00116 }
00117
00129 protected function populate() {
00130 $query = "
00131 SELECT TSDOrganization.name AS organization_name,
00132 TSDGrade.name AS grade_name,
00133 TSDCategory.name AS category_name,
00134 TSDObjective.description AS objective_description,
00135 TSDObjective.id AS objective_id
00136 FROM TSDObjective
00137 LEFT JOIN TSDCategory ON TSDCategory.id = TSDObjective.categoryId
00138 LEFT JOIN TSDGrade ON TSDGrade.id = TSDCategory.gradeId
00139 LEFT JOIN TSDOrganization ON TSDOrganization.id = TSDGrade.organizationId
00140 WHERE
00141 TSDObjective.id = '$this->objective_id'
00142 ";
00143
00144 $DBI = TSD::getDBI();
00145
00146 $result = $DBI->query($query);
00147 if(count($DBI->getError()) > 0) {
00148 $this->setError('Failed to populate: ' . implode('; ', $DBI->getError()));
00149 return false;
00150 }
00151
00152 if(count($result) == 0)
00153 return true;
00154 if(count($result) > 1)
00155 $this->setWarning("Multiple results for key 'id'; using first result");
00156
00157 foreach($result[0] as $a => $v)
00158 $this->setAttr($a, $v);
00159
00160 $this->inDB = true;
00161
00162 return true;
00163 }
00164
00183 protected static function getListImpl($constraints, $limit, $order, $cnt, $mode = 'normal') {
00184 $DBI = TSD::getDBI();
00185 if(!$DBI) {
00186 self::setStaticError('Cannot connect to TSD!');
00187 return null;
00188 }
00189
00190 if($mode == 'normal')
00191 $attrs = array_keys(self::$ATTRIBUTES);
00192 else
00193 $attrs = array_merge(array_keys(self::$ATTRIBUTES), array('resourceId'));
00194
00195 $constraintC = self::criteriaToString($constraints, $attrs);
00196 if($constraintC === false)
00197 return null;
00198 $limitC = self::limitToString($limit);
00199 if($limitC === false)
00200 return null;
00201 $orderC = self::orderToString($order, $attrs);
00202 if($orderC === false)
00203 return null;
00204
00205 if($cnt)
00206 $query = 'SELECT COUNT(*) ';
00207 else {
00208 $query = "
00209 SELECT TSDOrganization.name AS organization_name,
00210 TSDGrade.name AS grade_name,
00211 TSDCategory.name AS category_name,
00212 TSDObjective.description AS objective_description,
00213 TSDObjective.id AS objective_id
00214 ";
00215 if($mode != 'normal')
00216 $query .= ', TSDStandardAlignment.resourceId AS resourceId, TSDStandardAlignment.reason AS reason, '
00217 . 'TSDStandardAlignment.version AS version, TSDStandardAlignment.status AS status ';
00218 }
00219
00220 $query .= "
00221 FROM TSDObjective
00222 LEFT JOIN TSDCategory ON TSDCategory.id = TSDObjective.categoryId
00223 LEFT JOIN TSDGrade ON TSDGrade.id = TSDCategory.gradeId
00224 LEFT JOIN TSDOrganization ON TSDOrganization.id = TSDGrade.organizationId
00225 ";
00226 if($mode != 'normal')
00227 $query .= ' LEFT JOIN TSDStandardAlignment ON TSDObjective.id = TSDStandardAlignment.objectiveId ';
00228
00229 if($constraintC != '') {
00230 $constraintC = str_replace('organization_name', 'TSDOrganization.name', $constraintC);
00231 $constraintC = str_replace('organization_id', 'TSDOrganization.id', $constraintC);
00232 $constraintC = str_replace('grade_name', 'TSDGrade.name', $constraintC);
00233 $constraintC = str_replace('grade_id', 'TSDGrade.id', $constraintC);
00234 $constraintC = str_replace('category_name', 'TSDCategory.name', $constraintC);
00235 $constraintC = str_replace('category_id', 'TSDCategory.id', $constraintC);
00236 $constraintC = str_replace('objective_description', 'TSDObjective.description', $constraintC);
00237 $constraintC = str_replace('objective_id', 'TSDObjective.id', $constraintC);
00238 $query .= ' WHERE ' . $constraintC;
00239 }
00240 $query .= ' ' . $limitC . ' ' . $orderC;
00241
00242 $result = $DBI->query($query);
00243 if(count($DBI->getError()) > 0) {
00244 self::setStaticError('Error doing query: ' . implode('; ', $DBI->getError()));
00245 return null;
00246 }
00247
00248 if($cnt)
00249 return $result[0]['COUNT(*)'];
00250
00251 $ret = array();
00252 foreach($result as $r) {
00253 $obj = new TSDStandard();
00254 foreach($r as $a => $v)
00255 $obj->setAttr($a, $v);
00256 $obj->inDB = true;
00257 $ret[] = $obj;
00258 }
00259
00260 return $ret;
00261 }
00262
00276 public static function getList($constraints = array(), $limit = array(), $order = array(), $cnt = false) {
00277 return self::getListImpl($constraints, $limit, $order, $cnt);
00278 }
00279
00291 public static function getResourceAlignments($urlOrId, $mode = TSD::MODE_LIVE) {
00292 if(($id = self::getCWISID($urlOrId)) === false)
00293 return null;
00294 switch($mode) {
00295 case TSD::MODE_LIVE:
00296 $modeArray = array('AND', 'resourceId' => $id, 'version' => TSD::VERSION_LIVE);
00297 break;
00298 case TSD::MODE_DEV:
00299 $modeArray = array('AND', 'resourceId' => $id, 'version' => TSD::VERSION_DEV);
00300 break;
00301 case TSD::MODE_DEV_ACTIVE:
00302 $modeArray = array('AND', 'resourceId' => $id, 'version' => TSD::VERSION_DEV,
00303 '<>', 'status' => TSD::STATUS_DELETED);
00304 break;
00305 case TSD::MODE_NEW:
00306 $modeArray = array('AND', 'resourceId' => $id, 'version' => TSD::VERSION_DEV, 'status' => TSD::STATUS_NEW);
00307 break;
00308 case TSD::MODE_CHANGED:
00309 $modeArray = array('AND', 'resourceId' => $id, 'version' => TSD::VERSION_DEV, 'status' => TSD::STATUS_CHANGED);
00310 break;
00311 case TSD::MODE_DELETED:
00312 $modeArray = array('AND', 'resourceId' => $id, 'version' => TSD::VERSION_DEV, 'status' => TSD::STATUS_DELETED);
00313 break;
00314 case TSD::MODE_APPROVED:
00315 $modeArray = array('AND', 'resourceId' => $id, 'version' => TSD::VERSION_DEV, 'status' => TSD::STATUS_APPROVED);
00316 break;
00317 case TSD::MODE_ALL:
00318 $modeArray = array();
00319 break;
00320 }
00321
00322 return self::getListImpl($modeArray, array(), array(), false, 'alignments');
00323 }
00324
00332 public function commit() {
00333 $this->setError('You cannot commit TSDStandard objects!');
00334 return false;
00335 }
00336
00344 public function getParent() {
00345 return null;
00346 }
00347
00355 public function getIdentifier() {
00356 return $this->objective_description;
00357 }
00358
00370 public function listChildren($constraints = array(), $limit = array(), $order = array(), $cnt = false) {
00371 return null;
00372 }
00373
00385 public function listValidChildren($constraints = array(), $limit = array(), $order = array(), $cnt = false) {
00386 return null;
00387 }
00388 }
00389
00390 ?>