/** * 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); }
/** * 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); }
/** * 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"); }
/** * 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); }
/** * 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"); }
/** * 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; }
/** * 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"); }
/** * 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]; }
/** * 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; }
/** * Add a table index for this member * * @return CHOQ_DB_TypeMember */ public function addIndex() { $this->type->addIndex("index", array($this)); return $this; }
/** * 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; }