Page MenuHomeIn-Portal Phabricator

in-link
No OneTemporary

File Metadata

Created
Sun, Apr 20, 1:00 PM
Index: branches/5.0.x/units/links/links_event_handler.php
===================================================================
--- branches/5.0.x/units/links/links_event_handler.php (revision 13286)
+++ branches/5.0.x/units/links/links_event_handler.php (revision 13287)
@@ -1,488 +1,517 @@
<?php
/**
* @version $Id$
* @package In-Link
* @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 LinksEventHandler extends kCatDBEventHandler {
/**
* Allows to override standart permission mapping
*
*/
function mapPermissions()
{
parent::mapPermissions();
$permissions = Array(
'OnContactFormSubmit' => Array('self' => true),
'OnProcessReciprocalLinks' => Array('self' => true),
'OnSetGrouping' => Array('self' => 'view'),
'OnStoreSelected' => Array('self' => 'view'),
'OnMerge' => Array('self' => 'edit'),
);
$this->permMapping = array_merge($this->permMapping, $permissions);
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function SetCustomQuery(&$event)
{
parent::SetCustomQuery($event);
$object =& $event->getObject();
if (!$this->Application->isAdminUser) {
$object->addFilter('expire_filter', '(Expire > '.adodb_mktime().' OR Expire IS NULL)');
}
if (substr($event->Special, 0, 10) == 'duplicates') {
$object->removeFilter('category_filter');
$link_helper =& $this->Application->recallObject('LinkHelper');
/* @var $link_helper LinkHelper */
$grouping = $link_helper->getGrouping( $event->getPrefixSpecial() );
switch ($event->Special) {
case 'duplicates':
foreach ($grouping as $group_field) {
$object->AddGroupByField($object->TableName.'.'.$group_field);
}
$object->addFilter('has_dupes_filter', 'DupeCount > 1', AGGREGATE_FILTER, FLT_SYSTEM);
break;
case 'duplicates-sub':
$main_object =& $this->Application->recallObject($event->Prefix.'.duplicates');
foreach ($grouping as $field_index => $group_field) {
$object->addFilter('dupe_filter_'.$field_index, '%1$s.`'.$group_field.'` = '.$this->Conn->qstr($main_object->GetDBField($group_field)) );
}
break;
}
$object->addFilter('primary_filter', TABLE_PREFIX.'CategoryItems.PrimaryCat = 1');
}
}
/**
* Set groping fields for link duplicate checker
*
* @param kEvent $event
*/
function OnSetGrouping(&$event)
{
$this->Application->LinkVar($event->getPrefixSpecial(true).'_dupe_fields', $event->getPrefixSpecial().'_dupe_fields');
}
/**
* Merge duplicate links together (only categories) & delete duplicates
*
* @param kEvent $event
*/
function OnMerge(&$event)
{
$link_helper =& $this->Application->recallObject('LinkHelper');
/* @var $link_helper LinkHelper */
$grouping = $link_helper->getGrouping( $event->getPrefixSpecial() );
$ids = $this->StoreSelectedIDs($event);
if (!$ids) {
return true;
}
// check, that user has not selected multiple links from same group
$primary_links = Array();
$id_field = $this->Application->getUnitOption($event->Prefix, 'IDField');
$table_name = $this->Application->getUnitOption($event->Prefix, 'TableName');
$sql = 'SELECT *
FROM '.$table_name.'
WHERE '.$id_field.' IN ('.implode(',', $ids).')';
$links = $this->Conn->Query($sql, $id_field);
$groping_error = false;
foreach ($links as $link_id => $link_data) {
$group_key = '';
foreach ($grouping as $grouping_field) {
$group_key .= 'main_table.`'.$grouping_field.'` = '.$this->Conn->qstr($link_data[$grouping_field]).' AND ';
}
$group_key = substr($group_key, 0, -5);
if (isset($primary_links[$group_key])) {
$groping_error = true;
break;
}
else {
$primary_links[$group_key] = $link_data['ResourceId'];
}
}
if (!$groping_error) {
$temp =& $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler');
$categories_sql = 'SELECT main_table.ResourceId, ci.CategoryId, main_table.'.$id_field.'
FROM '.$table_name.' main_table
LEFT JOIN '.TABLE_PREFIX.'CategoryItems ci ON main_table.ResourceId = ci.ItemResourceId
WHERE %s';
foreach ($primary_links as $group_key => $primary_resource_id) {
$categories = Array();
$group_links = Array();
$group_categories = $this->Conn->Query(sprintf($categories_sql, $group_key));
foreach ($group_categories as $category_data) {
$group_links[ $category_data['ResourceId'] ] = $category_data[$id_field];
$categories[$category_data['ResourceId'] == $primary_resource_id ? 'remove' : 'add'][] = $category_data['CategoryId'];
}
unset($group_links[$primary_resource_id]);
$categories = array_unique( array_diff($categories['add'], $categories['remove']) );
if ($categories) {
// add link to other link categories
$values_sql = '';
foreach ($categories as $category_id) {
$values_sql .= '('.$category_id.','.$primary_resource_id.',0),';
}
$values_sql = substr($values_sql, 0, -1);
$insert_sql = 'INSERT INTO '.TABLE_PREFIX.'CategoryItems (CategoryId,ItemResourceId,PrimaryCat) VALUES '.$values_sql;
$this->Conn->Query($insert_sql);
}
// delete all links from group except primary
$temp->DeleteItems($event->Prefix, $event->Special, array_values($group_links));
}
}
else {
$event->status = erFAIL;
$event->redirect = false;
$this->Application->SetVar($event->getPrefixSpecial().'_error', 1);
}
}
/**
* Stores ids, that were selected in duplicate checker
*
* @param kEvent $event
*/
function OnStoreSelected(&$event)
{
$this->StoreSelectedIDs($event);
$event->SetRedirectParam('pass', 'm,' . $event->getPrefixSpecial());
}
/**
* Allows to enhance link after creation
*
* @param kEvent $event
*/
function OnCreate(&$event)
{
parent::OnCreate($event);
if ($event->status == erSUCCESS) {
$object =& $event->getObject();
/* @var $object kDBItem */
// replace 0 id in post with actual created id (used in enhancement process)
$items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
array_rename_key($items_info, 0, $object->GetID());
$this->Application->SetVar($event->getPrefixSpecial(true), $items_info);
// listing was created -> enhance it right away
$enhancement_event = new kEvent('ls:OnRequestEnhancement');
$this->Application->HandleEvent($enhancement_event);
if (($enhancement_event->status == erSUCCESS) && strlen($enhancement_event->redirect)) {
$event->SetRedirectParam('next_template', $event->redirect);
$event->redirect = $enhancement_event->redirect;
}
}
}
/**
* Adds free listing option to listing type selection
*
* @param kEvent $event
*/
function OnAfterConfigRead(&$event)
{
parent::OnAfterConfigRead($event);
if (defined('IS_INSTALL') && IS_INSTALL) {
return ;
}
$free_listings = $this->Application->ConfigValue('Link_AllowFreeListings');
$virtual_fields = $this->Application->getUnitOption($event->Prefix, 'VirtualFields');
$virtual_fields['ListingTypeId']['options'] = $free_listings ? Array (0 => 'lu_free_listing') : Array ();
$language_id = $this->Application->GetVar('m_lang');
$duplicate_options = array_flip($virtual_fields['DuplicateCheckFields']['options']);
$duplicate_options['NAME'] = 'l' . $language_id . '_Name';
$virtual_fields['DuplicateCheckFields']['options'] = array_flip($duplicate_options);
$default = $virtual_fields['DuplicateCheckFields']['default'];
$virtual_fields['DuplicateCheckFields']['default'] = str_replace('|Name|', '|l' . $language_id . '_Name|', $default);
$this->Application->setUnitOption($event->Prefix, 'VirtualFields', $virtual_fields);
if (!$this->Application->isAdminUser) {
// for now only on Front-End
$this->Application->setUnitOption($event->Prefix, 'PopulateMlFields', true);
}
}
/**
* contact us form submitted on link details page
*
* @param kEvent $event
*/
function OnContactFormSubmit(&$event)
{
$fields = Array (
'ContactFormFullName', 'ContactFormEmail', 'ContactFormSubject', 'ContactFormBody', 'ContactFormCaptcha'
);
// reset errors var
$this->Application->SetVar('ContactForm_HasErrors', '');
// 1. validate form fields
$required_fields = $this->Application->GetVar('FormRequiredFields');
foreach ($fields as $field_name) {
$field_value = trim($this->Application->GetVar($field_name));
if (in_array($field_name, $required_fields)) {
// custom captcha validation
if ($field_name == 'ContactFormCaptcha') {
if (!strlen($field_value) || ($field_value != $this->Application->RecallVar($event->Prefix . '_captcha_code'))) {
$this->Application->SetVar('error_'.$field_name, 1);
$captcha_helper =& $this->Application->recallObject('CaptchaHelper');
/* @var $captcha_helper kCaptchaHelper */
$this->Application->StoreVar($event->Prefix . '_captcha_code', $captcha_helper->GenerateCaptchaCode());
$event->status = erFAIL;
$event->redirect = false;
}
}
// email validation
elseif (!strlen($field_value) || ($field_name == 'ContactFormEmail' && !preg_match('/'.REGEX_EMAIL_USER.'@'.REGEX_EMAIL_DOMAIN.'/', $field_value))) {
$this->Application->SetVar('error_'.$field_name, 1);
$event->status = erFAIL;
$event->redirect = false;
}
}
}
if ($event->status != erSUCCESS) {
// set errors var
$this->Application->SetVar('ContactForm_HasErrors', 1);
return ;
}
$object =& $event->getObject(); // get link object
/* @var $object kDBItem */
$send_params = Array(
'from_name' => $this->Application->GetVar('ContactFormFullName'),
'from_email' => $this->Application->GetVar('ContactFormEmail'),
'from_subject' => $this->Application->GetVar('ContactFormSubject'),
'message' => $this->Application->GetVar('ContactFormBody'),
'to_linkname' => $object->GetField('Name'),
);
$email_event =& $this->Application->EmailEventUser('LINK.CONTACTFORM', $object->GetDBField('CreatedById'), $send_params);
if ($email_event->status == erSUCCESS) {
$event->redirect = $this->Application->GetVar('success_template');
$redirect_params = Array (
'opener' => 's',
'pass' => 'all',
'thankyou_header' => $this->Application->GetVar('success_label_header'),
'thankyou_text' => $this->Application->GetVar('success_label_body')
);
$event->setRedirectParams($redirect_params);
$this->Application->EmailEventAdmin('LINK.CONTACTFORM', null, $send_params);
}
else {
$this->Application->SetVar('error_ContactFormEmail', 1);
$event->status = erFAIL;
$event->redirect = false;
}
}
/**
* Makes reciprocal check on link, when it is created
*
* @param kEvent $event
*/
function OnBeforeItemCreate(&$event)
{
parent::OnBeforeItemCreate($event);
$this->_checkLink($event);
}
/**
* Makes reciprocal check on link, when it is updated
*
* @param kEvent $event
*/
function OnBeforeItemUpdate(&$event)
{
parent::OnBeforeItemUpdate($event);
$this->_checkLink($event);
}
/**
* Makes reciprocal check on link & saves results
*
* @param kEvent $event
*/
function _checkLink(&$event)
{
if (!$this->Application->ConfigValue('ReciprocalLinkChecking')) {
return ;
}
$object =& $event->getObject();
/* @var $object kDBItem */
if ($object->GetDBField('Url') != $object->GetOriginalField('Url')) {
// check only when url was changed
$link_helper =& $this->Application->recallObject('LinkHelper');
/* @var $link_helper LinkHelper */
$link_checked = $link_helper->CheckReciprocalURL($object->GetDBField('Url'));
$object->SetDBField('ReciprocalLinkFound', $link_checked ? LINK_IS_RECIPROCAL : LINK_IS_NOT_RECIPROCAL);
if (!$link_checked) {
$this->Application->EmailEventAdmin('LINK.RECIPROCAL.CHECK.FAILED');
}
}
}
/**
* Update links status by their reciprocal status
*
* @param kEvent $event
*/
function OnProcessReciprocalLinks(&$event)
{
if (!$this->Application->ConfigValue('ReciprocalLinkChecking')) {
return ;
}
$object =& $event->getObject( Array('skip_autoload' => true) );
/* @var $object kDBItem */
$link_helper =& $this->Application->recallObject('LinkHelper');
/* @var $link_helper LinkHelper */
// 1. verify all links, that were not verified previously
$sql = 'SELECT ' . $id_field . '
FROM ' . $table_name . '
WHERE (ReciprocalLinkFound = 0)';
$not_checked_links = $this->Conn->GetCol($sql);
foreach ($not_checked_links as $link_id) {
$object->Load($link_id);
$link_checked = $link_helper->CheckReciprocalURL($object->GetDBField('Url'));
$object->SetDBField('ReciprocalLinkFound', $link_checked ? LINK_IS_RECIPROCAL : LINK_IS_NOT_RECIPROCAL);
$object->Update();
if ($link_checked) {
$object->ApproveChanges();
}
else {
$object->DeclineChanges();
$this->Application->EmailEventAdmin('LINK.RECIPROCAL.CHECK.FAILED');
}
}
// 2. approve all links, that have succeeded in reciprocal check (during adding/changing on front-end)
$id_field = $this->Application->getUnitOption($event->Prefix, 'IDField');
$table_name = $this->Application->getUnitOption($event->Prefix, 'TableName');
$sql = 'SELECT ' . $id_field . '
FROM ' . $table_name . '
WHERE (ReciprocalLinkFound = ' . LINK_IS_RECIPROCAL . ') AND (Status <> ' . STATUS_ACTIVE . ')';
$verified_links = $this->Conn->GetCol($sql);
foreach ($verified_links as $link_id) {
$object->Load($link_id);
$object->ApproveChanges();
}
// 3. decline all links, that failed in reciprocal check (during adding/changing on front-end)
$sql = 'SELECT ' . $id_field . '
FROM ' . $table_name . '
WHERE (ReciprocalLinkFound = ' . LINK_IS_NOT_RECIPROCAL . ') AND (Status <> ' . STATUS_DISABLED . ')';
$not_verified_links = $this->Conn->GetCol($sql);
foreach ($not_verified_links as $link_id) {
$object->Load($link_id);
$object->DeclineChanges();
}
}
/**
* Allows to load duplicate link by special id
*
* @param kEvent $event
* @return int
*/
function getPassedID(&$event)
{
$id = parent::getPassedID($event);
if (($event->Special == 'duplicates') && !is_numeric($id)) {
$load_keys = unserialize( base64_decode($id) );
// can't return $load_keys as $id, because "kCatDBItem::GetKeyClause" will ignore them
foreach ($load_keys as $field => $value) {
$load_keys[$field] = $field . ' = ' . $this->Conn->qstr($value);
}
$sql = 'SELECT ' . $this->Application->getUnitOption($event->Prefix, 'IDField') . '
FROM ' . $this->Application->getUnitOption($event->Prefix, 'TableName') . '
WHERE (' . implode(') AND (', $load_keys) . ')';
$id = $this->Conn->GetOne($sql);
}
return $id;
}
/**
* Returns events, that require item-based (not just event-name based) permission check
*
* @return Array
*/
function _getMassPermissionEvents()
{
$events = parent::_getMassPermissionEvents();
$events[] = 'OnMerge';
return $events;
}
+
+ /**
+ * [HOOK] Allows to add cloned subitem to given prefix
+ *
+ * @param kEvent $event
+ */
+ function OnCloneSubItem(&$event)
+ {
+ parent::OnCloneSubItem($event);
+
+ if ($event->MasterEvent->Prefix == 'rev') {
+ $clones = $this->Application->getUnitOption($event->MasterEvent->Prefix, 'Clones');
+ $subitem_prefix = $event->Prefix . '-' . $event->MasterEvent->Prefix;
+
+ $clones[$subitem_prefix]['ConfigMapping'] = Array (
+ 'PerPage' => 'Perpage_LinkReviews',
+ 'ShortListPerPage' => 'Perpage_LinkReviews_Short',
+ 'DefaultSorting1Field' => 'Link_ReviewsSort',
+ 'DefaultSorting2Field' => 'Link_ReviewsSort2',
+ 'DefaultSorting1Dir' => 'Link_ReviewsOrder',
+ 'DefaultSorting2Dir' => 'Link_ReviewsOrder2',
+
+ 'ReviewDelayInterval' => 'link_ReviewDelay_Interval',
+ 'ReviewDelayValue' => 'link_ReviewDelay_Value',
+ );
+
+ $this->Application->setUnitOption($event->MasterEvent->Prefix, 'Clones', $clones);
+ }
+ }
}
\ No newline at end of file
Index: branches/5.0.x/units/links/links_config.php
===================================================================
--- branches/5.0.x/units/links/links_config.php (revision 13286)
+++ branches/5.0.x/units/links/links_config.php (revision 13287)
@@ -1,592 +1,648 @@
<?php
/**
* @version $Id$
* @package In-Link
* @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' => 'l',
'ItemClass' => Array ('class' => 'kCatDBItem', 'file' => '', 'build_event' => 'OnItemBuild'),
'ListClass' => Array ('class' => 'kCatDBList', 'file' => '', 'build_event' => 'OnListBuild'),
'EventHandlerClass' => Array ('class' => 'LinksEventHandler', 'file' => 'links_event_handler.php', 'require_classes' => Array ('kCatDBEventHandler'), 'build_event' => 'OnBuild'),
'TagProcessorClass' => Array ('class' => 'LinkTagProcessor', 'file' => 'link_tag_processor.php', 'require_classes' => Array ('kCatDBTagProcessor'), 'build_event' => 'OnBuild'),
'AutoLoad' => true,
'ConfigPriority' => 0,
'RewritePriority' => 101,
'RewriteListener' => 'ModRewriteHelper:CategoryItemRewriteListener',
'Hooks' => Array (
Array (
'Mode' => hBEFORE,
'Conditional' => false,
'HookToPrefix' => '',
'HookToSpecial' => '*',
'HookToEvent' => Array ('OnAfterConfigRead'),
'DoPrefix' => 'cdata',
'DoSpecial' => '*',
'DoEvent' => 'OnDefineCustomFields',
),
Array (
'Mode' => hBEFORE,
'Conditional' => false,
- 'HookToPrefix' => '',
+ 'HookToPrefix' => '#file',
+ 'HookToSpecial' => '*',
+ 'HookToEvent' => Array ('OnAfterConfigRead'),
+ 'DoPrefix' => '',
+ 'DoSpecial' => '*',
+ 'DoEvent' => 'OnCloneSubItem',
+ ),
+
+ Array (
+ 'Mode' => hBEFORE,
+ 'Conditional' => false,
+ 'HookToPrefix' => 'rev',
+ 'HookToSpecial' => '*',
+ 'HookToEvent' => Array ('OnAfterConfigRead'),
+ 'DoPrefix' => '',
+ 'DoSpecial' => '*',
+ 'DoEvent' => 'OnCloneSubItem',
+ ),
+
+ Array (
+ 'Mode' => hBEFORE,
+ 'Conditional' => false,
+ 'HookToPrefix' => 'fav',
+ 'HookToSpecial' => '*',
+ 'HookToEvent' => Array ('OnAfterConfigRead'),
+ 'DoPrefix' => '',
+ 'DoSpecial' => '*',
+ 'DoEvent' => 'OnCloneSubItem',
+ ),
+
+ Array (
+ 'Mode' => hBEFORE,
+ 'Conditional' => false,
+ 'HookToPrefix' => 'rel',
+ 'HookToSpecial' => '*',
+ 'HookToEvent' => Array ('OnAfterConfigRead'),
+ 'DoPrefix' => '',
+ 'DoSpecial' => '*',
+ 'DoEvent' => 'OnCloneSubItem',
+ ),
+
+ Array (
+ 'Mode' => hBEFORE,
+ 'Conditional' => false,
+ 'HookToPrefix' => 'img',
'HookToSpecial' => '*',
'HookToEvent' => Array ('OnAfterConfigRead'),
- 'DoPrefix' => '#file',
+ 'DoPrefix' => '',
'DoSpecial' => '*',
- 'DoEvent' => 'OnDefineFiles',
+ 'DoEvent' => 'OnCloneSubItem',
),
+
+ Array (
+ 'Mode' => hBEFORE,
+ 'Conditional' => false,
+ 'HookToPrefix' => 'ci',
+ 'HookToSpecial' => '*',
+ 'HookToEvent' => Array ('OnAfterConfigRead'),
+ 'DoPrefix' => '',
+ 'DoSpecial' => '*',
+ 'DoEvent' => 'OnCloneSubItem',
+ ),
+
Array (
'Mode' => hAFTER,
'Conditional' => false,
'HookToPrefix' => '',
'HookToSpecial' => '*',
'HookToEvent' => Array ('OnAfterConfigRead'),
'DoPrefix' => 'captcha',
'DoSpecial' => '*',
'DoEvent' => 'OnPrepareCaptcha',
- ),
+ ),
),
'QueryString' => Array (
1 => 'id',
2 => 'Page',
3 => 'event',
4 => 'mode',
),
'AggregateTags' => Array (
Array (
'AggregateTo' => 'l',
'AggregatedTagName' => 'ListLinks',
'LocalTagName' => 'PrintList2',
),
),
'CatalogItem' => true,
'AdminTemplatePath' => 'links',
'AdminTemplatePrefix' => 'links_',
'SearchConfigPostfix' => 'links',
'IDField' => 'LinkId',
'StatusField' => Array ('Status'), // field, that is affected by Approve/Decline events
'ItemType' => 4,
'StatisticsInfo' => Array (
'pending' => Array (
'icon' => 'icon16_link_pending.png',
'label' => 'la_Text_Links',
'js_url' => '#url#',
'url' => Array ('t' => 'catalog/advanced_view', 'SetTab' => 'l', 'pass' => 'm,l.showall', 'l.showall_event' => 'OnSetFilterPattern', 'l.showall_filters' => 'show_active=0,show_pending=1,show_disabled=0,show_new=1,show_hot=1,show_pop=1,show_pick=1'),
'status' => STATUS_PENDING,
),
),
'TitlePhrase' => 'la_Text_Link', // phrase used to specify item type in relationship list
'ViewMenuPhrase' => 'la_title_Links',
'CatalogTabIcon' => 'in-link:icon16_links.png',
'UsePendingEditing' => true, // item editing is controlled by LINK.ADD/EDIT, LINK.ADD/EDIT.PENDING permissions
'CatalogSelectorName' => 'linklist', // used in old catalog section
'ItemPropertyMappings' => Array (
'NewDays' => 'Link_NewDays', // number of days item to be NEW
'MinPopVotes' => 'Link_MinPopVotes', // minimum number of votes for an item to be POP
'MinPopRating' => 'Link_MinPopRating', // minimum rating for an item to be POP
'MaxHotNumber' => 'Link_MaxHotNumber', // maximum number of HOT items
'HotLimit' => 'Link_HotLimit', // variable name in inp_Cache table
'ClickField' => 'Hits', // item click count is stored here (in item table)
),
'TitleField' => 'Name',
'TitlePresets' => Array (
'default' => Array (
'new_status_labels' => Array ('l' => '!la_title_AddingLink!'),
'edit_status_labels' => Array ('l' => '!la_title_EditingLink!'),
'new_titlefield' => Array ('l' => '!la_title_NewLink!'),
),
'links_edit' => Array (
'prefixes' => Array ('l'), 'format' => "#l_status# '#l_titlefield#' - !la_title_General!",
'toolbar_buttons' => Array ('select', 'cancel', 'prev', 'next'),
),
'link_list' => Array (
'prefixes' => Array ('c_List', 'l_List'),
'format' => "!la_title_Categories! (#c_recordcount#) - !la_title_Links!",
'toolbar_buttons' => Array (),
),
'links_categories' => Array (
'prefixes' => Array ('l', 'l-ci_List'), 'format' => "#l_status# '#l_titlefield#' - !la_title_Categories!",
'toolbar_buttons' => Array ('select', 'cancel', 'prev', 'next', 'new_item', 'delete', 'setprimary',),
),
'links_relations' => Array (
'prefixes' => Array ('l'), 'format' => "#l_status# '#l_titlefield#' - !la_title_Relations!",
'toolbar_buttons' => Array ('select', 'cancel', 'prev', 'next', 'new_item', 'edit', 'delete', 'approve', 'decline', 'view', 'dbl-click'),
),
'links_images' => Array (
'prefixes' => Array ('l'), 'format' => "#l_status# '#l_titlefield#' - !la_title_Images!",
'toolbar_buttons' => Array ('select', 'cancel', 'prev', 'next', 'new_item', 'edit', 'delete', 'move_up', 'move_down', 'setprimary', 'view', 'dbl-click'),
),
'links_files' => Array (
'prefixes' => Array ('l'), 'format' => "#l_status# '#l_titlefield#' - !la_title_Files!",
'toolbar_buttons' => Array ('select', 'cancel', 'prev', 'next', 'new_item', 'edit', 'delete', 'view', 'dbl-click'),
),
'links_reviews' => Array (
'prefixes' => Array ('l'), 'format' => "#l_status# '#l_titlefield#' - !la_title_Reviews!",
'toolbar_buttons' => Array ('select', 'cancel', 'prev', 'next', 'new_item', 'edit', 'delete', 'approve', 'decline', 'move_up', 'move_down', 'view', 'dbl-click'),
),
'links_custom' => Array (
'prefixes' => Array ('l'), 'format' => "#l_status# '#l_titlefield#' - !la_title_Custom!",
'toolbar_buttons' => Array ('select', 'cancel', 'prev', 'next'),
),
'images_edit' => Array (
'prefixes' => Array ('l', 'l-img'),
'new_status_labels' => Array ('l-img' => '!la_title_Adding_Image!'),
'edit_status_labels' => Array ('l-img' => '!la_title_Editing_Image!'),
'new_titlefield' => Array ('l-img' => '!la_title_New_Image!'),
'format' => "#l_status# '#l_titlefield#' - #l-img_status# '#l-img_titlefield#'",
'toolbar_buttons' => Array ('select', 'cancel'),
),
'file_edit' => Array (
'prefixes' => Array ('l', 'l-file'),
'new_status_labels' => Array ('l-file' => "!la_title_AddingFile!"),
'edit_status_labels' => Array ('l-file' => '!la_title_EditingFile!'),
'new_titlefield' => Array ('l-file' => '!la_title_NewFile!'),
'format' => "#l_status# '#l_titlefield#' - #l-file_status# '#l-file_titlefield#'",
'toolbar_buttons' => Array ('select', 'cancel'),
),
'reviews_edit' => Array (
'prefixes' => Array ('l', 'l-rev'),
'new_status_labels' => Array ('l-rev' =>"!la_title_Adding_Review! '!la_title_New_Review!'"),
'edit_status_labels' => Array ('l-rev' => '!la_title_Editing_Review!'),
'format' => "#l_status# '#l_titlefield#' - #l-rev_status#",
'toolbar_buttons' => Array ('select', 'cancel'),
),
'relations_edit' => Array (
'prefixes' => Array ('l', 'l-rel'),
'new_status_labels' => Array ('l-rel' =>"!la_title_Adding_Relationship! '!la_title_New_Relationship!'"),
'edit_status_labels' => Array ('l-rel' => '!la_title_Editing_Relationship!'),
'format' => "#l_status# '#l_titlefield#' - #l-rel_status#",
'toolbar_buttons' => Array ('select', 'cancel'),
),
'links_export' => Array ('format' => '!la_title_LinksExport!'),
'links_import' => Array ('format' => '!la_title_ImportLinks!'),
'duplicate_links' => Array (
'prefixes' => Array ('l.duplicates_List'), 'format' => "!la_title_DuplicateLinks! - %s",
'toolbar_buttons' => Array ('edit', 'view', 'dbl-click'),
),
'duplicate_links_view' => Array (
'prefixes' => Array ('l.duplicates-sub_List'), 'format' => "!la_title_Links!",
'toolbar_buttons' => Array ('cancel', 'edit', 'delete', 'merge_links', 'view', 'dbl-click'),
),
'tree_in-link' => Array ('format' => '!la_Text_Version! '.$this->Application->findModule('Name', 'In-Link', 'Version')),
),
'EditTabPresets' => Array (
'Default' => Array (
'general' => Array ('title' => 'la_tab_General', 't' => 'in-link/links/links_edit', 'priority' => 1),
'categories' => Array ('title' => 'la_tab_Categories', 't' => 'in-link/links/links_categories', 'priority' => 2),
'relations' => Array ('title' => 'la_tab_Relations', 't' => 'in-link/links/links_relations', 'priority' => 3),
'images' => Array ('title' => 'la_tab_Images', 't' => 'in-link/links/links_images', 'priority' => 4),
'files' => Array ('title' => 'la_tab_Files', 't' => 'in-link/links/links_files', 'priority' => 5),
'reviews' => Array ('title' => 'la_tab_Reviews', 't' => 'in-link/links/links_reviews', 'priority' => 6),
'custom' => Array ('title' => 'la_tab_Custom', 't' => 'in-link/links/links_custom', 'priority' => 7),
),
),
'PermItemPrefix' => 'LINK',
'PermTabText' => 'In-Link',
'PermSection' => Array ('main' => 'CATEGORY:in-link:links_list', 'search' => 'in-link:configuration_search', 'email' => 'in-link:configuration_email', 'custom' => 'in-link:configuration_custom'),
'Sections' => Array (
'in-link' => Array (
'parent' => 'in-portal:root',
'icon' => 'settings_in-link',
'label' => 'la_title_In-Link',
'url' => Array ('t' => 'index', 'pass_section' => true, 'pass' => 'm'),
'permissions' => Array ('view'),
'priority' => 2.3,
'container' => true,
'type' => stTREE,
),
'in-link:links' => Array (
'parent' => 'in-portal:site',
'icon' => 'links',
'label' => 'la_tab_Links',
'url' => Array ('t' => 'catalog/advanced_view', 'anchor' => 'tab-l.showall', 'pass' => 'm'),
'onclick' => 'setCatalogTab(\'l.showall\')',
'permissions' => Array ('view'),
'priority' => 3.1,
'type' => stTREE,
),
'in-link:duplicate_checker' => Array (
'parent' => 'in-link',
'icon' => 'duplicate_checker',
'label' => 'la_tab_DuplicateChecker',
'url' => Array ('t' => 'in-link/duplicate_checker', 'pass' => 'm'),
'permissions' => Array ('view', 'add', 'edit', 'delete'),
'priority' => 2,
'type' => stTREE,
),
// link settings
'in-link:setting_folder' => Array (
'parent' => 'in-portal:system',
'icon' => 'conf_directory',
'label' => 'la_title_In-Link',
'use_parent_header' => 1,
'url' => Array ('t' => 'index', 'pass_section' => true, 'pass' => 'm'),
'permissions' => Array ('view'),
'priority' => 3.3,
'container' => true,
'type' => stTREE,
),
/*'in-link:inlink_general' => Array (
'parent' => 'in-link:setting_folder',
'icon' => 'core:settings_general',
'label' => 'la_tab_GeneralSettings',
'url' => Array ('t' => 'config/config_general', 'pass_section' => true, 'pass' => 'm'),
'permissions' => Array ('view', 'edit'),
'priority' => 0.9,
'type' => stTREE,
),*/
'in-link:configuration_output' => Array (
'parent' => 'in-link:setting_folder',
'icon' => 'core:conf_output',
'label' => 'la_tab_ConfigOutput',
'url' => Array ('t' => 'config/config_general', 'pass_section' => true, 'pass' => 'm'),
'permissions' => Array ('view', 'edit'),
'priority' => 1,
'type' => stTREE,
),
'in-link:configuration_search' => Array (
'parent' => 'in-link:setting_folder',
'icon' => 'core:conf_search',
'label' => 'la_tab_ConfigSearch',
'url' => Array ('t' => 'config/config_search', 'module_key' => 'links', 'pass_section' => true, 'pass' => 'm'),
'permissions' => Array ('view', 'edit'),
'priority' => 2,
'type' => stTREE,
),
'in-link:configuration_email' => Array (
'parent' => 'in-link:setting_folder',
'icon' => 'core:conf_email',
'label' => 'la_tab_ConfigE-mail',
'url' => Array ('t' => 'config/config_email', 'pass_section' => true, 'pass' => 'm'),
'permissions' => Array ('view', 'edit'),
'priority' => 3,
'type' => stTREE,
),
'in-link:configuration_custom' => Array (
'parent' => 'in-link:setting_folder',
'icon' => 'core:conf_customfields',
'label' => 'la_tab_ConfigCustom',
'url' => Array ('t' => 'custom_fields/custom_fields_list', 'cf_type' => 4, 'pass_section' => true, 'pass' => 'm,cf'),
'permissions' => Array ('view', 'add', 'edit', 'delete'),
'priority' => 4,
'type' => stTREE,
),
),
'FilterMenu' => Array (
'Groups' => Array (
Array ('mode' => 'AND', 'filters' => Array ('show_active', 'show_pending', 'show_disabled'), 'type' => WHERE_FILTER),
Array ('mode' => 'AND', 'filters' => Array ('show_new'), 'type' => HAVING_FILTER),
Array ('mode' => 'AND', 'filters' => Array ('show_hot'), 'type' => HAVING_FILTER),
Array ('mode' => 'AND', 'filters' => Array ('show_pop'), 'type' => HAVING_FILTER),
Array ('mode' => 'AND', 'filters' => Array ('show_pick'), 'type' => WHERE_FILTER),
),
'Filters' => Array (
'show_active' => Array ('label' => 'la_Active', 'on_sql' => '', 'off_sql' => '%1$s.Status != 1' ),
'show_pending' => Array ('label' => 'la_Pending', 'on_sql' => '', 'off_sql' => '%1$s.Status != 2' ),
'show_disabled' => Array ('label' => 'la_Disabled', 'on_sql' => '', 'off_sql' => '%1$s.Status != 0' ),
's1' => Array (),
'show_new' => Array ('label' => 'la_Text_New', 'on_sql' => '', 'off_sql' => '`IsNew` != 1' ),
'show_hot' => Array ('label' => 'la_Text_Hot', 'on_sql' => '', 'off_sql' => '`IsHot` != 1' ),
'show_pop' => Array ('label' => 'la_Text_Pop', 'on_sql' => '', 'off_sql' => '`IsPop` != 1' ),
'show_pick' => Array ('label' => 'la_prompt_EditorsPick', 'on_sql' => '', 'off_sql' => '%1$s.`EditorsPick` != 1' ),
)
),
'TableName' => TABLE_PREFIX.'Link',
'CalculatedFields' => Array (
'' => Array (
'UserName' => 'IF (ISNULL(u.Login), IF (%1$s.CreatedById = -1, "root", IF (%1$s.CreatedById = -2, "Guest", "n/a")), u.Login)',
'CategoryId' => TABLE_PREFIX.'%3$sCategoryItems.CategoryId',
'Filename' => TABLE_PREFIX.'%3$sCategoryItems.Filename',
'CategoryFilename' => TABLE_PREFIX.'Category.NamedParentPath',
'PrimaryCat' => TABLE_PREFIX.'%3$sCategoryItems.PrimaryCat',
'ParentPath' => TABLE_PREFIX.'Category.ParentPath',
'SameImages' => 'img.SameImages',
'LocalThumb' => 'img.LocalThumb',
'ThumbPath' => 'img.ThumbPath',
'ThumbUrl' => 'img.ThumbUrl',
'LocalImage' => 'img.LocalImage',
'LocalPath' => 'img.LocalPath',
'FullUrl' => 'img.Url',
),
),
'CacheModRewrite' => true,
'AggregatedCalculatedFields' => Array (
'duplicates' => Array (
'DupeCount' => 'COUNT(*)',
),
),
'ListSQLs' => Array ( '' => ' SELECT %1$s.* %2$s
FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'%3$sCategoryItems ON '.TABLE_PREFIX.'%3$sCategoryItems.ItemResourceId = %1$s.ResourceId
LEFT JOIN '.TABLE_PREFIX.'Category ON '.TABLE_PREFIX.'Category.CategoryId = '.TABLE_PREFIX.'%3$sCategoryItems.CategoryId
LEFT JOIN '.TABLE_PREFIX.'Images img ON img.ResourceId = %1$s.ResourceId AND img.DefaultImg = 1
LEFT JOIN '.TABLE_PREFIX.'PermCache perm ON perm.CategoryId = '.TABLE_PREFIX.'%3$sCategoryItems.CategoryId
LEFT JOIN '.TABLE_PREFIX.'PortalUser u ON %1$s.CreatedById = u.PortalUserId
LEFT JOIN '.TABLE_PREFIX.'%3$sLinkCustomData cust ON %1$s.ResourceId = cust.ResourceId',
), // key - special, value - list select sql
'ListSortings' => Array (
'' => Array (
'ForcedSorting' => Array ('Priority' => 'desc'),
'Sorting' => Array ('Name' => 'asc', 'Description' => 'desc'),
)
),
'ItemSQLs' => Array ( '' => ' SELECT %1$s.* %2$s
FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'%3$sCategoryItems ON '.TABLE_PREFIX.'%3$sCategoryItems.ItemResourceId = %1$s.ResourceId
LEFT JOIN '.TABLE_PREFIX.'Category ON '.TABLE_PREFIX.'Category.CategoryId = '.TABLE_PREFIX.'%3$sCategoryItems.CategoryId
LEFT JOIN '.TABLE_PREFIX.'Images img ON img.ResourceId = %1$s.ResourceId AND img.DefaultImg = 1
LEFT JOIN '.TABLE_PREFIX.'PortalUser u ON %1$s.CreatedById = u.PortalUserId
LEFT JOIN '.TABLE_PREFIX.'%3$sLinkCustomData cust ON %1$s.ResourceId = cust.ResourceId'),
'SubItems' => Array ('l-rev', 'l-ci', 'l-rel', 'l-img', 'l-cdata', 'l-fav', 'l-file'),
'Fields' => Array (
'LinkId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0,),
'Name' => Array ('type' => 'string', 'formatter' => 'kMultiLanguage', 'not_null' => 1, 'required' => 1, 'max_len' => 255, 'default' => ''),
'AutomaticFilename' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 1),
'Description' => Array ('type' => 'string', 'formatter' => 'kMultiLanguage', 'using_fck' => 1, 'default' => null),
'Url' => Array ('type' => 'string', 'not_null' => 1, 'required' => 1, 'default' => ''),
'CreatedOn' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#'),
'Modified' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#'),
'Expire' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => null),
'Hits' => Array ('type' => 'double', 'formatter' => 'kFormatter', 'format' => '%d', 'not_null' => 1, 'default' => 0),
'CachedRating' => Array ('type' => 'string', 'not_null' => 1, 'formatter' => 'kFormatter', 'default' => 0),
'CachedVotesQty' => Array ('type' => 'int', 'formatter' => 'kFormatter', 'not_null' => 1, 'default' => 0),
'CachedReviewsQty' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
'CreatedById' => Array ('type' => 'int', 'formatter' => 'kLEFTFormatter', 'error_msgs' => Array ('invalid_option' => '!la_error_UserNotFound!'), 'options' => Array (-1 => 'root', -2 => 'Guest'), 'left_sql' => 'SELECT %s FROM '.TABLE_PREFIX.'PortalUser WHERE `%s` = \'%s\'', 'left_key_field' => 'PortalUserId', 'left_title_field' => 'Login', 'not_null' => 1, 'default' => -1),
'ModifiedById' => Array ('type' => 'int', 'formatter' => 'kLEFTFormatter', 'error_msgs' => Array ('invalid_option' => '!la_error_UserNotFound!'), 'options' => Array (-1 => 'root', -2 => 'Guest'), 'left_sql' => 'SELECT %s FROM '.TABLE_PREFIX.'PortalUser WHERE `%s` = \'%s\'', 'left_key_field' => 'PortalUserId', 'left_title_field' => 'Login', 'not_null' => 1, 'default' => -1),
'Priority' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
'Status' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (1 => 'la_Active', 2 => 'la_Pending', 0 => 'la_Disabled'), 'use_phrases' => 1,
'not_null' => 1, 'default' => 2,
),
'EditorsPick' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1,
'not_null' => 1, 'default' => 0,
),
'ResourceId' => Array ('type' => 'int', 'default' => null),
'HotItem' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (2 => 'la_Auto', 1 => 'la_Always', 0 => 'la_Never'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 2),
'PopItem' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (2 => 'la_Auto', 1 => 'la_Always', 0 => 'la_Never'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 2),
'NewItem' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (2 => 'la_Auto', 1 => 'la_Always', 0 => 'la_Never'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 2),
'OrgId' => Array ('type' => 'int', 'default' => null),
'CustomTemplate' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'MetaKeywords' => Array ('type' => 'string', 'default' => null),
'MetaDescription' => Array ('type' => 'string', 'formatter' => 'kFormatter', 'using_fck' => 1, 'default' => null),
'ReciprocalLinkFound' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter', 'options' => Array (0 => 'la_NotChecked', 1 => 'la_Yes', 2 => 'la_No'), 'use_phrases' => 1,
'not_null' => 1, 'default' => 0
),
),
'VirtualFields' => Array (
'UserName' => Array ('type' => 'string', 'default' => ''),
'DupeCount' => Array ('type' => 'string', 'default' => ''),
'ListingTypeId' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options_sql' => 'SELECT %1$s FROM '.TABLE_PREFIX.'ListingTypes ORDER BY Name', 'option_title_field' => 'Name', 'option_key_field' => 'ListingTypeId', 'default' => 0),
'MoreCategories' => Array ('type' => 'string', 'default' => ''),
// export related fields: begin
'CategoryId' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (), 'default' => 0),
'ExportFormat' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'CSV', /*2 => 'XML'*/), 'default' => 1),
'ExportFilename' => Array ('type' => 'string', 'default' => ''),
'FieldsSeparatedBy' => Array ('type' => 'string', 'default' => ', '),
'FieldsEnclosedBy' => Array ('type' => 'string', 'default' => '"'),
'LineEndings' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'Windows', 2 => 'UNIX'), 'default' => 1),
'LineEndingsInside' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'CRLF', 2 => 'LF'), 'default' => 2),
'IncludeFieldTitles' => Array (
- 'type' => 'int',
- 'formatter' => 'kOptionsFormatter',
+ 'type' => 'int',
+ 'formatter' => 'kOptionsFormatter',
'options' => Array (0 => 'la_No', 1 => 'la_Yes'),
'use_phrases' => 1, 'not_null' => 1, 'default' => 1,
),
'ExportColumns' => Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array ()),
'AvailableColumns' => Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array ()),
'CategoryFormat' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_MixedCategoryPath', 2 => 'la_SeparatedCategoryPath'), 'use_phrases' => 1, 'default' => 1),
'CategorySeparator' => Array ('type' => 'string', 'error_field' => 'CategoryFormat', 'default' => ':'),
'IsBaseCategory' => Array (
- 'type' => 'int',
- 'formatter' => 'kOptionsFormatter',
+ 'type' => 'int',
+ 'formatter' => 'kOptionsFormatter',
'options' => Array (0 => 'la_No', 1 => 'la_Yes'),
'use_phrases' => 1, 'not_null' => 1, 'default' => 0,
),
// export related fields: end
// import related fields: begin
'FieldTitles' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Automatic', 2 => 'la_Manual'), 'use_phrases' => 1, 'default' => 1),
'ImportSource' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Upload', 2 => 'la_Local'), 'use_phrases' => 1, 'default' => 2),
'ImportFilename' => Array ('type' => 'string', 'formatter' => 'kUploadFormatter', 'max_size' => MAX_UPLOAD_SIZE, 'upload_dir' => (defined('EXPORT_BASE_PATH') ? EXPORT_BASE_PATH : '/system/export') . '/'),
'ImportLocalFilename' => Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'default' => ''),
'CheckDuplicatesMethod' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_IDField', 2 => 'la_OtherFields'), 'use_phrases' => 1, 'default' => 1),
'ReplaceDuplicates' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (0 => 'la_No', 1 => 'la_Yes'), 'use_phrases' => 1, 'default' => 0),
'DuplicateCheckFields' => Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array ('Name' => 'NAME', 'Url' => 'URL'), 'default' => '|Name|Url|'),
'SkipFirstRow' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1, 'default' => 1),
// import related fields: end
'ThumbnailImage' => Array ('type' => 'string', 'default' => ''),
'FullImage' => Array ('type' => 'string', 'default' => ''),
'ImageAlt' => Array ('type' => 'string', 'default' => ''),
'Filename' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'CachedNavbar' => Array ('type' => 'string', 'default' => ''),
'ParentPath' => Array ('type' => 'string', 'default' => ''),
// for primary image
'SameImages' => Array ('type' => 'string', 'default' => ''),
'LocalThumb' => Array ('type' => 'string', 'default' => ''),
'ThumbPath' => Array ('type' => 'string', 'default' => ''),
'ThumbUrl' => Array ('type' => 'string', 'default' => ''),
'LocalImage' => Array ('type' => 'string', 'default' => ''),
'LocalPath' => Array ('type' => 'string', 'default' => ''),
'FullUrl' => Array ('type' => 'string', 'default' => ''),
),
'Grids' => Array (
'Default' => Array (
'Icons' => Array (
0 => 'icon16_link_disabled.png',
1 => 'icon16_link.png',
2 => 'icon16_link_pending.png',
'NEW' => 'icon16_link_new.png',
),
'Fields' => Array (
'LinkId' => Array ('title' => 'la_col_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 60, ),
'Name' => Array ('title' => 'la_col_LinkName', 'data_block' => 'grid_catitem_td', 'width' => 200, ),
'Url' => Array ('title' => 'la_col_LinkUrl', 'width' => 200, ),
'Description' => Array ('title' => 'la_col_Description', 'first_chars' => 100, 'width' => 100, ),
'CreatedOn' => Array ('title' => 'la_col_CreatedOn', 'filter_block' => 'grid_date_range_filter', 'width' => 145, ),
'Modified' => Array ('title' => 'la_col_Modified', 'filter_block' => 'grid_date_range_filter', 'width' => 145, ),
'Status' => Array ('title' => 'la_col_Status', 'filter_block' => 'grid_options_filter', 'width' => 70, ),
'Hits' => Array ('title' => 'la_col_Hits', 'filter_block' => 'grid_range_filter', 'width' => 60, ),
'CachedRating' => Array ('title' => 'la_col_Rating', 'filter_block' => 'grid_range_filter', 'width' => 70, ),
'CachedVotesQty' => Array ('title' => 'la_col_VoteCount', 'filter_block' => 'grid_range_filter', 'width' => 70, ),
'CachedReviewsQty' => Array ('title' => 'la_col_ReviewCount', 'filter_block' => 'grid_range_filter', 'width' => 85, ),
),
),
'Radio' => Array (
'Icons' => Array (
0 => 'icon16_link_disabled.png',
1 => 'icon16_link.png',
2 => 'icon16_link_pending.png',
'NEW' => 'icon16_link_new.png',
),
'Selector' => 'radio',
'Fields' => Array (
'LinkId' => Array ('title' => 'la_col_Id', 'data_block' => 'grid_radio_td', 'filter_block' => 'grid_range_filter', 'width' => 70, ),
'Name' => Array ('title' => 'la_col_LinkName', 'data_block' => 'grid_catitem_td', 'width' => 200, ),
'Url' => Array ('title' => 'la_col_LinkUrl', 'width' => 200, ),
'Description' => Array ('title' => 'la_col_Description', 'first_chars' => 100, 'width' => 100, ),
'CreatedOn' => Array ('title' => 'la_col_CreatedOn', 'filter_block' => 'grid_date_range_filter', 'width' => 145, ),
'Modified' => Array ('title' => 'la_col_Modified', 'filter_block' => 'grid_date_range_filter', 'width' => 145, ),
'Status' => Array ('title' => 'la_col_Status', 'filter_block' => 'grid_options_filter', 'width' => 70, ),
'Hits' => Array ('title' => 'la_col_Hits', 'filter_block' => 'grid_range_filter', 'width' => 60, ),
'CachedRating' => Array ('title' => 'la_col_Rating', 'filter_block' => 'grid_range_filter', 'width' => 70, ),
'CachedVotesQty' => Array ('title' => 'la_col_VoteCount', 'filter_block' => 'grid_range_filter', 'width' => 70, ),
'CachedReviewsQty' => Array ('title' => 'la_col_ReviewCount', 'filter_block' => 'grid_range_filter', 'width' => 85, ),
),
),
'Duplicates' => Array (
'Icons' => Array (
0 => 'icon16_link_disabled.png',
1 => 'icon16_link.png',
2 => 'icon16_link_pending.png',
'NEW' => 'icon16_link_new.png',
),
'Fields' => Array (
'Name' => Array ('title' => 'la_col_LinkName', 'filter_block' => 'grid_like_filter', 'width' => 250, ),
'Url' => Array ('title' => 'la_col_LinkUrl', 'filter_block' => 'grid_like_filter', 'width' => 300, ),
'DupeCount' => Array ('title' => 'la_col_DupeCount', 'filter_block' => 'grid_range_filter', 'width' => 100, ),
),
),
),
'ConfigMapping' => Array (
'PerPage' => 'Perpage_Links',
'ShortListPerPage' => 'Perpage_Links_Short',
'ForceEditorPick' => 'Link_ShowPick',
'DefaultSorting1Field' => 'Link_SortField',
'DefaultSorting2Field' => 'Link_SortField2',
'DefaultSorting1Dir' => 'Link_SortOrder',
'DefaultSorting2Dir' => 'Link_SortOrder2',
'RatingDelayValue' => 'link_RatingDelay_Value',
'RatingDelayInterval' => 'link_RatingDelay_Interval',
),
);
\ No newline at end of file

Event Timeline