public function getTemplateVars() { $ret = parent::getTemplateVars(); $ret['settingsRow'] = $this->_getRow(); $ret['tableStyle'] = $this->_getRow()->table_style; $ret['columnCount'] = $this->getColumnCount(); if (Kwf_Config::getValue('kwc.responsive')) { $ret['cssClass'] .= ' responsive' . ucfirst($this->_getRow()->responsive_style); } $dataSelect = new Kwf_Model_Select(); $dataSelect->whereEquals('visible', 1); $dataSelect->order('pos', 'ASC'); $ret['dataRows'] = array(); $rows = $this->_getRow()->getChildRows('tableData', $dataSelect); foreach ($rows as $row) { $rowData = array(); $rowData['cssStyle'] = $row->css_style; $rowData['data'] = array(); for ($i = 1; $i <= $ret['columnCount']; $i++) { $rowData['data']['column' . $i] = array('value' => $row->{'column' . $i}, 'cssClass' => ''); } $ret['dataRows'][] = $rowData; } $ret['dataRows'] = Kwc_Basic_Table_Component::addDefaultCssClasses($ret['dataRows'], $this->_getSetting('rowStyles')); $ret['headerRows'] = array(); if (isset($ret['dataRows'][0]['htmlTag']) && $ret['dataRows'][0]['htmlTag'] == 'th') { $ret['headerRows'] = array(array_shift($ret['dataRows'])); } return $ret; }
public function testParentOrder() { $s = new Kwf_Model_Select(); $s->order('if_field', 'DESC'); $row = $this->_modelChild->getRow($s); $this->assertEquals(207, $row->if_field); }
public function update() { parent::update(); $select = new Kwf_Model_Select(); $select->where(new Kwf_Model_Select_Expr_Or(array(new Kwf_Model_Select_Expr_Equals('dimension', 'customcrop'), new Kwf_Model_Select_Expr_Equals('dimension', 'custombestfit')))); $select->order('dimension', 'asc'); $rows = Kwf_Model_Abstract::getInstance('Kwc_Abstract_Image_Model')->getRows($select); foreach ($rows as $row) { if ($row->dimension == 'customcrop') { $row->dimension = 'custom'; $row->crop_x = null; $row->crop_y = null; $row->crop_width = null; $row->crop_heigth = null; } else { if ($row->dimension == 'custombestfit') { $row->dimension = 'custom'; if ($row->imageExists()) { $targetSize = array('width' => $row->width, 'height' => $row->height, 'cover' => false); $outputSize = Kwf_Media_Image::calculateScaleDimensions($row->getParentRow('Image')->getFileSource(), $targetSize); $row->width = $outputSize['width']; $row->height = $outputSize['height']; $row->crop_x = $outputSize['crop']['x']; $row->crop_y = $outputSize['crop']['y']; $row->crop_width = $outputSize['crop']['width']; $row->crop_height = $outputSize['crop']['height']; } } } $row->save(); } }
private function _getNetworks($currentPage) { $networks = array(); foreach (Kwf_Model_Abstract::getInstance('Kwc_Advanced_SocialBookmarks_AvaliableModel')->getRows() as $n) { $networks[$n->id] = $n->toArray(); } $s = new Kwf_Model_Select(); $s->order('pos'); $ret = array(); foreach ($this->getRow()->getChildRows('Networks', $s) as $net) { if (isset($networks[$net->network_id])) { $icon = '/Kwc/Advanced/SocialBookmarks/Icons/' . $this->_getSetting('iconSet') . '/'; if (file_exists(KWF_PATH . $icon . $net->network_id . '.jpg')) { $icon .= $net->network_id . '.jpg'; } else { if (file_exists(KWF_PATH . $icon . $net->network_id . '.png')) { $icon .= $net->network_id . '.png'; } else { $icon = false; } } if ($icon) { $icon = '/assets/kwf' . $icon; } $url = str_replace('{0}', $currentPage->getAbsoluteUrl(), $networks[$net->network_id]['url']); $ret[] = array('id' => $net->network_id, 'name' => $networks[$net->network_id]['name'], 'url' => $url, 'icon' => $icon); } } return $ret; }
public function __get($name) { if ($name == 'name' || $name == 'col_span' || $name == 'total_columns' || $name == 'columns') { if (!isset($this->_rows)) { $select = new Kwf_Model_Select(); $select->whereEquals('component_id', $this->component_id); $select->order('pos'); $this->_rows = $this->getModel()->getRows($select); } $columnTypes = Kwc_Abstract::getSetting($this->getModel()->getComponentClass(), 'columns'); $typeName = array_keys($columnTypes); $typeName = array_shift($typeName); if ($parentRow = $this->getParentRow('Component')) { $typeName = $parentRow->type; } $type = $columnTypes[$typeName]; if ($name == 'columns') { return array_sum($type['colSpans']); } if ($name == 'total_columns') { return count($type['colSpans']); } unset($columnTypes); $i = 0; $countInvisible = 0; foreach ($this->_rows as $row) { if (!$row->visible) { $countInvisible++; $i++; if ($this == $row) { if ($name == 'name') { return trlKwf('Invisible'); } else { if ($name == 'col_span') { return max($type['colSpans']); } } } else { continue; } } $number = $i - $countInvisible; while ($number >= count($type['colSpans'])) { $number -= count($type['colSpans']); } if ($this == $row) { if ($name == 'name') { return trlKwf('Column {0}, width {1}%', array($number + 1, floor($type['colSpans'][$number] / array_sum($type['colSpans']) * 100))); } else { if ($name == 'col_span') { return $type['colSpans'][$number]; } } } $i++; } } return parent::__get($name); }
public function testOrder() { $s = new Kwf_Model_Select(); $s->whereEquals('id', 1); $s->order('foo'); $row = $this->_modelChild->getRow($s); $this->assertEquals($row->foo, 777); }
public function testChildSumWithExpressionOrderLazy() { $select = new Kwf_Model_Select(); $s = new Kwf_Model_Select(); $s->order('foo_value_sum', 'DESC'); $row = $this->_modelBar->getRow($s); $sum = $row->foo_value_sum; $this->assertEquals(6, $sum); }
public static function getSettings() { $ret = parent::getSettings(); $ret['generators']['content'] = array('class' => 'Kwf_Component_Generator_Static', 'component' => 'Kwc_Newsletter_Detail_Mail_Paragraphs_Component'); $select = new Kwf_Model_Select(); $select->whereEquals('unsubscribed', false); $select->whereEquals('activated', true); $select->order('id', 'ASC'); $ret['recipientSources'] = array('n' => array('model' => 'Kwc_Newsletter_Subscribe_Model', 'select' => $select)); $ret['trackViews'] = true; return $ret; }
public function testGetRowsWithExprOrder() { $s = new Kwf_Model_Select(); $s->order('baz'); $rows = $this->_m->getRows($s); $this->assertEquals(6, count($rows)); $this->assertEquals('2', $rows[0]->baz); $this->assertEquals('cc', $rows[1]->baz); $this->assertEquals('cc3', $rows[2]->baz); $this->assertEquals('foobar', $rows[3]->baz); $this->assertEquals('foobar', $rows[4]->baz); $this->assertEquals('foobar', $rows[5]->baz); }
private function _getChildPageIds($parentId) { $cacheId = 'pcIds-' . $parentId; $ret = Kwf_Cache_Simple::fetch($cacheId); if ($ret === false) { Kwf_Benchmark::count('GenPage::query', 'childIds(' . $parentId . ')'); $select = new Kwf_Model_Select(); if (is_numeric($parentId)) { $select->whereEquals('parent_id', $parentId); } else { $select->where(new Kwf_Model_Select_Expr_Like('parent_id', $parentId . '%')); } $select->order('pos'); $rows = $this->_getModel()->export(Kwf_Model_Interface::FORMAT_ARRAY, $select, array('columns' => array('id'))); $ret = array(); foreach ($rows as $row) { $ret[] = $row['id']; } Kwf_Cache_Simple::add($cacheId, $ret); } return $ret; }
protected function _getFormField() { $ret = new Kwf_Form_Field_Select($this->getData()->componentId); $ret->setFieldLabel($this->getRow()->field_label); if ($this->getRow()->label_width) { $ret->setLabelWidth($this->getRow()->label_width); } $ret->setWidth($this->getRow()->width); $ret->setAllowBlank(!$this->getRow()->required); $ret->setHideLabel($this->getRow()->hide_label); $values = array(); $s = new Kwf_Model_Select(); $s->order('pos'); foreach ($this->getRow()->getChildRows('Values', $s) as $i) { $values[$i->value] = $i->value; } $ret->setValues($values); if ($this->getRow()->label_position_above) { $ret->setLabelPosition('above'); } return $ret; }
public function testSelect() { $select = new Kwf_Model_Select(); $select->where('foo = ?', 1); $this->assertEquals($select->getPart(Kwf_Model_Select::WHERE), array(array('foo = ?', 1, null))); $select->where('bar = ?', 1); $this->assertEquals($select->getPart(Kwf_Model_Select::WHERE), array(array('foo = ?', 1, null), array('bar = ?', 1, null))); $select->whereEquals('foo', 1); $this->assertEquals($select->getPart(Kwf_Model_Select::WHERE_EQUALS), array('foo' => 1)); $select->whereEquals('foo', 'bar'); $this->assertEquals($select->getPart(Kwf_Model_Select::WHERE_EQUALS), array('foo' => 'bar')); $select->whereEquals('foo2', 'bar2'); $this->assertEquals($select->getPart(Kwf_Model_Select::WHERE_EQUALS), array('foo' => 'bar', 'foo2' => 'bar2')); $select->order('foo'); $this->assertEquals($select->getPart(Kwf_Model_Select::ORDER), array(array('field' => 'foo', 'direction' => 'ASC'))); $select->order('foo2', 'DESC'); $this->assertEquals($select->getPart(Kwf_Model_Select::ORDER), array(array('field' => 'foo', 'direction' => 'ASC'), array('field' => 'foo2', 'direction' => 'DESC'))); $select->limit(10); $this->assertEquals($select->getPart(Kwf_Model_Select::LIMIT_COUNT), 10); $this->assertEquals($select->getPart(Kwf_Model_Select::LIMIT_OFFSET), null); $select->limit(20); $this->assertEquals($select->getPart(Kwf_Model_Select::LIMIT_COUNT), 20); $select->limit(25, 10); $this->assertEquals($select->getPart(Kwf_Model_Select::LIMIT_COUNT), 25); $this->assertEquals($select->getPart(Kwf_Model_Select::LIMIT_OFFSET), 10); $this->assertEquals(count($select->getParts()), 5); $select = new Kwf_Model_Select(array('id' => 1)); $this->assertEquals($select->getPart(Kwf_Model_Select::WHERE_ID), 1); $select->whereId(10); $this->assertEquals($select->getPart(Kwf_Model_Select::WHERE_ID), 10); $select->whereId(11); $this->assertEquals($select->getPart(Kwf_Model_Select::WHERE_ID), 11); $select = new Kwf_Model_Select(); $select->order(Kwf_Model_Select::ORDER_RAND); $this->assertEquals($select->getPart(Kwf_Model_Select::ORDER), array(array('field' => Kwf_Model_Select::ORDER_RAND, 'direction' => 'ASC'))); }
public function select($where = array(), $order = null, $limit = null, $start = null) { if (!is_array($where)) { $ret = new Kwf_Model_Select(); if ($where) { $ret->whereEquals($this->getPrimaryKey(), $where); } } else { $ret = new Kwf_Model_Select($where); } if ($order) { $ret->order($order); } if ($limit || $start) { $ret->limit($limit, $start); } return $ret; }
protected function _getPageIds($parentData, $select) { if (!$parentData && ($p = $select->getPart(Kwf_Component_Select::WHERE_CHILD_OF))) { if ($p->getPage()) { $p = $p->getPage(); } $parentData = $p; } $pageIds = array(); if ($parentData && !$select->hasPart(Kwf_Component_Select::WHERE_ID)) { // diese Abfragen sind implizit recursive=true $parentId = $parentData->dbId; if ($select->getPart(Kwf_Component_Select::WHERE_HOME)) { $s = new Kwf_Model_Select(); $s->whereEquals('is_home', true); $s->whereEquals('parent_subroot_id', $parentData->getSubroot()->dbId); //performance to look only in subroot - correct filterting done below Kwf_Benchmark::count('GenPage::query', 'home'); $rows = $this->_getModel()->export(Kwf_Model_Interface::FORMAT_ARRAY, $s, array('columns' => array('id'))); $homePages = array(); foreach ($rows as $row) { $homePages[] = $row['id']; } foreach ($homePages as $pageId) { $pd = $this->_getPageData($pageId); if (substr($pd['parent_id'], 0, strlen($parentId)) == $parentId) { $pageIds[] = $pageId; continue; } foreach ($pd['parent_ids'] as $pageParentId) { if ($pageParentId == $parentId) { $pageIds[] = $pageId; break; } } } } else { if ($select->hasPart(Kwf_Component_Select::WHERE_FILENAME)) { $filename = $select->getPart(Kwf_Component_Select::WHERE_FILENAME); $cacheId = 'pcFnIds-' . $parentId . '-' . $filename; $pageIds = Kwf_Cache_Simple::fetch($cacheId); if ($pageIds === false) { $s = new Kwf_Model_Select(); $s->whereEquals('filename', $filename); if (is_numeric($parentId)) { $s->whereEquals('parent_id', $parentId); } else { $s->where(new Kwf_Model_Select_Expr_Like('parent_id', $parentId . '%')); } Kwf_Benchmark::count('GenPage::query', 'filename'); $rows = $this->_getModel()->export(Kwf_Model_Interface::FORMAT_ARRAY, $s, array('columns' => array('id'))); $pageIds = array(); foreach ($rows as $row) { $pageIds[] = $row['id']; } if ($pageIds) { Kwf_Cache_Simple::add($cacheId, $pageIds); } else { $s->order('date', 'DESC'); $rows = $this->getHistoryModel()->export(Kwf_Model_Interface::FORMAT_ARRAY, $s, array('columns' => array('page_id'))); foreach ($rows as $row) { $pageIds[] = $row['page_id']; } } } } else { if ($select->hasPart(Kwf_Component_Select::WHERE_COMPONENT_CLASSES)) { $selectClasses = $select->getPart(Kwf_Component_Select::WHERE_COMPONENT_CLASSES); $keys = array(); foreach ($selectClasses as $selectClass) { $key = array_search($selectClass, $this->_settings['component']); if ($key) { $keys[] = $key; } } $s = new Kwf_Model_Select(); $s->whereEquals('component', array_unique($keys)); if (is_numeric($parentId)) { $s->whereEquals('parent_id', $parentId); } else { $s->where(new Kwf_Model_Select_Expr_Like('parent_id', $parentId . '%')); } $s->order('pos'); Kwf_Benchmark::count('GenPage::query', 'component'); $rows = $this->_getModel()->export(Kwf_Model_Interface::FORMAT_ARRAY, $s, array('columns' => array('id'))); foreach ($rows as $row) { $pageIds[] = $row['id']; } } else { $pageIds = $this->_getChildPageIds($parentId); } } } } else { $pagesSelect = new Kwf_Model_Select(); if ($id = $select->getPart(Kwf_Component_Select::WHERE_ID)) { //query only by id, no db query required $pageIds = array($id); if ($sr = $select->getPart(Kwf_Component_Select::WHERE_SUBROOT)) { $pd = $this->_getPageData($id); if ($pd['parent_subroot_id'] != $sr[0]->dbId) { $pageIds = array(); } } if ($pageIds && $select->hasPart(Kwf_Component_Select::WHERE_COMPONENT_CLASSES)) { $selectClasses = $select->getPart(Kwf_Component_Select::WHERE_COMPONENT_CLASSES); $keys = array(); foreach ($selectClasses as $selectClass) { $key = array_search($selectClass, $this->_settings['component']); if ($key && !in_array($key, $keys)) { $keys[] = $key; } } $pd = $this->_getPageData($id); if (!in_array($pd['component'], $keys)) { $pageIds = array(); } } if ($pageIds && $select->getPart(Kwf_Component_Select::WHERE_HOME)) { $pd = $this->_getPageData($id); if (!$pd['is_home']) { $pageIds = array(); } } } else { $benchmarkType = ''; if ($select->hasPart(Kwf_Component_Select::WHERE_SUBROOT)) { $subroot = $select->getPart(Kwf_Component_Select::WHERE_SUBROOT); $subroot = $subroot[0]; $pagesSelect->whereEquals('parent_subroot_id', $subroot->dbId); $benchmarkType .= 'subroot '; } if ($select->getPart(Kwf_Component_Select::WHERE_HOME)) { $pagesSelect->whereEquals('is_home', true); $benchmarkType .= 'home '; } if ($id = $select->getPart(Kwf_Component_Select::WHERE_ID)) { $pagesSelect->whereEquals('id', $id); $benchmarkType .= 'id '; } if ($select->hasPart(Kwf_Component_Select::WHERE_COMPONENT_CLASSES)) { $selectClasses = $select->getPart(Kwf_Component_Select::WHERE_COMPONENT_CLASSES); $keys = array(); foreach ($selectClasses as $selectClass) { $key = array_search($selectClass, $this->_settings['component']); if ($key && !in_array($key, $keys)) { $keys[] = $key; } } $pagesSelect->whereEquals('component', $keys); $benchmarkType .= 'component '; } Kwf_Benchmark::count('GenPage::query', "noparent(" . trim($benchmarkType) . ")"); $rows = $this->_getModel()->export(Kwf_Model_Interface::FORMAT_ARRAY, $pagesSelect, array('columns' => array('id'))); $pageIds = array(); foreach ($rows as $row) { $pageIds[] = $row['id']; } } if ($parentData) { $parentId = $parentData->dbId; foreach ($pageIds as $k => $pageId) { $match = false; $pd = $this->_getPageData($pageId); if (!$pd) { continue; } if (substr($pd['parent_id'], 0, strlen($parentId)) == $parentId) { $match = true; } if (!$match) { foreach ($pd['parent_ids'] as $pageParentId) { if ($pageParentId == $parentId) { $match = true; break; } } } if (!$match) { unset($pageIds[$k]); } } } } return $pageIds; }
public function hasContent() { $dataSelect = new Kwf_Model_Select(); $dataSelect->whereEquals('visible', 1); $dataSelect->order('pos', 'ASC'); $rows = $this->_getRow()->getChildRows('tableData', $dataSelect); if (count($rows)) { return true; } else { return false; } }
public function testGetIdsOrderLimit() { $s = new Kwf_Model_Select(); $s->limit(2); $s->order('foo'); $ids = $this->_m->getIds($s); $this->assertEquals(2, count($ids)); $this->assertEquals('1m2', $ids[0]); $this->assertEquals('2m2', $ids[1]); $s = new Kwf_Model_Select(); $s->limit(2, 2); $s->order('foo'); $ids = $this->_m->getIds($s); $this->assertEquals('1m1', $ids[0]); $this->assertEquals('1m3', $ids[1]); $s = new Kwf_Model_Select(); $s->limit(2, 4); $s->order('foo'); $ids = $this->_m->getIds($s); $this->assertEquals('2m1', $ids[0]); $this->assertEquals('2m3', $ids[1]); }
public function jsonPasteAction() { $session = new Kwf_Session_Namespace('PagesController:copy'); $id = $session->id; if (!$id || !Kwf_Component_Data_Root::getInstance()->getComponentByDbId($id, array('ignoreVisible' => true))) { throw new Kwf_Exception_Client(trlKwf('Clipboard is empty')); } $source = Kwf_Component_Data_Root::getInstance()->getComponentByDbId($id, array('ignoreVisible' => true)); $target = Kwf_Component_Data_Root::getInstance()->getComponentByDbId($this->_getParam('id'), array('ignoreVisible' => true)); $user = Zend_Registry::get('userModel')->getAuthedUser(); $acl = Kwf_Registry::get('acl')->getComponentAcl(); if (!$acl->isAllowed($user, $source) || !$acl->isAllowed($user, $target)) { throw new Kwf_Exception_AccessDenied(); } $progressBar = new Zend_ProgressBar(new Kwf_Util_ProgressBar_Adapter_Cache($this->_getParam('progressNum')), 0, Kwf_Util_Component::getDuplicateProgressSteps($source)); Kwf_Util_MemoryLimit::set(256); Kwf_Events_ModelObserver::getInstance()->disable(); //This would be slow as hell. But luckily we can be sure that for the new (duplicated) components there will be no view cache to clear. $newPage = Kwf_Util_Component::duplicate($source, $target, $progressBar); Kwf_Util_Component::afterDuplicate($source, $newPage); Kwf_Events_ModelObserver::getInstance()->enable(); $progressBar->finish(); $s = new Kwf_Model_Select(); $s->whereEquals('parent_id', $newPage->row->parent_id); $s->order('pos', 'DESC'); $s->limit(1); $lastRow = $newPage->generator->getModel()->getRow($s); $row = $newPage->generator->getModel()->getRow($newPage->row->id); $row->pos = $lastRow ? $lastRow->pos + 1 : 1; $row->visible = false; $row->save(); }
public function testWithPosUpdateAndMove() { $form = new Kwf_Form(); $form->setModel(Kwf_Model_Abstract::getInstance('Kwf_Form_MultiFields_TestModel1')); $form->add(new Kwf_Form_Field_MultiFields('Model2'))->fields->add(new Kwf_Form_Field_TextField('foo')); $post = array('Model2' => array(array('id' => 6, 'foo' => 'blub2'), array('id' => 4, 'foo' => 'blub0'), array('id' => 5, 'foo' => 'blub1'))); $form->setId(3); $post = $form->processInput(null, $post); $form->validate(null, $post); $form->prepareSave(null, $post); $form->save(null, $post); $form->afterSave(null, $post); $s = new Kwf_Model_Select(); $s->order('pos'); $r = Kwf_Model_Abstract::getInstance('Kwf_Form_MultiFields_TestModel1')->getRow(3); $data = $r->getChildRows('Model2', $s)->toArray(); $this->assertEquals('blub2', $data[0]['foo']); $this->assertEquals('blub0', $data[1]['foo']); $this->assertEquals('blub1', $data[2]['foo']); }
protected function _getRowsByRow(Kwf_Model_Row_Interface $row) { $pk = $row->getModel()->getPrimaryKey(); if (!$row->{$pk}) { //neuer eintrag (noch keine id) return array(); } if ($this->getReferenceName()) { if ($this->getSelect()) { $select = $this->getSelect(); } else { $select = new Kwf_Model_Select(); } if ($row->getModel()->getDependentModel($this->getReferenceName())->hasColumn('pos')) { $select->order('pos'); } $rows = $row->getChildRows($this->getReferenceName(), $select); } else { $ref = $this->_getReferences($row); $where = array(); foreach (array_keys($ref['columns']) as $k) { $where["{$ref['columns'][$k]} = ?"] = $row->{$ref['refColumns'][$k]}; } if ($this->getModel()->hasColumn('pos')) { $where['order'] = 'pos'; } $rows = $this->getModel()->fetchAll($where); } return $rows; }