Page Menu
Home
In-Portal Phabricator
Search
Configure Global Search
Log In
Files
F785767
in-news
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
Thu, Feb 13, 1:05 AM
Size
55 KB
Mime Type
text/x-diff
Expires
Sat, Feb 15, 1:05 AM (1 d, 9 h)
Engine
blob
Format
Raw Data
Handle
564701
Attached To
rMINN Modules.In-News
in-news
View Options
Index: branches/RC/in-news/units/articles/articles_config.php
===================================================================
--- branches/RC/in-news/units/articles/articles_config.php (revision 11889)
+++ branches/RC/in-news/units/articles/articles_config.php (revision 11890)
@@ -1,447 +1,459 @@
<?php
+/**
+* @version $Id$
+* @package In-News
+* @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.net/license/ for copyright notices and details.
+*/
$config = Array(
'Prefix' => 'n',
'ItemClass' => Array('class' => 'kCatDBItem', 'file' => '', 'build_event' => 'OnItemBuild'),
'ListClass' => Array('class' => 'kCatDBList', 'file' => '', 'build_event' => 'OnListBuild'),
'EventHandlerClass' => Array('class' => 'ArticlesEventHandler', 'file' => 'articles_event_handler.php', 'require_classes' => Array('kCatDBEventHandler'), 'build_event' => 'OnBuild'),
'TagProcessorClass' => Array('class' => 'ArticlesTagProcessor', 'file' => 'articles_tag_processor.php', 'require_classes' => Array('kCatDBTagProcessor'), 'build_event' => 'OnBuild'),
'AutoLoad' => true,
'ConfigPriority' => 0,
'Hooks' => Array (
Array (
'Mode' => hAFTER,
'Conditional' => false,
'HookToPrefix' => 'c',
'HookToSpecial' => '*',
'HookToEvent' => Array('OnAfterConfigRead'),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnUpdateCategoryCustomFields',
),
Array (
'Mode' => hBEFORE,
'Conditional' => false,
'HookToPrefix' => '',
'HookToSpecial' => '*',
'HookToEvent' => Array('OnAfterConfigRead'),
'DoPrefix' => '#file',
'DoSpecial' => '*',
'DoEvent' => 'OnDefineFiles',
),
Array (
'Mode' => hBEFORE,
'Conditional' => false,
'HookToPrefix' => '',
'HookToSpecial' => '*',
'HookToEvent' => Array('OnAfterConfigRead'),
'DoPrefix' => 'cdata',
'DoSpecial' => '*',
'DoEvent' => 'OnDefineCustomFields',
),
),
'CatalogItem' => true,
'AdminTemplatePath' => 'articles',
'AdminTemplatePrefix' => 'articles_',
'SearchConfigPostfix' => 'articles',
'QueryString' => Array(
1 => 'id',
2 => 'Page',
3 => 'event',
4 => 'mode',
),
'RegularEvents' => Array(
'rss_category_update' => Array('EventName' => 'OnUpdateRSSAtricles', 'RunInterval' => 0, 'Type' => reBEFORE),
),
'IDField' => 'NewsId',
'StatusField' => Array('Status'), // field, that is affected by Approve/Decline events
'TitleField' => 'Title', // field, used in bluebar when editing existing item
'TitlePhrase' => 'la_Text_Article', // phrase used to specify item type in relationship list
'TitlePresets' => Array(
'default' => Array( 'new_status_labels' => Array('n' => '!la_title_AddingArticle!'),
'edit_status_labels' => Array('n' => '!la_title_EditingArticle!'),
'new_titlefield' => Array('n' => '!la_title_NewArticle!'),
),
'articles_edit' => Array('prefixes' => Array('n'), 'format' => "#n_status# '#n_titlefield#' - !la_title_General!"),
'articles_categories'=>Array('prefixes' => Array('n','n-ci_List'), 'format' => "#n_status# '#n_titlefield#' - !la_title_Categories!"),
'articles_relations'=> Array('prefixes' => Array('n'), 'format' => "#n_status# '#n_titlefield#' - !la_title_Relations!"),
'articles_images' => Array('prefixes' => Array('n'), 'format' => "#n_status# '#n_titlefield#' - !la_title_Images!"),
'articles_files' => Array('prefixes' => Array('n'), 'format' => "#n_status# '#n_titlefield#' - !la_title_Files!"),
'articles_reviews' => Array('prefixes' => Array('n'), 'format' => "#n_status# '#n_titlefield#' - !la_title_Reviews!"),
'articles_custom' => Array('prefixes' => Array('n'), 'format' => "#n_status# '#n_titlefield#' - !la_title_Custom!"),
'images_edit' => Array( 'prefixes' => Array('n', 'n-img'),
'new_status_labels' => Array('n-img'=>'!la_title_Adding_Image!'),
'edit_status_labels' => Array('n-img'=>'!la_title_Editing_Image!'),
'new_titlefield' => Array('n-img'=>'!la_title_New_Image!'),
'format' => "#n_status# '#n_titlefield#' - #n-img_status# '#n-img_titlefield#'",
),
'file_edit' => Array (
'prefixes' => Array ('n', 'n-file'),
'new_status_labels' => Array ('n-file' => "!la_title_AddingFile!"),
'edit_status_labels' => Array ('n-file' => '!la_title_EditingFile!'),
'new_titlefield' => Array ('n-file' => '!la_title_NewFile!'),
'format' => "#n_status# '#n_titlefield#' - #n-file_status# '#n-file_titlefield#'",
),
'reviews_edit' => Array( 'prefixes' => Array('n', 'n-rev'),
'new_status_labels' => Array('n-rev'=>"!la_title_Adding_Review! '!la_title_New_Review!'"),
'edit_status_labels' => Array('n-rev'=>'!la_title_Editing_Review!'),
'format' => "#n_status# '#n_titlefield#' - #n-rev_status#",
),
'relations_edit' => Array( 'prefixes' => Array('n', 'n-rel'),
'new_status_labels' => Array('n-rel'=>"!la_title_Adding_Relationship! '!la_title_New_Relationship!'"),
'edit_status_labels' => Array('n-rel'=>'!la_title_Editing_Relationship!'),
'format' => "#n_status# '#n_titlefield#' - #n-rel_status#",
),
'tree_in-news' => Array('format' => '!la_Text_Version! '.$this->Application->findModule('Name', 'In-News', 'Version')),
'articles_export' => Array('format' => '!la_title_ArticlesExport!'),
'articles_import' => Array('format' => '!la_title_ImportArticles!'),
),
'EditTabPresets' => Array (
'Default' => Array (
Array ('title' => 'la_tab_General', 't' => 'in-news/articles/articles_edit', 'priority' => 1),
Array ('title' => 'la_tab_Categories', 't' => 'in-news/articles/articles_categories', 'priority' => 2),
Array ('title' => 'la_tab_Relations', 't' => 'in-news/articles/articles_relations', 'priority' => 3),
Array ('title' => 'la_tab_Images', 't' => 'in-news/articles/articles_images', 'priority' => 4),
Array ('title' => 'la_tab_Files', 't' => 'in-news/articles/articles_files', 'priority' => 5),
Array ('title' => 'la_tab_Reviews', 't' => 'in-news/articles/articles_reviews', 'priority' => 6),
Array ('title' => 'la_tab_Custom', 't' => 'in-news/articles/articles_custom', 'priority' => 7),
),
),
'PermItemPrefix' => 'NEWS',
'PermTabText' => 'In-News',
'PermSection' => Array('main' => 'CATEGORY:in-news:articles_list', 'search' => 'in-news:configuration_search', 'email' => 'in-news:configuration_email', 'custom' => 'in-news:configuration_custom'),
'Sections' => Array(
/*'in-news' => Array(
'parent' => 'in-portal:root',
'icon' => 'settings_in-newz',
'label' => 'la_title_In-News',
'url' => Array('t' => 'index', 'pass_section' => true, 'pass' => 'm'),
'permissions' => Array('view'),
'priority' => 3.2,
'container' => true,
'type' => stTREE,
),*/
'in-news:articles' => Array(
'parent' => 'in-portal:site',
'icon' => 'settings_in-newz',
'label' => 'la_tab_Articles',
'url' => Array('t' => 'catalog/advanced_view', 'anchor' => 'tab-n.showall', 'pass' => 'm'),
'onclick' => 'setCatalogTab(\'n.showall\')',
'permissions' => Array('view'),
'priority' => 3,
'type' => stTREE,
),
// article settings
'in-news:setting_folder' => Array (
'parent' => 'in-portal:system',
'icon' => 'core:conf',
'label' => 'la_title_In-News',
'url' => Array ('t' => 'index', 'pass_section' => true, 'pass' => 'm'),
'permissions' => Array ('view'),
'priority' => 3.4,
'container' => true,
'type' => stTREE,
),
/*'in-news:innews_general' => Array(
'parent' => 'in-news: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' => 1,
'type' => stTREE,
),*/
'in-news:configuration_output' => Array(
'parent' => 'in-news:setting_folder',
'icon' => 'core:settings_output',
'label' => 'la_tab_ConfigOutput',
'url' => Array('t' => 'config/config_general', 'pass_section' => true, 'pass' => 'm'),
'permissions' => Array('view', 'edit'),
'priority' => 2,
'type' => stTREE,
),
'in-news:configuration_search' => Array(
'parent' => 'in-news:setting_folder',
'icon' => 'core:settings_search',
'label' => 'la_tab_ConfigSearch',
'url' => Array('t' => 'config/config_search', 'module_key' => 'articles', 'pass_section' => true, 'pass' => 'm'),
'permissions' => Array('view', 'edit'),
'priority' => 3,
'type' => stTREE,
),
'in-news:configuration_email' => Array(
'parent' => 'in-news:setting_folder',
'icon' => 'core:settings_email',
'label' => 'la_tab_ConfigE-mail',
'url' => Array('t' => 'config/config_email', 'pass_section' => true, 'pass' => 'm'),
'permissions' => Array('view', 'edit'),
'priority' => 4,
'type' => stTREE,
),
'in-news:configuration_custom' => Array(
'parent' => 'in-news:setting_folder',
'icon' => 'core:settings_custom',
'label' => 'la_tab_ConfigCustom',
'url' => Array('t' => 'custom_fields/custom_fields_list', 'cf_type' => 2, 'pass_section' => true, 'pass' => 'm,cf'),
'permissions' => Array('view', 'add', 'edit', 'delete'),
'priority' => 5,
'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' ),
)
),
'CatalogSelectorName' => 'newslist',
'ItemPropertyMappings' => Array(
'NewDays' => 'News_CatNewDays', // number of days item to be NEW
'MinPopVotes' => 'News_MinPopVotes', // minimum number of votes for an item to be POP
'MinPopRating' => 'News_MinPopRating',// minimum rating for an item to be POP
'MaxHotNumber' => 'News_MaxHotNumber',// maximum number of HOT items
'HotLimit' => 'News_HotLimit', // variable name in inp_Cache table
'ClickField' => 'Hits', // item click count is stored here (in item table)
),
'ItemType' => 2, // this is used when relation to product is added from in-portal and via-versa
'ViewMenuPhrase' => 'la_title_Articles',
'CatalogTabIcon' => 'in-news:icon16_article.gif',
'UsePendingEditing' => true, // item editing is controlled by NEWS.ADD/EDIT, NEWS.ADD/EDIT.PENDING permissions
'StatisticsInfo' => Array(
'pending' => Array(
'icon' => 'icon16_article_pending.gif',
'label' => 'la_Text_Articles',
'js_url' => '#url#',
'url' => Array('t' => 'catalog/advanced_view', 'SetTab' => 'n', 'pass' => 'm,n.showall', 'n.showall_event' => 'OnSetFilterPattern', 'n.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,
),
),
'TableName' => TABLE_PREFIX.'News',
'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,
'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$sNewsCustomData cust ON %1$s.ResourceId = cust.ResourceId',
), // key - special, value - list select sql
'ListSortings' => Array(
'' => Array(
'ForcedSorting' => Array('Priority' => 'desc'),
'Sorting' => Array('Title' => 'asc'),
)
),
'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$sNewsCustomData cust ON %1$s.ResourceId = cust.ResourceId'),
'SubItems' => Array('n-rev', 'n-ci', 'n-rel', 'n-img', 'n-cdata', 'n-fav', 'n-file'),
'Fields' => Array (
'NewsId' => Array('type' => 'int', 'not_null' => 1, 'default' => 0,),
'Title' => Array('type' => 'string', /*'formatter' => 'kMultiLanguage', */'not_null' => 1, 'required' => 1, 'default' => '', 'max_len' => 255),
'AutomaticFilename' => Array('type' => 'int', 'not_null' => 1, 'default' => 1),
'Excerpt' => Array('type' => 'string', /*'formatter' => 'kMultiLanguage',*/ 'default' => null),
'Author' => Array('type' => 'string', 'not_null' => 1, 'default' => ''),
'Body' => Array('type' => 'string', 'formatter' => 'kFormatter',/*'kMultiLanguage'*/ 'using_fck' => 1, 'required' => 1, 'default' => null),
'CreatedOn' => Array('type' => 'int', 'formatter' => 'kDateFormatter', 'required' => 1, 'not_null' => 1,'default' => '#NOW#'),
'TextFormat' => Array('type' => 'int', 'not_null' => 1, 'default' => 0),
'EndOn' => Array('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => null),
'Hits' => Array('type' => 'double', 'formatter' => 'kFormatter', 'format' => '%d', 'not_null' => 1, 'default' => 0),
'CachedRating' => Array('type' => 'string', 'default' => 0),
'CachedVotesQty' => 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, 'required' => 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),
'LeadStory' => Array('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array(1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 0),
'LeadCatStory' => 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),
'CachedReviewsQty' => Array('type' => 'int', 'not_null' => 1, 'default' => 0),
'StartDate' => Array('type' => 'int', 'formatter' => 'kDateFormatter', 'required' => 1, 'not_null' => 1, 'default' => '#NOW#'),
'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),
'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),
'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),
'Archived' => Array('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array(1 => 'la_Yes', 2 => 'la_No'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 0),
'Modified' => Array('type' => 'int', 'formatter' => 'kDateFormatter', 'not_null' => 1,'default' => '#NOW#'),
'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),
'OrgId' => Array('type' => 'int', 'default' => null),
'MetaKeywords' => Array('type' => 'string', 'default' => null),
'MetaDescription' => Array('type' => 'string', 'formatter' => 'kFormatter', 'using_fck' => 1, 'default' => null),
),
'VirtualFields' => Array (
'MoreCategories' => Array ('type' => 'string', 'default' => ''),
'UserName' => Array('type' => 'string', 'default' => ''),
'CategoryId' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (), 'default' => 0),
'cust_RssOriginalURL' => Array('type' => 'string', 'default' => ''),
'cust_RssArticleCRC' => Array('type' => 'int', 'default' => 0),
'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' => ''),
// export related fields: begin
'CategoryId' => Array('type' => 'int', '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', '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', 'default' => ':'),
'IsBaseCategory' => Array('type' => 'int', '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 : '/admin/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('Title' => 'TITLE'), 'default' => '|Title|'),
'SkipFirstRow' => Array('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array(1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1, 'default' => 1),
// import related fields: end
),
'Grids' => Array(
'Default' => Array(
'Icons' => Array(1 => 'icon16_article.gif', 2 => 'icon16_article_pending.gif', -2 => 'icon16_article_pending.gif', 0 => 'icon16_article_disabled.gif', 'HOT' => 'icon16_article_hot.gif', 'POP' => 'icon16_article_pop.gif', 'NEW' => 'icon16_article_new.gif', 'PICK' => 'icon16_article_pick.gif'),
'Fields' => Array(
'NewsId' => Array('title' => 'la_col_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter'),
'Title' => Array('title' => 'la_col_Title', 'data_block' => 'grid_catitem_td', 'filter_block' => 'grid_like_filter'),
// 'PrimaryCategory' => Array('title' => 'la_col_PrimaryCategory', 'data_block' => 'grid_category_td', 'filter_block' => 'grid_like_filter'),
'UserName' => Array('title' => 'la_col_Author', 'filter_block' => 'grid_like_filter'),
'LeadStory' => Array('title' => 'la_col_LeadStory', 'filter_block' => 'grid_options_filter'),
'LeadCatStory' => Array('title' => 'la_col_LeadCatStory', 'filter_block' => 'grid_options_filter'),
'StartDate' => Array('title' => 'la_col_StartDate', 'filter_block' => 'grid_date_range_filter'),
'EndOn' => Array('title' => 'la_col_EndOn', 'data_block' => 'article_expire_td', 'filter_block' => 'grid_date_range_filter'),
),
),
'Radio' => Array(
'Icons' => Array(1 => 'icon16_article.gif', 2 => 'icon16_article_pending.gif', -2 => 'icon16_article_pending.gif', 0 => 'icon16_article_disabled.gif', 'HOT' => 'icon16_article_hot.gif', 'POP' => 'icon16_article_pop.gif', 'NEW' => 'icon16_article_new.gif', 'PICK' => 'icon16_article_pick.gif'),
'Selector' => 'radio',
'Fields' => Array(
'NewsId' => Array('title' => 'la_col_Id', 'data_block' => 'grid_radio_td', 'filter_block' => 'grid_range_filter'),
'Title' => Array('title' => 'la_col_Title', 'data_block' => 'grid_catitem_td', 'filter_block' => 'grid_like_filter'),
'UserName' => Array('title' => 'la_col_Author', 'filter_block' => 'grid_like_filter'),
'LeadStory' => Array('title' => 'la_col_LeadStory', 'filter_block' => 'grid_options_filter'),
'LeadCatStory' => Array('title' => 'la_col_LeadCatStory', 'filter_block' => 'grid_options_filter'),
'StartDate' => Array('title' => 'la_col_StartDate', 'filter_block' => 'grid_date_range_filter'),
'EndOn' => Array('title' => 'la_col_EndOn', 'data_block' => 'article_expire_td', 'filter_block' => 'grid_date_range_filter'),
),
),
),
'ConfigMapping' => Array(
'PerPage' => 'Perpage_News',
'ShortListPerPage' => 'Perpage_News_Short',
'ForceEditorPick' => 'News_ShowPick',
'DefaultSorting1Field' => 'News_SortField',
'DefaultSorting2Field' => 'News_SortField2',
'DefaultSorting1Dir' => 'News_SortOrder',
'DefaultSorting2Dir' => 'News_SortOrder2',
'RatingDelayValue' => 'News_RatingDelay_Value',
'RatingDelayInterval' => 'News_RatingDelay_Interval',
),
);
?>
\ No newline at end of file
Property changes on: branches/RC/in-news/units/articles/articles_config.php
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: branches/RC/in-news/units/articles/articles_tag_processor.php
===================================================================
--- branches/RC/in-news/units/articles/articles_tag_processor.php (revision 11889)
+++ branches/RC/in-news/units/articles/articles_tag_processor.php (revision 11890)
@@ -1,21 +1,33 @@
<?php
+/**
+* @version $Id$
+* @package In-News
+* @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.net/license/ for copyright notices and details.
+*/
class ArticlesTagProcessor extends kCatDBTagProcessor {
function ListRelatedArticles($params)
{
return $this->PrintList2($params);
}
function ListArticles($params)
{
return $this->PrintList2($params);
}
function ArticleLink($params)
{
return $this->ItemLink($params, 'article');
}
}
?>
\ No newline at end of file
Property changes on: branches/RC/in-news/units/articles/articles_tag_processor.php
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: branches/RC/in-news/units/articles/articles_event_handler.php
===================================================================
--- branches/RC/in-news/units/articles/articles_event_handler.php (revision 11889)
+++ branches/RC/in-news/units/articles/articles_event_handler.php (revision 11890)
@@ -1,490 +1,502 @@
<?php
+/**
+* @version $Id$
+* @package In-News
+* @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.net/license/ for copyright notices and details.
+*/
class ArticlesEventHandler extends kCatDBEventHandler {
/**
* Filters out archived articles
*
* @param kEvent $event
*/
function SetCustomQuery(&$event)
{
parent::SetCustomQuery($event);
$object =& $event->getObject();
if (!$this->Application->IsAdmin()) {
$where_clause = '(Archived = 0) AND (StartDate < '.adodb_mktime().' OR StartDate = 0) AND (EndOn > '.adodb_mktime().' OR EndOn IS NULL)';
$object->addFilter('archived_filter', $where_clause);
}
}
/**
* Return type clauses for list bulding on front
*
* @param kEvent $event
* @return Array
*/
function getTypeClauses(&$event)
{
$type_clauses = parent::getTypeClauses($event);
$type_clauses['site_lead']['include']='%1$s.LeadStory = 1 AND '.TABLE_PREFIX.'CategoryItems.PrimaryCat = 1';
$type_clauses['site_lead']['except']='%1$s.LeadStory <> 1 AND '.TABLE_PREFIX.'CategoryItems.PrimaryCat = 1';
$type_clauses['site_lead']['having_filter'] = false;
$type_clauses['cat_lead']['include']='%1$s.LeadCatStory = 1 AND '.TABLE_PREFIX.'CategoryItems.PrimaryCat = 1';
$type_clauses['cat_lead']['except']='%1$s.LeadCatStory <> 1 AND '.TABLE_PREFIX.'CategoryItems.PrimaryCat = 1';
$type_clauses['cat_lead']['having_filter'] = false;
return $type_clauses;
}
/**
* [REGULAR EVENT] Deletes expired articles + update existing articles from rss feed with new data (key - article url)
*
* @param kEvent $event
*/
function OnUpdateRSSAtricles(&$event)
{
$category_table = $this->Application->getUnitOption('c', 'TableName');
$custom_table = $this->Application->getUnitOption('c-cdata', 'TableName');
$category_custom_fields = $this->getCustomColumns('c');
$article_custom_fields = $this->getCustomColumns($event->Prefix);
// update categories which sould be updated
$sql = 'SELECT cd.*, c.CategoryId
FROM '.$category_table.' c
LEFT JOIN '.$custom_table.' cd ON c.ResourceId = cd.ResourceId
WHERE (IF(cd.'.$category_custom_fields['RssLastUpdated'].' IS NULL, 0, cd.'.$category_custom_fields['RssLastUpdated'].') +
cd.'.$category_custom_fields['RssUpdateInterval'].' * cd.'.$category_custom_fields['RssUpdateIntervalType'].' <=
'.adodb_mktime().') AND (LENGTH('.$category_custom_fields['RssSource'].') > 0)';
$categories = $this->Conn->Query($sql, 'CategoryId');
if ($categories) {
$resource_ids = Array();
foreach ($categories as $category_id => $category_data) {
$resource_ids[] = $category_data['ResourceId'];
$event->setEventParam('source_url', $category_data[ $category_custom_fields['RssSource'] ]);
$event->setEventParam('category_id', $category_id);
$event->setEventParam('custom_fields', $article_custom_fields);
$event->setEventParam('life_time', $category_data[ $category_custom_fields['RssDefaultExpiration'] ] * $category_data[ $category_custom_fields['RssDefaultExpirationType'] ]);
$this->parseFeed($event);
}
$sql = 'UPDATE '.$custom_table.'
SET '.$category_custom_fields['RssLastUpdated'].' = '.adodb_mktime().'
WHERE ResourceId IN ('.implode(',', $resource_ids).')';
$this->Conn->Query($sql);
}
// delete expired articles from feed categories
$sql = 'SELECT c.CategoryId, c.ResourceId
FROM '.$category_table.' c
LEFT JOIN '.$custom_table.' cd ON c.ResourceId = cd.ResourceId
WHERE ( IF(cd.'.$category_custom_fields['RssLastExpired'].' IS NULL, 0, cd.'.$category_custom_fields['RssLastExpired'].') +
cd.'.$category_custom_fields['RssExpireInterval'].' * cd.'.$category_custom_fields['RssExpireIntervalType'].' <=
'.adodb_mktime().') AND (cd.'.$category_custom_fields['RssDeleteExpired'].' = 1)';
$categories = $this->Conn->GetCol($sql, 'ResourceId');
$id_field = $this->Application->getUnitOption($event->Prefix, 'IDField');
$table = $this->Application->getUnitOption($event->Prefix, 'TableName');
$ci_table = $this->Application->getUnitOption($event->Prefix.'-ci', 'TableName');
if ($categories) {
$article_custom_table = $this->Application->getUnitOption($event->Prefix.'-cdata', 'TableName');
$sql = 'SELECT main_table.'.$id_field.'
FROM '.$table.' main_table
LEFT JOIN '.$ci_table.' ci ON main_table.ResourceId = ci.ItemResourceId
LEFT JOIN '.$article_custom_table.' cd ON main_table.ResourceId = cd.ResourceId
WHERE (ci.PrimaryCat = 1) AND
(ci.CategoryId IN ('.implode(',', $categories).')) AND
(main_table.EndOn < '.adodb_mktime().' AND main_table.EndOn IS NOT NULL) AND
(LENGTH(cd.'.$article_custom_fields['RssOriginalURL'].') > 0)';
$article_ids = $this->Conn->GetCol($sql);
if ($article_ids) {
$temp =& $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler');
$temp->DeleteItems($event->Prefix, $event->Special, $article_ids);
}
$sql = 'UPDATE '.$custom_table.'
SET '.$category_custom_fields['RssLastExpired'].' = '.adodb_mktime().'
WHERE ResourceId IN ('.implode(',', array_keys($categories)).')';
$this->Conn->Query($sql);
}
}
/**
* Returns article ids & crc, that are created during feed import
*
* @param kEvent $event
* @return Array
*/
function getFeedArticles(&$event)
{
$id_field = $this->Application->getUnitOption($event->Prefix, 'IDField');
$table = $this->Application->getUnitOption($event->Prefix, 'TableName');
$custom_table = $this->Application->getUnitOption($event->Prefix.'-cdata', 'TableName');
$crc_field = $event->getEventParam('custom_fields', 'RssArticleCRC');
$sql = 'SELECT main_table.'.$id_field.', cd.'.$crc_field.'
FROM '.$table.' main_table
LEFT JOIN '.$custom_table.' cd ON cd.ResourceId = main_table.ResourceId
WHERE LENGTH(cd.'.$crc_field.') > 0';
return $this->Conn->GetCol($sql, $crc_field);
}
/**
* Creates new, updates existing articles from feed url specified
*
* @param kEvent $event
*/
function parseFeed(&$event)
{
$source_urls = explode(',', $event->getEventParam('source_url'));
if (count($source_urls) > 1) {
foreach ($source_urls as $source_url) {
$event->setEventParam('source_url', $source_url);
$this->parseFeed($event);
}
return true;
}
$curl_helper =& $this->Application->recallObject('CurlHelper');
/* @var $curl_helper kCurlHelper */
$curl_helper->followLocation = true;
$curl_helper->setOptions( Array (CURLOPT_USERAGENT => 'Wget/1.10.2') ); // otherwise FeedBurner will return HTML
$xml_data = $curl_helper->Send($event->getEventParam('source_url'));
if (!$xml_data) {
return false;
}
$xml_helper =& $this->Application->recallObject('kXMLHelper');
/* @var $xml_helper kXMLHelper */
$root_node =& $xml_helper->Parse($xml_data, XML_WITH_TEXT_NODES);
$feed_types = Array (
'rss_2.0' => 'channel', 'atom' => 'feed',
);
foreach ($feed_types as $feed_type => $node_name) {
$article_node =& $root_node->FindChild($node_name);
if (is_object($article_node)) {
break;
}
}
if (!$article_node) {
return false;
}
$category_id = $event->getEventParam('category_id');
$backup_category_id = $this->Application->GetVar('m_cat_id');
$this->Application->SetVar('m_cat_id', $category_id);
switch ($feed_type) {
case 'rss_2.0':
$this->parseRssFeed($article_node, $event);
break;
case 'atom':
$this->parseAtomFeed($article_node, $event);
break;
}
$this->Application->SetVar('m_cat_id', $backup_category_id);
}
/**
* Returns ML field names for article record
*
* @return Array
*/
function _getMLFields()
{
$ml_formatter =& $this->Application->recallObject('kMultiLanguage');
/* @var $ml_formatter kMultiLanguage */
$title_field = $ml_formatter->LangFieldName('Title');
$body_field = $ml_formatter->LangFieldName('Body');
return Array ('Title', 'Body');
return Array ($title_field, $body_field);
}
/**
* Parses RSS 2.0 feed
*
* @param kXMLNode $root_node
* @param kEvent $event
*/
function parseRssFeed(&$root_node, &$event)
{
$current_node = $root_node->firstChild;
$feed_articles = $this->getFeedArticles($event);
$object =& $this->Application->recallObject($event->Prefix.'.-item', null, Array('skip_autoload' => true));
/* @var $object kDBItem */
list ($title_field, $body_field) = $this->_getMLFields();
do {
// IMAGE is information about channel and is not useful here
if ($current_node->Name != 'ITEM') continue;
// collect item data
$data = Array();
$sub_node =& $current_node->firstChild;
/* @var $sub_node kXMLNode */
do {
if ($sub_node->Name == 'ATOM:SUMMARY') {
$data[$sub_node->Name] = $this->getNodeContent($sub_node);
} else {
if ($sub_node->Children) {
foreach ($sub_node->Children as $child_node) {
$data[$sub_node->Name].= $child_node->Data; // was $sub_node->Data;
}
}
}
} while ( ($sub_node =& $sub_node->NextSibling()) );
// create/update article
$article_crc = crc32($data['LINK'].$data['TITLE']);
$article_id = getArrayValue($feed_articles, $article_crc);
if ($article_id) {
$object->Load($article_id);
}
else {
$object->Clear();
}
$object->SetDBField($title_field, $data['TITLE']);
$object->SetDBField('cust_RssOriginalURL', $data['LINK']);
$object->SetDBField('cust_RssArticleCRC', $article_crc);
$object->SetDBField($body_field, !array_key_exists('DESCRIPTION', $data) ? $data['ATOM:SUMMARY'] : $data['DESCRIPTION']);
$expiration_time = adodb_mktime() + $event->getEventParam('life_time');
$object->SetDBField('EndOn_date', $expiration_time);
$object->SetDBField('EndOn_time', $expiration_time);
$object->SetDBField('Status', STATUS_ACTIVE);
$object->SetDBField('Author', 'root');
$object->SetDBField('CreatedById', -1);
$status = $object->isLoaded() ? $object->Update() : $object->Create();
} while (($current_node =& $current_node->NextSibling()));
}
/**
* Returns parsed node content
*
* @param kXMLNode $node
* @return string
*/
function getNodeContent(&$node)
{
$content_type = array_key_exists('TYPE', $node->Attributes) ? $node->Attributes['TYPE'] : false;
switch ($content_type) {
case 'xhtml':
$data = $node->GetXML(true);
break;
case 'html':
$data = unhtmlentities($node->firstChild->Data); // $node->Data
break;
default:
$data = $node->firstChild->Data; // $node->Data; also for 'text'
break;
}
return trim($data);
}
/**
* Parses ATOM feed
*
* @param kXMLNode $root_node
* @param kEvent $event
*/
function parseAtomFeed(&$root_node, &$event)
{
$current_node = $root_node->firstChild;
$feed_articles = $this->getFeedArticles($event);
$object =& $this->Application->recallObject($event->Prefix.'.-item', null, Array('skip_autoload' => true));
/* @var $object kDBItem */
list ($title_field, $body_field) = $this->_getMLFields();
do {
if ($current_node->Name != 'ENTRY') continue;
// collect item data
$data = Array();
$sub_node =& $current_node->firstChild;
/* @var $sub_node kXMLNode */
do {
if ($sub_node->Name == 'LINK') {
if ($sub_node->Attributes['REL'] == 'alternate') {
$data[$sub_node->Name] = $sub_node->Attributes['HREF'];
}
}
elseif ($sub_node->Name == 'CONTENT' || $sub_node->Name == 'SUMMARY' || $sub_node->Name == 'TITLE') {
$data[$sub_node->Name] = $this->getNodeContent($sub_node);
}
else {
$data[$sub_node->Name] = $sub_node->firstChild->Data; // $sub_node->Data
}
} while ( ($sub_node =& $sub_node->NextSibling()) );
// create/update article
$article_crc = crc32($data['LINK'].$data['TITLE']);
$article_id = getArrayValue($feed_articles, $article_crc);
if ($article_id) {
$object->Load($article_id);
}
else {
$object->Clear();
}
$object->SetDBField($title_field, $data['TITLE']);
$object->SetDBField('cust_RssOriginalURL', $data['LINK']);
$object->SetDBField('cust_RssArticleCRC', $article_crc);
$object->SetDBField($body_field, !array_key_exists('CONTENT', $data) ? $data['SUMMARY'] : $data['CONTENT']);
$expiration_time = adodb_mktime() + $event->getEventParam('life_time');
$object->SetDBField('EndOn_date', $expiration_time);
$object->SetDBField('EndOn_time', $expiration_time);
$object->SetDBField('Status', STATUS_ACTIVE);
$object->SetDBField('Author', 'root');
$object->SetDBField('CreatedById', -1);
$status = $object->isLoaded() ? $object->Update() : $object->Create();
} while (($current_node =& $current_node->NextSibling()));
}
function getCustomColumns($prefix)
{
$ml_formatter =& $this->Application->recallObject('kMultiLanguage');
$custom_fields = array_flip($this->Application->getUnitOption($prefix, 'CustomFields'));
foreach ($custom_fields as $custom_name => $custom_id) {
$custom_fields[$custom_name] = $ml_formatter->LangFieldName('cust_'.$custom_id);
}
return $custom_fields;
}
/**
* Create missing excerpt
*
* @param kEvent $event
*/
function OnBeforeItemUpdate(&$event)
{
parent::OnBeforeItemUpdate($event);
$this->createExcerpt($event);
$this->cacheItemOwner($event, 'CreatedById', 'Author');
}
/**
* Create missing excerpt
*
* @param kEvent $event
*/
function OnBeforeItemCreate(&$event)
{
parent::OnBeforeItemCreate($event);
$this->createExcerpt($event);
$this->cacheItemOwner($event, 'CreatedById', 'Author');
}
/**
* Create excerpt if missing
*
* @param kEvent $event
*/
function createExcerpt(&$event)
{
$object =& $event->getObject();
if (!$object->GetField('Excerpt') || $this->Application->GetVar('generate_excerpt')) {
$excerpt = strip_tags( $object->GetField('Body') );
$length = mb_strlen($excerpt);
if ($length > 100) {
$excerpt = mb_substr(strip_tags($excerpt), 0, 100);
if (mb_substr($excerpt,-1) != ' ') {
$pos = mb_strrpos($excerpt, ' ');
if ($pos) {
$excerpt = mb_substr($excerpt, 0, $pos);
}
}
$excerpt .= '...';
}
$ml_formatter =& $this->Application->recallObject('kMultiLanguage');
/* @var $ml_formatter kMultiLanguage */
$object->SetDBField($ml_formatter->LangFieldName('Excerpt'), $excerpt);
}
}
/**
* [HOOK] Updates category custom fields options in config
*
* @param kEvent $event
*/
function OnUpdateCategoryCustomFields(&$event)
{
$new_virtual_fields = Array(
'cust_RssSource' => Array('type' => 'string', 'default' => ''),
'cust_RssDefaultExpiration' => Array('type' => 'int', 'not_null' => 1, 'default' => ''),
'cust_RssDefaultExpirationType' => Array('type' => 'int', 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array(60 => 'la_opt_min', 3600 => 'la_opt_hour', 86400 => 'la_opt_day', 2419200 => 'la_opt_month', 29030400 => 'la_opt_year'), 'default' => 60),
'cust_RssExpireInterval' => Array('type' => 'int', 'not_null' => 1, 'default' => ''),
'cust_RssExpireIntervalType' => Array('type' => 'int', 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array(60 => 'la_opt_min', 3600 => 'la_opt_hour', 86400 => 'la_opt_day', 2419200 => 'la_opt_month'), 'default' => 60),
'cust_RssDeleteExpired' => Array('type' => 'int', 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array(1 => 'la_Yes', 0 => 'la_No'), 'default' => 0),
'cust_RssUpdateInterval' => Array('type' => 'int', 'not_null' => 1, 'default' => ''),
'cust_RssUpdateIntervalType' => Array('type' => 'int', 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array(60 => 'la_opt_min', 3600 => 'la_opt_hour', 86400 => 'la_opt_day', 2419200 => 'la_opt_month'), 'default' => 60),
'cust_RssLastUpdated' => Array('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => ''),
'cust_RssLastExpired' => Array('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => ''),
);
$virtual_fields = $this->Application->getUnitOption('c', 'VirtualFields');
$virtual_fields = array_merge_recursive2($virtual_fields, $new_virtual_fields);
$this->Application->setUnitOption('c', 'VirtualFields', $virtual_fields);
}
/**
* Sets default expiration based on module setting
*
* @param kEvent $event
*/
function OnPreCreate(&$event)
{
parent::OnPreCreate($event);
if ($event->status == erSUCCESS) {
$object =& $event->getObject();
$archive_days = $this->Application->ConfigValue('News_Archive');
if ($archive_days) {
$expire_date = adodb_mktime() + $archive_days * 3600 * 24;
$object->SetDBField('EndOn_date', $expire_date);
$object->SetDBField('EndOn_time', $expire_date);
}
}
}
}
?>
\ No newline at end of file
Property changes on: branches/RC/in-news/units/articles/articles_event_handler.php
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: branches/RC/in-news/install/upgrades.php
===================================================================
--- branches/RC/in-news/install/upgrades.php (revision 11889)
+++ branches/RC/in-news/install/upgrades.php (revision 11890)
@@ -1,70 +1,82 @@
<?php
+/**
+* @version $Id$
+* @package In-News
+* @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.net/license/ for copyright notices and details.
+*/
$upgrade_class = 'InNewsUpgrades';
/**
* Class, that holds all upgrade scripts for "Core" module
*
*/
class InNewsUpgrades extends kHelper {
/**
* Install toolkit instance
*
* @var kInstallToolkit
*/
var $_toolkit = null;
/**
* Sets common instance of installator toolkit
*
* @param kInstallToolkit $instance
*/
function setToolkit(&$instance)
{
$this->_toolkit =& $instance;
}
/**
* Changes table structure, where multilingual fields of TEXT type are present
*
* @param string $mode when called mode {before, after)
*/
function Upgrade_5_0_0($mode)
{
if ($mode == 'after') {
$root_category = $this->Application->findModule('Name', 'In-News', 'RootCat');
$sql = 'UPDATE ' . $this->Application->getUnitOption('c', 'TableName') . '
SET UseMenuIconUrl = 1, MenuIconUrl = "in-news/img/menu_articles.gif"
WHERE ' . $this->Application->getUnitOption('c', 'IDField') . ' = ' . $root_category;
$this->Conn->Query($sql);
$this->_updateDetailTemplate('n', 'innews/detail', 'in-news/designs/detail');
}
}
/**
* Replaces deprecated detail template design with new one
*
* @param string $prefix
* @param string $from_template
* @param string $to_template
*/
function _updateDetailTemplate($prefix, $from_template, $to_template)
{
$sql = 'SELECT CustomFieldId
FROM ' . TABLE_PREFIX . 'CustomField
WHERE FieldName = "' . $prefix . '_ItemTemplate"';
$custom_field_id = $this->Conn->GetOne($sql);
$ml_formatter =& $this->Application->recallObject('kMultiLanguage');
/* @var $ml_formatter kMultiLanguage */
$field = $ml_formatter->LangFieldName('cust_' . $custom_field_id, true);
$sql = 'UPDATE ' . TABLE_PREFIX . 'CategoryCustomData
SET ' . $field . ' = "' . $to_template . '"
WHERE ' . $field . ' = "' . $from_template . '"';
$this->Conn->Query($sql);
}
}
\ No newline at end of file
Property changes on: branches/RC/in-news/install/upgrades.php
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: branches/RC/in-news/install/prerequisites.php
===================================================================
--- branches/RC/in-news/install/prerequisites.php (revision 11889)
+++ branches/RC/in-news/install/prerequisites.php (revision 11890)
@@ -1,66 +1,78 @@
<?php
+/**
+* @version $Id$
+* @package In-News
+* @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.net/license/ for copyright notices and details.
+*/
$prerequisite_class = 'InNewsPrerequisites';
/**
* Class, that holds all prerequisite scripts for "In-News" module
*
*/
class InNewsPrerequisites extends kHelper {
/**
* Install toolkit instance
*
* @var kInstallToolkit
*/
var $_toolkit = null;
/**
* Sets common instance of installator toolkit
*
* @param kInstallToolkit $instance
*/
function setToolkit(&$instance)
{
$this->_toolkit =& $instance;
}
/**
* Checks minimal version, that could be upgradeable
*
* @param string $mode when called mode {install, standalone, upgrade)
*/
function CheckPrerequisites($versions, $mode)
{
$errors = Array ();
if ($mode == 'standalone') {
if (!$this->Application->isModuleEnabled('In-Portal')) {
$errors[] = 'Please install or enable "In-Portal" module first';
}
}
if ($mode == 'upgrade') {
$sql = 'SELECT Version
FROM ' . TABLE_PREFIX . 'Modules
WHERE Name = "In-Portal"';
$inportal_version = $this->Conn->GetOne($sql);
if ($inportal_version === false) {
// only, when In-Portal was installed
return $errors;
}
$min_version = '4.3.1';
$current_version = $this->_toolkit->ConvertModuleVersion($inportal_version);
$needed_version = $this->_toolkit->ConvertModuleVersion($min_version);
if ($current_version < $needed_version) {
$errors[] = 'Please upgrade "In-Portal" to version ' . $min_version;
}
}
return $errors;
}
}
?>
\ No newline at end of file
Property changes on: branches/RC/in-news/install/prerequisites.php
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: branches/RC/in-news/install.php
===================================================================
--- branches/RC/in-news/install.php (revision 11889)
+++ branches/RC/in-news/install.php (revision 11890)
@@ -1,37 +1,49 @@
<?php
+/**
+* @version $Id$
+* @package In-News
+* @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.net/license/ for copyright notices and details.
+*/
$module_folder = 'in-news';
if (!defined('IS_INSTALL')) {
// separate module install
define('IS_INSTALL', 1);
define('ADMIN', 1);
define('REL_PATH', $module_folder);
define('FULL_PATH', realpath(dirname(__FILE__) . '/..') );
include_once(FULL_PATH . '/core/kernel/startup.php');
require_once FULL_PATH . '/core/install/install_toolkit.php';
$toolkit = new kInstallToolkit();
}
else {
// install, using installation wizard
$toolkit =& $this->toolkit;
/* @var $toolkit kInstallToolkit */
}
$application =& kApplication::Instance();
$application->Init();
$category =& $toolkit->createModuleCategory('News', 'News Articles', '/in-news/designs/section');
$toolkit->RunSQL('/' . $module_folder . '/install/install_schema.sql');
$toolkit->RunSQL('/' . $module_folder . '/install/install_data.sql', '{NewsCatId}', $category->GetID());
$toolkit->ImportLanguage('/' . $module_folder . '/install/english');
$toolkit->SetModuleRootCategory($module_folder, $category->GetID());
$toolkit->linkCustomFields($module_folder, 'n', 2); // to create Custom Fields for News
$toolkit->linkCustomFields('KERNEL', 'c', 1); // to create ItemTemplate custom field
$toolkit->setModuleItemTemplate($category, 'n', 'in-news/designs/detail');
$toolkit->finalizeModuleInstall($module_folder, true);
\ No newline at end of file
Property changes on: branches/RC/in-news/install.php
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Event Timeline
Log In to Comment