Page Menu
Home
In-Portal Phabricator
Search
Configure Global Search
Log In
Files
F800180
in-portal
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sat, Feb 22, 12:03 AM
Size
10 KB
Mime Type
text/x-diff
Expires
Mon, Feb 24, 12:03 AM (7 h, 26 m)
Engine
blob
Format
Raw Data
Handle
573442
Attached To
rINP In-Portal
in-portal
View Options
Index: branches/5.2.x/core/units/category_items/category_items_event_handler.php
===================================================================
--- branches/5.2.x/core/units/category_items/category_items_event_handler.php (revision 16094)
+++ branches/5.2.x/core/units/category_items/category_items_event_handler.php (revision 16095)
@@ -1,187 +1,187 @@
<?php
/**
* @version $Id$
* @package In-Portal
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license GNU/GPL
* In-Portal is Open Source software.
* This means that this software may have been modified pursuant
* the GNU General Public License, and as distributed it includes
* or is derivative of works licensed under the GNU General Public License
* or other free or open source software licenses.
* See http://www.in-portal.org/license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
- class CategoryItemsEventHander extends kDBEventHandler
+ class CategoryItemsEventHandler extends kDBEventHandler
{
/**
* Setting language dependant navigation bar as calculated field
*
* @param kEvent $event
* @return void
* @access protected
* @see kDBEventHandler::OnListBuild()
*/
protected function SetCustomQuery(kEvent $event)
{
parent::SetCustomQuery($event);
$object = $event->getObject();
/* @var $object kDBList */
$ml_formatter = $this->Application->recallObject('kMultiLanguage');
/* @var $ml_formatter kMultiLanguage */
$object->addCalculatedField('CategoryName', 'c.' . $ml_formatter->LangFieldName('CachedNavbar'));
}
/**
* Set's new category as primary for product
*
* @param kEvent $event
*/
function OnSetPrimary($event)
{
$object = $event->getObject(Array ('skip_autoload' => true));
/* @var $object kDBItem */
$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 (CategoryId = ' . $id . ')');
}
$event->SetRedirectParam('opener', 's');
}
/**
* Apply custom processing to item
*
* @param kEvent $event
* @param string $type
* @return void
* @access protected
*/
protected function customProcessing(kEvent $event, $type)
{
if ( $event->Name == 'OnMassDelete' ) {
$object = $event->getObject();
$table_info = $object->getLinkedInfo();
switch ($type) {
case 'before':
$ids = $event->getEventParam('ids');
if ( $ids ) {
$sql = 'SELECT CategoryId
FROM ' . $object->TableName . '
WHERE (PrimaryCat = 0) AND (' . $table_info['ForeignKey'] . '=' . $table_info['ParentId'] . ') AND CategoryId IN (' . implode(',', $ids) . ')';
$event->setEventParam('ids', $this->Conn->GetCol($sql));
}
break;
// not needed because 'before' does not allow to delete primary cat!
/*case 'after':
// set 1st not deleted category as primary
$sql = 'SELECT COUNT(*)
FROM ' . $object->TableName . '
WHERE (PrimaryCat = 1) AND (' . $table_info['ForeignKey'] . ' = ' . $table_info['ParentId'] . ')';
$has_primary = $this->Conn->GetOne($sql);
if ( !$has_primary ) {
$sql = 'SELECT CategoryId
FROM ' . $object->TableName . '
WHERE ' . $table_info['ForeignKey'] . ' = ' . $table_info['ParentId'];
$cat_id = $this->Conn->GetOne($sql);
$sql = 'UPDATE ' . $object->TableName . '
SET PrimaryCat = 1
WHERE (' . $table_info['ForeignKey'] . ' = ' . $table_info['ParentId'] . ') AND (CategoryId = ' . $cat_id . ')';
$this->Conn->Query($sql);
}
break;*/
}
}
}
/**
* Removes primary mark from cloned category items record
*
* @param kEvent $event
* @return void
* @access protected
*/
protected function OnAfterClone(kEvent $event)
{
parent::OnAfterClone($event);
$id = $event->getEventParam('id');
$table = $this->Application->getUnitOption($event->Prefix, 'TableName');
$id_field = $this->Application->getUnitOption($event->Prefix, 'IDField');
$sql = 'UPDATE %s
SET PrimaryCat = 0
WHERE %s = %s';
$this->Conn->Query(sprintf($sql, $table, $id_field, $id));
}
/**
* 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');
$item = $this->Application->recallObject($item_prefix . '.-item', null, Array ('skip_autoload' => true));
/* @var $item kCatDBItem */
$ci_table = $this->Application->getUnitOption($event->Prefix, 'TableName');
$item_table = $this->Application->getUnitOption($item_prefix, 'TableName');
$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
}
}
\ No newline at end of file
Index: branches/5.2.x/core/units/category_items/category_items_config.php
===================================================================
--- branches/5.2.x/core/units/category_items/category_items_config.php (revision 16094)
+++ branches/5.2.x/core/units/category_items/category_items_config.php (revision 16095)
@@ -1,86 +1,86 @@
<?php
/**
* @version $Id$
* @package In-Portal
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license GNU/GPL
* In-Portal is Open Source software.
* This means that this software may have been modified pursuant
* the GNU General Public License, and as distributed it includes
* or is derivative of works licensed under the GNU General Public License
* or other free or open source software licenses.
* See http://www.in-portal.org/license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$config = Array (
'Prefix' => 'ci',
'ItemClass' => Array('class'=>'CategoryItems_DBItem','file'=>'category_items_dbitem.php','build_event'=>'OnItemBuild'),
'ListClass' => Array('class'=>'kDBList','file'=>'','build_event'=>'OnListBuild'),
- 'EventHandlerClass' => Array('class'=>'CategoryItemsEventHander','file'=>'category_items_event_handler.php','build_event'=>'OnBuild'),
+ 'EventHandlerClass' => Array('class'=>'CategoryItemsEventHandler','file'=>'category_items_event_handler.php','build_event'=>'OnBuild'),
'TagProcessorClass' => Array('class'=>'CategoryItemsTagProcessor','file'=>'category_items_tag_processor.php','build_event'=>'OnBuild'),
'AutoLoad' => true,
'QueryString' => Array(
1 => 'id',
2 => 'Page',
3 => 'PerPage',
4 => 'event',
),
'IDField' => 'CategoryId', // in this case idfield doesn't exit in destination table
'StatusField' => Array('PrimaryCat'), // field, that is affected by Approve/Decline events
'TableName' => TABLE_PREFIX.'CategoryItems',
'ParentTableKey'=> 'ResourceId',
'ForeignKey' => 'ItemResourceId',
// 'ParentPrefix' => 'p',
'AutoDelete' => true,
'AutoClone' => false,
'CalculatedFields' => Array(
'' => Array (
'DummyId' => 'IF(ISNULL(c.CategoryId),0,c.CategoryId)',
'CategoryStatus'=> 'c.Status',
)
),
'ListSQLs' => Array( ''=>' SELECT %1$s.* %2$s
FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'Categories AS c ON c.CategoryId = %1$s.CategoryId',
), // key - special, value - list select sql
'ItemSQLs' => Array( ''=>'SELECT * FROM %s',
),
'ListSortings' => Array(
'' => Array(
'Sorting' => Array('CategoryName' => 'asc'),
)
),
'Fields' => Array(
'DummyId' => Array(),
'CategoryId' => Array('type'=>'int','not_null'=>1,'default'=>0),
'ItemResourceId' => Array('type' => 'int', 'not_null' => 1, 'default' => 0),
'PrimaryCat' => Array('type' => 'int', 'not_null' => 1, 'default' => 0),
'ItemPrefix' => Array('type' => 'string','not_null'=>1,'default'=>''),
'Filename' => Array('type' => 'string','not_null'=>1,'default'=>''),
),
'VirtualFields' => Array (
'CategoryName' => Array ('type' => 'string', 'default' => ''),
'DummyId' => Array ('type' => 'int', 'default' => 0),
'CategoryStatus' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Active', 2 => 'la_Pending', 0 => 'la_Disabled' ), 'use_phrases' => 1, 'default' => 1),
),
'Grids' => Array (
'Default' => Array (
'Icons' => Array (
'default' => 'icon16_item.png',
0 => 'icon16_item.png',
1 => 'icon16_primary.png',
),
'Fields' => Array (
'CategoryName' => Array( 'title'=>'column:la_fld_Category', 'data_block' => 'grid_checkbox_category_td'),
),
),
),
);
\ No newline at end of file
Event Timeline
Log In to Comment