Пример #1
0
 /**
  * Register the Object itself as a Type.
  * Define all required Database properties here.
  */
 static function onAutoload()
 {
     $type = new CHOQ_DB_Type(__CLASS__);
     $type->createMember("name")->setFieldType("varchar")->setLength(255);
     $type->createMember("url")->setFieldType("varchar")->setLength(255)->addUniqueIndex();
     $type->createMember("lastImport")->setFieldType("datetime")->setOptional(true);
     $type->createMember("contentJS")->setFieldType("text")->setOptional(true);
 }
Пример #2
0
 /**
  * Register the Object itself as a Type.
  * Define all required Database properties here.
  */
 static function onAutoload()
 {
     $type = new CHOQ_DB_Type(__CLASS__);
     $type->createMember("user")->setFieldType("RDR_User");
     $type->createMember("name")->setFieldType("varchar")->setLength(255)->addIndex();
     $type->createMember("feeds")->setFieldType("array", "RDR_Feed")->setOptional(true);
     $type->createMember("feedsData")->setFieldType("array", "text")->setOptional(true);
 }
Пример #3
0
 /**
  * Register the Object itself as a Type.
  * Define all required Database properties here.
  */
 static function onAutoload()
 {
     $type = new CHOQ_DB_Type(__CLASS__);
     $type->createMember("uniqueId")->setFieldType("varchar")->setLength(50)->addUniqueIndex();
     $type->createMember("feed")->setFieldType("RDR_Feed");
     $type->createMember("title")->setFieldType("varchar")->setLength(255)->addIndex();
     $type->createMember("text")->setFieldType("text");
     $type->createMember("link")->setFieldType("varchar")->setLength(500);
     $type->createMember("image")->setFieldType("varchar")->setLength(750)->setOptional(true);
     $type->createMember("datetime")->setFieldType("datetime");
 }
Пример #4
0
 /**
  * Register the Object itself as a Type.
  * Define all required Database properties here.
  */
 static function onAutoload()
 {
     $type = new CHOQ_DB_Type(__CLASS__);
     $type->createMember("username")->setFieldType("varchar")->setLength(30)->addUniqueIndex();
     $type->createMember("salt")->setFieldType("char")->setLength(128);
     $type->createMember("password")->setFieldType("char")->setLength(128);
     $type->createMember("role")->setFieldType("tinyint")->setLength(1);
     $type->createMember("settings")->setFieldType("array", "text")->setOptional(true);
     $type->createMember("saved")->setFieldType("array", "int")->setOptional(true);
     $type->createMember("readed")->setFieldType("array", "int")->setOptional(true);
 }
Пример #5
0
 /**
  * Register the Object itself as a Type.
  * Define all required Database properties here.
  */
 static function onAutoload()
 {
     $type = new CHOQ_DB_Type(__CLASS__);
     $type->createMember("feed")->setFieldType("RDR_Feed")->setOptional(true);
     $type->createMember("entry")->setFieldType("RDR_Entry")->setOptional(true);
     $type->createMember("user")->setFieldType("RDR_User")->setOptional(true);
     $type->createMember("int")->setFieldType("int")->setOptional(true);
     $type->createMember("text")->setFieldType("text")->setOptional(true);
     $type->createMember("type")->setFieldType("int");
 }
Пример #6
0
 /**
  * Set a database object member to this field
  * This will set automatically all required validators and converters depending on type properties
  * Also automatically set the default value
  *
  * @param CHOQ_DB_Object $object
  * @param mixed $memberName If this is null than the name of the field will be used
  * @return self
  */
 public function setDbObjectMember(CHOQ_DB_Object $object, $memberName = null)
 {
     if (!$memberName) {
         $memberName = $this->name;
     }
     $this->dbObject = $object;
     $this->dbTypeMember = CHOQ_DB_Type::get($this->dbObject)->getMember($memberName);
     # set converter
     $this->converter = new Form_Converter($this);
     # set required validator
     if (!$this->dbTypeMember->optional) {
         $validator = new Form_Validator_Required();
         $this->addValidator($validator);
     }
     # set length validator
     if ($this->dbTypeMember->length) {
         $validator = new Form_Validator_Length();
         $validator->setErrorMessage(sprintf(t("form.validation.length"), (string) $this->dbTypeMember->length));
         $validator->setLength(null, $this->dbTypeMember->length);
         $this->addValidator($validator);
     }
     # set default value
     $this->setDefaultValue($object->{$memberName});
     return $this;
 }
Пример #7
0
 /**
  * Register the Object itself as a Type.
  * Define all required Database properties here.
  */
 static function onAutoload()
 {
     $type = new CHOQ_DB_Type(__CLASS__);
     $type->createMember("key")->setFieldType("varchar")->setLength(255)->addUniqueIndex();
     $type->createMember("value")->setFieldType("text");
 }
Пример #8
0
 /**
  * Get array of all CHOQ_DB_TypeMember for this object
  *
  * @return CHOQ_DB_TypeMember[]
  */
 public function _getMembers()
 {
     $type = $this->_getType();
     $class = $type->class;
     if (isset(self::$_cache["members"][$class])) {
         return self::$_cache["members"][$class];
     }
     self::$_cache["members"][$class] = $type->members;
     $parents = class_parents($class);
     foreach ($parents as $parent) {
         $type = CHOQ_DB_Type::get($parent);
         self::$_cache["members"][$class] += $type->members;
     }
     return self::$_cache["members"][$class];
 }
Пример #9
0
 /**
  * Get objects by condition
  *
  * @param string $type
  * @param string|null $condition If null than no condition is added (getAll)
  *   To add a parameters placeholder add brackets with the parameters key - Example: {mykey}
  *   To quote fieldNames correctly enclose a fieldName with <fieldName>
  * @param mixed $parameters Can be a array of parameters, a single parameter or NULL
  * @param mixed $sort Can be a array of sorts, a single sort or NULL
  *   Sort value must be a fieldName with a +/- prefix - Example: -id
  *   + means sort ASC
  *   - means sort DESC
  * @param int|null $limit Define a limit for the query
  * @param int|null $offset Define a offset for the query
  * @return CHOQ_DB_Object[]
  */
 public function getByCondition($type, $condition = null, $parameters = null, $sort = null, $limit = null, $offset = null)
 {
     $t = CHOQ_DB_Type::get($type);
     if (!$t) {
         error("Cannot fetch '{$type}' - doesn't exist");
     }
     $query = "SELECT * FROM " . $this->quote($type);
     if ($condition !== null) {
         if ($parameters !== null) {
             if (!is_array($parameters)) {
                 $parameters = array($parameters);
             }
             foreach ($parameters as $key => $value) {
                 $condition = str_replace('{' . $key . '}', $this->toDb($value), $condition);
             }
         }
         $query .= " WHERE {$condition}";
     }
     if ($sort !== null) {
         if (!is_array($sort)) {
             $sort = array($sort);
         }
         $query .= " ORDER BY ";
         foreach ($sort as $value) {
             $dir = substr($value, 0, 1);
             if ($dir != "+" && $dir != "-") {
                 error("Sort direction must be defined - Add a +/- before the fieldName");
             }
             $dir = $dir == "+" ? "ASC" : "DESC";
             $query .= $this->quote(substr($value, 1)) . " " . $dir . ", ";
         }
         $query = rtrim($query, ", ");
     }
     if (is_int($limit)) {
         $query .= " LIMIT " . $limit;
     }
     if (is_int($offset)) {
         $query .= " OFFSET " . $offset;
     }
     $fetch = $this->fetchAsAssoc($query);
     $arr = array();
     foreach ($fetch as $row) {
         $object = CHOQ_DB_Object::getCachedObjectById($this, $row["id"]);
         if ($object) {
             $arr[$row["id"]] = $object;
             continue;
         }
         $arr[$row["id"]] = CHOQ_DB_Object::_createFromFetch($this, $type, $row);
         CHOQ_DB_Object::_addToCache($arr[$row["id"]]);
     }
     return $arr;
 }
Пример #10
0
 /**
  * Add a table index for this member
  *
  * @return CHOQ_DB_TypeMember
  */
 public function addIndex()
 {
     $this->type->addIndex("index", array($this));
     return $this;
 }
Пример #11
0
 /**
  * Get all required updates
  *
  * @return mixed[]
  */
 public function getRequiredUpdates()
 {
     $arr = array();
     foreach (CHOQ_DB_Type::$instances as $type) {
         $parents = array($type->class) + class_parents($type->class);
         foreach ($parents as $class) {
             $subType = CHOQ_DB_Type::get($class);
             $table = strtolower($type->class);
             if (!isset($arr[$table])) {
                 $arr[$table] = array("type" => $type, "members" => array(), "new" => true);
             }
             foreach ($subType->members as $member) {
                 $member->new[$table] = true;
                 $arr[$table]["members"][strtolower($member->name)] = $member;
             }
         }
     }
     $tables = $this->getExistingTables();
     foreach ($tables as $tKey => $tableLower) {
         $fields = $this->getExistingFieldsForTable($tKey);
         if (isset($arr[$tableLower])) {
             $arr[$tableLower]["new"] = false;
             unset($tables[$tKey]);
         }
         foreach ($fields as $key => $fieldLower) {
             if (isset($arr[$tableLower]["members"][$fieldLower])) {
                 $arr[$tableLower]["members"][$fieldLower]->new[$tableLower] = false;
                 unset($fields[$key]);
             }
         }
         foreach ($fields as $fieldLower) {
             $arr[$tableLower]["members"][$fieldLower] = false;
         }
         unset($arr[$tableLower]["members"]["id"]);
     }
     foreach ($tables as $tableLower) {
         if ($tableLower == strtolower(CHOQ_DB_Object::METATABLE) && isset($arr[$tableLower])) {
             unset($arr[$tableLower]);
             continue;
         }
         $arr[$tableLower] = false;
     }
     unset($arr["choq_db_object"]);
     return $arr;
 }