public function afterQuery(Atomik_Model_Builder $builder, Atomik_Model_Modelset $modelSet) { $modelName = $builder->name; $primaryKeyName = $builder->getPrimaryKeyField()->name; $manager = $builder->getManager(); $db = $manager->getDbInstance(); $rows = array(); $dataQuery = $db->q()->select() ->from($builder->tableName) ->where(array($primaryKeyName => null)); foreach ($modelSet as $row) { $primaryKey = $row[$primaryKeyName]; $key = $modelName . ':' . $primaryKey; if (($cached = $this->_memcache->get($key)) !== false) { // cache hit $rows[] = $cached; continue; } $data = $dataQuery->setParams(array($primaryKey))->execute()->fetch(); $this->_memcache->set($key, $data); $rows[] = $data; } $modelSet->setData($rows); }
public function init(Atomik_Model_Builder $builder) { if (!$builder->hasField('created')) { $builder->addField(new Atomik_Model_Field_Timestamp('created', array('form-ignore' => true))); } if (!$builder->hasField('updated')) { $builder->addField(new Atomik_Model_Field_Timestamp('updated', array('form-ignore' => true))); } }
public function __construct(Atomik_Model_Builder $builder, $field, $value = null) { if (is_string($field)) { $field = $builder->getField($field); } $this->_builder = $builder; $this->_field = $field; $this->_value = null; }
public static function getAvailableFilters(Atomik_Model_Builder $builder) { $filters = array(); foreach ($builder->getFields() as $field) { $fieldClass = get_class($field); $fieldType = substr($fieldClass, strrpos($fieldClass, '_') + 1); if ($filter = Atomik_Model_Query_Filter_Factory::factory($fieldType, $builder, $field)) { $filters[$field->name] = $filter; } } return $filters; }
/** * Transforms the filename template of a file to a real filename * * @param Atomik_Model_Builder $builder * @param array $data * @return string */ public static function getFilenameFromBuilder(Atomik_Model_Builder $builder, $data = array()) { if (($filename = $builder->getOption('filename', null)) === null) { require_once 'Atomik/Model/Exception.php'; throw new Atomik_Model_Exception('Missing filename option in ' . $builder->getName() . ' model'); } foreach ($data as $key => $value) { $filename = str_replace(':' . $key, $value, $filename); } return ltrim($filename, '/'); }
public function modelSearch(Atomik_Model_Builder $builder) { $html = '<form action="' . Atomik::url() . '" class="model-search" method="post">Search: ' . '<input type="text" name="search" value="' . A('search', '', $_POST) . '" /><select name="searchBy">'; foreach ($builder->getFields() as $field) { $html .= sprintf("<option value=\"%s\" %s>%s</option>\n", $field->name, isset($_POST['searchBy']) && $_POST['searchBy'] == $field->name ? 'selected="selected"' : '', $field->getLabel() ); } $html .= '</select><input type="submit" value="search" /></form>'; return $html; }
/** * Populates the model with the data from the form */ public function populateModel() { if ($this->_model === null) { $this->_model = $this->_builder->createInstance(); } $this->_model->populate($this->getData()); }
public function export(Atomik_Model_Builder $builder) { $definition = new Atomik_Db_Definition($builder->getManager()->getDbInstance()); $definition->dropBeforeCreate(); $tableName = $builder->tableName; $table = $definition->table($tableName); foreach ($builder->getFields() as $field) { list($type, $length) = $field->getSqlType(); $column = $table->createColumn($field->name, $type, $length, $field->getOptions('sql-')); if ($builder->getPrimaryKeyField() == $field) { $table->primaryKey($field->name); $column->options['auto-increment'] = true; } if ($builder->isFieldPartOfReference($field)) { $table->index($field->name, $field->getOption('sql-index', null)); } } $builder->getBehaviourBroker()->notifyBeforeExport($builder, $definition); $sql = $definition->toSql(); $builder->getBehaviourBroker()->notifyAfterExport($builder, $sql); return $sql; }
/** * Returns the model at the specified index * * @param int $index * @return Atomik_Model */ public function item($index) { if ($index >= $this->_count) { return false; } if (!isset($this->_models[$index])) { $this->_models[$index] = $this->_builder->createInstance( $this->_data[$index], false ); } return $this->_models[$index]; }
public function offsetExists($index) { return $this->_builder->hasField($index) || $this->_builder->hasReference($index) || $this->_builder->hasLink($index); }
/** * Builds a link from the string and adds it to the builder * * String template: * [one] Target [as property] on field [=> alias] [, field [=> alias]] * * Example: * Tweets as tweets on twitter_username => username * * @param Atomik_Model_Builder $builder * @param string $string */ public static function addLinkFromString(Atomik_Model_Builder $builder, $string) { $regexp = '/^((?P<type>one)\s+|)(?P<target>.+)((\sas\s(?P<as>.+))|)\s+on\s+(?P<on>.+)$/U'; if (!preg_match($regexp, $string, $matches)) { require_once 'Atomik/Model/Builder/Exception.php'; throw new Atomik_Model_Builder_Exception('Link string is malformed: ' . $string); } $link = new Atomik_Model_Builder_Link(); $link->type = $matches['type'] == 'one' ? 'one' : 'many'; $link->target = trim($matches['target']); $link->name = $link->target; if (isset($matches['as']) && !empty($matches['as'])) { $link->name = trim($matches['as']); } $fields = explode(',', $matches['on']); foreach ($fields as $field) { if (!preg_match('/^(?P<name>.+)(\s+=\>\s(?P<alias>.+)|)$/U', trim($field), $fieldMatches)) { require_once 'Atomik/Model/Builder/Exception.php'; throw new Atomik_Model_Builder_Exception('Field definition in link string is malformed: ' . $string); } $alias = isset($fieldMatches['alias']) ? $fieldMatches['alias'] : $fieldMatches['name']; $link->fields[$alias] = $fieldMatches['name']; } $builder->addLink($link); }
public function init(Atomik_Model_Builder $builder) { $builder->addField(new Atomik_Model_Field('position', 'int')); }
public function afterDelete(Atomik_Model_Builder $builder, Atomik_Model $model) { $primaryKey = $model->getPrimaryKey(); $db = $builder->getManager()->getDbInstance(); $tableName = $builder->tableName; $foreignFieldName = $this->_prefix($tableName) . '_' . $builder->getPrimaryKeyField()->name; $tableName = $this->_suffix($tableName); $db->delete($tableName, array($foreignFieldName => $primaryKey)); }
public function init(Atomik_Model_Builder $builder) { $builder->addField(new Atomik_Model_Field_Bool('published')); }