getObject(); /** @var kMultiLanguage $ml_formatter */ $ml_formatter = $this->Application->recallObject('kMultiLanguage'); $object->addCalculatedField('CategoryName', 'c.' . $ml_formatter->LangFieldName('CachedNavbar')); } /** * Set's new category as primary for product * * @param kEvent $event */ function OnSetPrimary($event) { /** @var kDBItem $object */ $object = $event->getObject(Array ('skip_autoload' => true)); $ids = $this->StoreSelectedIDs($event); if ( $ids ) { $id = array_shift($ids); $table_info = $object->getLinkedInfo(); $this->Conn->Query('UPDATE ' . $object->TableName . ' SET PrimaryCat = 0 WHERE ' . $table_info['ForeignKey'] . ' = ' . $table_info['ParentId']); $this->Conn->Query('UPDATE ' . $object->TableName . ' SET PrimaryCat = 1 WHERE (' . $table_info['ForeignKey'] . ' = ' . $table_info['ParentId'] . ') AND (Id = ' . $id . ')'); } $event->SetRedirectParam('opener', 's'); } /** * Removes primary mark from cloned category items record * * @param kEvent $event * @return void * @access protected */ protected function OnAfterClone(kEvent $event) { parent::OnAfterClone($event); $config = $event->getUnitConfig(); $sql = 'UPDATE ' . $config->getTableName() . ' SET PrimaryCat = 0 WHERE ' . $config->getIDField() . ' = ' . $event->getEventParam('id'); $this->Conn->Query($sql); } /** * Deletes items of requested type from requested categories. * In case if item is deleted from it's last category, then delete item too. * * @param kEvent $event * @return void * @access protected */ protected function OnDeleteFromCategory($event) { $category_ids = $event->getEventParam('category_ids'); if ( !$category_ids ) { return ; } $item_prefix = $event->getEventParam('item_prefix'); /** @var kCatDBItem $item */ $item = $this->Application->recallObject($item_prefix . '.-item', null, Array ('skip_autoload' => true)); $ci_table = $event->getUnitConfig()->getTableName(); $item_table = $this->Application->getUnitConfig($item_prefix)->getTableName(); $sql = 'SELECT ItemResourceId, CategoryId FROM %1$s INNER JOIN %2$s ON (%1$s.ResourceId = %2$s.ItemResourceId) WHERE CategoryId IN (%3$s)'; $category_items = $this->Conn->Query( sprintf($sql, $item_table, $ci_table, implode(',', $category_ids)) ); $item_hash = Array (); foreach ($category_items as $ci_row) { $item_hash[ $ci_row['ItemResourceId'] ][] = $ci_row['CategoryId']; } foreach ($item_hash as $item_resource_id => $delete_category_ids) { $item->Load($item_resource_id, 'ResourceId'); $item->DeleteFromCategories($delete_category_ids); } } /** * Makes sure, that parent category item is loaded when coping back from temp table * * @param kEvent $event * * @return void * @see CategoryItems_DBItem::GetKeyClause() */ protected function OnAfterCopyToLive(kEvent $event) { // don't call parent, because it's unclear how from here we can get parent item's ID here } }