Page MenuHomeIn-Portal Phabricator

in-portal
No OneTemporary

File Metadata

Created
Tue, Nov 11, 9:22 AM

in-portal

Index: branches/unlabeled/unlabeled-1.5.2/kernel/units/relationship/relationship_config.php
===================================================================
--- branches/unlabeled/unlabeled-1.5.2/kernel/units/relationship/relationship_config.php (nonexistent)
+++ branches/unlabeled/unlabeled-1.5.2/kernel/units/relationship/relationship_config.php (revision 6134)
@@ -0,0 +1,107 @@
+<?php
+
+$config = Array(
+ 'Prefix' => 'rel',
+
+ 'Clones' => Array(
+ 'c-rel' => Array('ParentPrefix' => 'c'),
+ 'l-rel' => Array('ParentPrefix' => 'l'),
+ 'n-rel' => Array('ParentPrefix' => 'n'),
+ 'bb-rel'=> Array('ParentPrefix' => 'bb'),
+ /*'p-rel' => Array('ParentPrefix' => 'p'),*/
+ 'cms-rel'=> Array('ParentPrefix' => 'cms'),
+ ),
+
+ 'ItemClass' => Array('class'=>'kDBItem','file'=>'','build_event'=>'OnItemBuild'),
+ 'ListClass' => Array('class'=>'kDBList','file'=>'','build_event'=>'OnListBuild'),
+ 'EventHandlerClass' => Array('class'=>'RelationshipEventHandler','file'=>'relationship_event_handler.php','build_event'=>'OnBuild'),
+ 'TagProcessorClass' => Array('class'=>'kDBTagProcessor','file'=>'','build_event'=>'OnBuild'),
+ 'AutoLoad' => true,
+ 'Hooks' => Array(
+ Array(
+ 'Mode' => hAFTER,
+ 'Conditional' => false,
+ 'HookToPrefix' => '#PARENT#',
+ 'HookToSpecial' => '*',
+ 'HookToEvent' => Array('OnAfterItemDelete'),
+ 'DoPrefix' => '',
+ 'DoSpecial' => '',
+ 'DoEvent' => 'OnDeleteForeignRelations',
+ ),
+ ),
+ 'QueryString' => Array(
+ 1 => 'id',
+ 2 => 'page',
+ 3 => 'event',
+ ),
+ 'IDField' => 'RelationshipId',
+ 'StatusField' => Array('Enabled','Type'),
+ 'TableName' => TABLE_PREFIX.'Relationship',
+ 'ParentTableKey'=> 'ResourceId',
+ 'ForeignKey' => 'SourceId',
+ 'ParentPrefix' => 'p',
+ 'AutoDelete' => true,
+ 'AutoClone' => true,
+
+ 'FilterMenu' => Array(
+ 'Groups' => Array(
+ Array('mode' => 'AND', 'filters' => Array('show_active','show_disabled'), 'type' => WHERE_FILTER),
+ Array('mode' => 'AND', 'filters' => Array('show_recip','show_oneway'), 'type' => WHERE_FILTER),
+ ),
+ 'Filters' => Array(
+ 'show_active' => Array('label' =>'la_Active', 'on_sql' => '', 'off_sql' => 'Enabled != 1' ),
+ 'show_disabled' => Array('label' => 'la_Disabled', 'on_sql' => '', 'off_sql' => 'Enabled != 0' ),
+ 's1' => Array(),
+ 'show_recip' => Array('label' => 'la_Reciprocal', 'on_sql' => '', 'off_sql' => '%1$s.Type != 1' ),
+ 'show_oneway' => Array('label' => 'la_OneWay', 'on_sql' => '', 'off_sql' => '%1$s.Type != 2' ),
+ )
+ ),
+
+ 'CalculatedFields' => Array(
+ '' => Array(
+ 'ItemName' => 'TRIM(CONCAT(#ITEM_NAMES#))',
+ 'ItemType' => '#ITEM_TYPES#',
+ ),
+ ),
+
+ 'ListSQLs' => Array( ''=> 'SELECT %1$s.RelationshipId, %1$s.Priority, %1$s.Type, %1$s.Enabled %2$s
+ FROM %1$s #ITEM_JOIN#',
+ ), // key - special, value - list select sql
+
+ 'ListSortings' => Array(
+ '' => Array(
+ 'ForcedSorting' => Array('Priority' => 'desc'),
+ 'Sorting' => Array('ItemName' => 'asc', 'ItemType' => 'asc'),
+ )
+ ),
+ 'ItemSQLs' => Array( '' => 'SELECT %1$s.* %2$s FROM %1$s #ITEM_JOIN#',),
+
+ 'Fields' => Array(
+ 'RelationshipId' => Array(),
+ 'SourceId' => Array('type'=>'int', 'required' => 1, 'default' => 0),
+ 'TargetId' => Array('type'=>'int', 'required' => 1, 'default' => ''),
+ 'SourceType' => Array('type'=>'int','not_null'=>1,'default'=>0),
+ 'TargetType' => Array('type'=>'int','not_null'=>1,'default'=>0),
+ 'Type' => Array('type'=>'int','formatter'=>'kOptionsFormatter', 'required' => 1, 'options'=>Array(1=>'la_Reciprocal',0=>'la_OneWay'),'not_null'=>1,'default'=>0,'use_phrases'=>1),
+ 'Enabled' => Array('type'=>'int','formatter'=>'kOptionsFormatter','options'=>Array(0=>'la_Disabled',1=>'la_Enabled'),'not_null'=>1,'default'=>1,'use_phrases'=>1),
+ 'Priority' => Array('type'=>'int','not_null'=>1,'default'=>0),
+ ),
+ 'VirtualFields' => Array( 'ItemName' => Array(),
+ 'ItemType' => Array(),
+ ),
+
+ 'Grids' => Array(
+ 'Default' => Array(
+ 'Icons' => Array('default'=>'icon16_custom.gif','1_0'=>'icon16_relation_one-way.gif','0_0'=>'icon16_relation_one-way_disabled.gif','1_1'=>'icon16_relation_reciprocal.gif','0_1'=>'icon16_relation_reciprocal_disabled.gif'), // icons for each StatusField values, if no matches or no statusfield selected, then "default" icon is used
+ 'Fields' => Array(
+ 'ItemName' => Array( 'title'=>'la_col_TargetId', 'data_block' => 'grid_checkbox_td'),
+ 'ItemType' => Array( 'title'=>'la_col_TargetType' ),
+ 'Type' => Array( 'title'=>'la_col_RelationshipType' ),
+ 'Enabled' => Array( 'title'=>'la_col_Status' ),
+ ),
+
+ ),
+ ),
+ );
+
+?>
\ No newline at end of file
Property changes on: branches/unlabeled/unlabeled-1.5.2/kernel/units/relationship/relationship_config.php
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.5
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: branches/unlabeled/unlabeled-1.5.2/kernel/units/reviews/reviews_tag_processor.php
===================================================================
--- branches/unlabeled/unlabeled-1.5.2/kernel/units/reviews/reviews_tag_processor.php (nonexistent)
+++ branches/unlabeled/unlabeled-1.5.2/kernel/units/reviews/reviews_tag_processor.php (revision 6134)
@@ -0,0 +1,95 @@
+<?php
+
+class ReviewsTagProcessor extends kDBTagProcessor
+{
+ /**
+ * Returns a link for editing product
+ *
+ * @param Array $params
+ * @return string
+ */
+ function ItemEditLink($params)
+ {
+ $item_prefix = $params['item_prefix'];
+ $id_field = $this->Application->getUnitOption($item_prefix,'IDField');
+
+ $object =& $this->Application->recallObject($this->getPrefixSpecial(),$this->Prefix, $params);
+ $item_id = $object->GetDBField($id_field);
+
+ return $this->Application->HREF($params['edit_template'],'', Array(
+ 'm_opener' => 'd',
+ $item_prefix.'_mode' => 't',
+ $item_prefix.'_event' => 'OnEdit',
+ $item_prefix.'_id' => $item_id,
+ 'pass' => 'all,'.$item_prefix
+ ), 'index.php');
+ }
+
+ /**
+ * Get's reuested field value
+ *
+ * @param Array $params
+ * @return string
+ * @access public
+ */
+ function Field($params)
+ {
+ $field = $this->SelectParam($params, 'name,field');
+ $object =& $this->Application->recallObject($this->getPrefixSpecial(),$this->Prefix, $params);
+
+ if ($field == 'ReviewText') {
+ if ($object->GetDBField('TextFormat') == 1) {
+ $params['no_special'] = 'no_special';
+ }
+ else {
+ unset($params['no_special']);
+ }
+ }
+
+ return parent::Field($params);
+
+ }
+
+ function AlreadyReviewed($params)
+ {
+ $user_id = ($this->Application->GetVar('u_id') == 0) ? -2 : $this->Application->GetVar('u_id');
+ $object =& $this->getObject( Array('skip_autoload' => true) );
+ $product_info = $object->getLinkedInfo();
+
+ $sql = ' SELECT * FROM '.TABLE_PREFIX.'SpamControl
+ WHERE ItemResourceId='.$product_info['ParentId'].'
+ AND IPaddress="'.$_SERVER['REMOTE_ADDR'].'"
+ AND PortalUserId='.$user_id.'
+ AND DataType="Review"';
+ $res = $this->Conn->GetRow($sql);
+ if($res['Expire'] > adodb_mktime())
+ {
+ $ret = 1;
+ }
+ else
+ {
+ $sql = 'DELETE FROM '.TABLE_PREFIX.'SpamControl
+ WHERE ItemResourceId='.$product_info['ParentId'].'
+ AND IPaddress="'.$_SERVER['REMOTE_ADDR'].'"
+ AND PortalUserId='.$user_id.'
+ AND DataType="Review"';
+ $this->Conn->Query($sql);
+ $ret = 0;
+ }
+ return $ret;
+ }
+
+ function HasError($params)
+ {
+ $object =& $this->Application->recallObject($this->getPrefixSpecial(), $this->Prefix, $params);
+ if (method_exists($object, 'GetErrorMsg')) {
+ return parent::HasError($params);
+ }
+ else {
+ return 0;
+ }
+ }
+}
+
+
+?>
\ No newline at end of file
Property changes on: branches/unlabeled/unlabeled-1.5.2/kernel/units/reviews/reviews_tag_processor.php
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.5
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: branches/unlabeled/unlabeled-1.5.2/kernel/units/general/helpers/mod_rewrite_helper.php
===================================================================
--- branches/unlabeled/unlabeled-1.5.2/kernel/units/general/helpers/mod_rewrite_helper.php (nonexistent)
+++ branches/unlabeled/unlabeled-1.5.2/kernel/units/general/helpers/mod_rewrite_helper.php (revision 6134)
@@ -0,0 +1,466 @@
+<?php
+
+ class kModRewriteHelper extends kHelper {
+
+ function kModRewriteHelper()
+ {
+ parent::kHelper();
+ $this->HTTPQuery =& $this->Application->recallObject('HTTPQuery');
+ }
+
+ function SetDefaultValues(&$vars)
+ {
+ $defaults = Array('m_cat_id' => 0, 'm_cat_page' => 1, 'm_opener' => 's');
+ foreach ($defaults as $default_key => $default_value)
+ {
+ if ($this->HTTPQuery->Get($default_key) == null) {
+ $vars[$default_key] = $default_value;
+ }
+ }
+ }
+
+ function ProcessLanguage(&$url_parts, &$vars)
+ {
+ if (!isset($url_parts[0])) return false;
+ $res = false;
+ $url_part = array_shift($url_parts);
+
+ $sql = 'SELECT LanguageId FROM '.TABLE_PREFIX.'Language WHERE LOWER(PackName) = '.$this->Conn->qstr($url_part).' AND Enabled = 1';
+ $language_id = $this->Conn->GetOne($sql);
+ $this->Application->Phrases = new PhrasesCache();
+ if($language_id)
+ {
+ $vars['m_lang'] = $language_id;
+ $res = true;
+ }
+
+ $this->Application->VerifyLanguageId();
+ if (!$res) {
+ array_unshift($url_parts, $url_part);
+ }
+ return $res;
+ }
+
+ function ProcessTheme(&$url_parts, &$vars)
+ {
+ if (!isset($url_parts[0])) return false;
+ $res = false;
+ $url_part = array_shift($url_parts);
+
+ $sql = 'SELECT ThemeId FROM '.TABLE_PREFIX.'Theme WHERE LOWER(Name) = '.$this->Conn->qstr($url_part).' AND Enabled = 1';
+ $theme_id = $this->Conn->GetOne($sql);
+ if($theme_id)
+ {
+ $vars['m_theme'] = $theme_id;
+ $res = true;
+ }
+ $this->Application->VerifyThemeId(); // verify anyway - will set default if not found!!!
+ if (!$res) {
+ array_unshift($url_parts, $url_part);
+ }
+ return $res;
+ }
+
+ function ProcessCategory(&$url_parts, &$vars)
+ {
+ if (!isset($url_parts[0])) return false;
+ $res = false;
+ $url_part = array_shift($url_parts);
+
+ $category_id = 0;
+ $last_category_id = 0;
+ $category_path = '';
+ do
+ {
+ $category_path = trim($category_path.'/'.$url_part, '/');
+
+ if( preg_match('/(.*)_([\d]+)$/', $category_path, $rets) )
+ {
+ $category_path = $rets[1];
+ $vars['m_cat_page'] = $rets[2];
+ }
+
+ $category_id = $this->Conn->GetOne(
+ 'SELECT CategoryId
+ FROM '.TABLE_PREFIX.'Category
+ WHERE Status = 1 AND NamedParentPath = '.$this->Conn->qstr($category_path));
+ if ($category_id !== false) {
+ $last_category_id = $category_id;
+ $url_part = array_shift($url_parts);
+ $res = true;
+ }
+ } while ($category_id !== false && $url_part);
+ $vars['m_cat_id'] = $last_category_id;
+
+ if ($url_part) {
+ array_unshift($url_parts, $url_part);
+ }
+ return $res;
+ }
+
+ function ProcessModuleIndex(&$url_parts, &$vars)
+ {
+ if ( count($url_parts) > 1) return false; // if no more parts or only 1 part left
+ if ( $url_parts && $url_parts[0] == 'index') { // treat index same as no parts
+ array_shift($url_parts);
+ }
+
+ if( $url_parts ) { // if parts are left, it can only be module page
+ if (!is_numeric($url_parts[0])) return false;
+
+ // set module pages for all modules, since we don't know which module will need it
+ foreach ($this->Application->ModuleInfo as $module_name => $module_data)
+ {
+ $vars[ $module_data['Var'].'_id'] = 0;
+ $vars[ $module_data['Var'].'_Page'] = $url_parts[0];
+ $vars[ $module_data['Var'].'_Reviews_Page'] = 0;
+ }
+ }
+
+ // try to find CMS index page of the category
+ if ($this->Application->isModuleEnabled('In-CMS')) {
+ $sql = 'SELECT p.Path, ci.CategoryId FROM '.TABLE_PREFIX.'Pages AS p
+ LEFT JOIN '.TABLE_PREFIX.'CategoryItems AS ci
+ ON ci.ItemResourceId = p.ResourceId
+ WHERE
+ p.IsIndex = 1
+ AND
+ p.Status = 1
+ AND
+ CategoryId = '.$vars['m_cat_id'].'
+ AND
+ ci.PrimaryCat = 1';
+ $template_found = $this->Conn->GetRow($sql);
+ if ($template_found !== false) {
+ $vars['t'] = $template_found['Path'];
+ return true;
+ }
+ }
+
+ $sql = 'SELECT CachedCategoryTemplate
+ FROM '.TABLE_PREFIX.'Category
+ WHERE CategoryId = '.$vars['m_cat_id'];
+ $vars['t'] = $this->Conn->GetOne($sql);
+ if (!$vars['t']) $vars['t'] = 'index';
+ return true;
+ }
+
+ function ProcessModuleItem(&$url_parts, &$vars, $set_t=true)
+ {
+ if (preg_match('/^bb_.*/', $url_parts[0])) {
+ $cat_item = $this->Conn->GetRow('
+ SELECT c.ParentPath, c.CategoryId FROM '.TABLE_PREFIX.'Category AS c
+ WHERE
+ c.CategoryId = '.$vars['m_cat_id']);
+
+ if ($set_t) {
+ $item_template = $this->GetItemTemplate($cat_item, 'bb');
+ $vars['t'] = $item_template;
+ }
+
+ $this->Application->HandleEvent($bb_event, 'bb:ParseEnv', Array('url_parts' => $url_parts, 'vars' => $vars));
+ $vars = $bb_event->getEventParam('vars');
+ return 'bb';
+ }
+
+ if (!isset($url_parts[0])) return false;
+ if ( count($url_parts) != 1 ) return false;
+ $url_part = array_shift($url_parts);
+
+ // match module reviews page
+ $page = 1;
+ if( preg_match('/(.*)_([\d]+)$/', $url_part, $rets) )
+ {
+ $url_part = $rets[1];
+ $page = $rets[2];
+ }
+
+ // locating the item in CategoryItems by filename to detect its ItemPrefix and its category ParentPath
+ $cat_item = $this->Conn->GetRow('
+ SELECT ci.ItemResourceId, ci.ItemPrefix, c.ParentPath, ci.CategoryId FROM '.TABLE_PREFIX.'CategoryItems AS ci
+ LEFT JOIN '.TABLE_PREFIX.'Category AS c
+ ON c.CategoryId = ci.CategoryId
+ WHERE
+ ci.CategoryId = '.$vars['m_cat_id'].'
+ AND
+ ci.Filename = '.$this->Conn->qstr($url_part));
+
+ if ($cat_item !== false) { // item found
+ $module_prefix = $cat_item['ItemPrefix'];
+ $item_template = $this->GetItemTemplate($cat_item, $module_prefix);
+
+ // converting ResourceId to correpsonding Item id
+ $module_config = $this->Application->getUnitOptions($module_prefix);
+ $item_id = $this->Conn->GetOne(
+ 'SELECT '.$module_config['IDField'].' FROM '.$module_config['TableName'].'
+ WHERE ResourceId = '.$cat_item['ItemResourceId']
+ );
+
+ if ((!$set_t || $item_template) && $item_id) {
+ if ($set_t) {
+ $vars['t'] = $item_template;
+ }
+ $vars[ $module_prefix.'_id' ] = $item_id;
+ $vars[ $module_prefix.'_Reviews_Page' ] = $page;
+ return $module_prefix;
+ }
+ }
+ array_unshift($url_parts, $url_part);
+ return false;
+ }
+
+ function GetItemTemplate($category, $module_prefix)
+ {
+ if (!is_array($category)) {
+ $category = $this->Conn->GetRow('
+ SELECT c.ParentPath, c.CategoryId FROM '.TABLE_PREFIX.'Category AS c
+ WHERE
+ c.CategoryId = '.$category);
+ }
+ $parent_path = implode(',',explode('|', substr($category['ParentPath'], 1, -1)));
+
+ // item template is stored in module' system custom field - need to get that field Id
+ $item_template_field_id = $this->Conn->GetOne(
+ 'SELECT CustomFieldId
+ FROM '.TABLE_PREFIX.'CustomField
+ WHERE FieldName = '.$this->Conn->qstr($module_prefix.'_ItemTemplate'));
+
+ // looking for item template through cats hierarchy sorted by parent path
+ $query = 'SELECT ccd.l1_cust_'.$item_template_field_id.',
+ FIND_IN_SET(c.CategoryId, '.$this->Conn->qstr($parent_path).') AS Ord1,
+ c.CategoryId, c.Name, ccd.l1_cust_'.$item_template_field_id.'
+ FROM '.TABLE_PREFIX.'Category AS c
+ LEFT JOIN '.TABLE_PREFIX.'CategoryCustomData AS ccd
+ ON ccd.ResourceId = c.ResourceId
+ WHERE c.CategoryId IN ('.$parent_path.') AND ccd.l1_cust_'.$item_template_field_id.' != \'\'
+ ORDER BY FIND_IN_SET(c.CategoryId, '.$this->Conn->qstr($parent_path).') DESC';
+ $item_template = $this->Conn->GetOne($query);
+ return $item_template;
+ }
+
+ function ProcessPhisycalTemplate(&$url_parts, &$vars)
+ {
+ if (!isset($url_parts[0])) return false;
+
+ $remaining = array();
+ do
+ {
+ $template_path = implode('/', $url_parts);
+
+ $t_parts['path'] = dirname($template_path) == '.' ? '' : '/'.dirname($template_path);
+ $t_parts['file'] = basename($template_path);
+
+ $sql = 'SELECT FileId
+ FROM '.TABLE_PREFIX.'ThemeFiles
+ WHERE (FilePath = '.$this->Conn->qstr($t_parts['path']).') AND (FileName = '.$this->Conn->qstr($t_parts['file'].'.tpl').')';
+
+// $sql = 'SELECT FileId FROM '.TABLE_PREFIX.'ThemeFiles WHERE CONCAT(FilePath, "/", FileName) = '.$this->Conn->qstr('/'.$template_path.'.tpl');
+ $template_found = $this->Conn->GetOne($sql);
+ if(!$template_found)
+ {
+ array_unshift($remaining, array_pop($url_parts));
+ }
+ } while (!$template_found && $url_parts);
+
+ $url_parts = $remaining;
+
+ if ($template_found) {
+ $vars['t'] = $template_path;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Checks if whole url_parts matches a whole In-CMS page
+ *
+ * @param array $url_parts
+ * @return boolean
+ */
+ function ProcessVirtualTemplate(&$url_parts, &$vars)
+ {
+ if (!isset($url_parts[0]) || !$this->Application->isModuleEnabled('In-CMS')) return false;
+
+ $template_path = implode('/', $url_parts);
+ $sql = 'SELECT p.PageId, ci.CategoryId FROM '.TABLE_PREFIX.'Pages AS p
+ LEFT JOIN '.TABLE_PREFIX.'CategoryItems AS ci
+ ON ci.ItemResourceId = p.ResourceId
+ WHERE
+ Path = '.$this->Conn->qstr($template_path).'
+ AND
+ ci.PrimaryCat = 1
+ AND
+ p.Status = 1';
+ $template_found = $this->Conn->GetRow($sql);
+
+ if ($template_found) {
+ $vars['m_cat_id'] = $template_found['CategoryId'];
+ $vars['t'] = $template_path;
+ return true;
+ }
+
+ return false;
+ }
+
+ function processRewriteURL()
+ {
+ $passed = array();
+ $url = $this->HTTPQuery->Get('_mod_rw_url_');
+ if( substr($url, -5) == '.html' ) $url = substr($url, 0, strlen($url) - 5 );
+
+ $restored = false;
+ $cache = $this->Conn->GetRow('SELECT Data, Cached FROM '.TABLE_PREFIX.'Cache WHERE VarName = "mod_rw_'.md5($url).'"');
+ if (false && $cache && $cache['Cached'] > 0) {
+ $cache = unserialize($cache['Data']);
+ $vars = $cache['vars'];
+ $passed = $cache['passed'];
+ $restored = true;
+ }
+ else {
+ $passed = array();
+ $vars = $this->parseRewriteURL($url,$passed);
+ $cache = array('vars'=>$vars,'passed'=>$passed);
+ $this->Conn->Query('REPLACE '.TABLE_PREFIX.'Cache (VarName, Data, Cached) VALUES ("mod_rw_'.md5($url).'", '.$this->Conn->qstr(serialize($cache)).', '.adodb_mktime().')');
+ }
+ foreach ($vars as $name => $value)
+ {
+ $this->HTTPQuery->Set($name,$value);
+ }
+ if ($restored) {
+ $this->InitAll();
+ }
+ $this->HTTPQuery->finalizeParsing($passed);
+ }
+
+ function InitAll()
+ {
+ $this->Application->Phrases = new PhrasesCache();
+ $this->Application->VerifyLanguageId();
+ $this->Application->Phrases->Init('phrases');
+ $this->Application->VerifyThemeId();
+ }
+
+ function parseRewriteURL($url, &$passed)
+ {
+ $vars = $this->Conn->GetRow('SELECT Data, Cached FROM '.TABLE_PREFIX.'Cache WHERE VarName = "mod_rw_'.md5($url).'"');
+ if (false && $vars && $vars['Cached'] > 0) {
+ $vars = unserialize($menu['Data']);
+ return $vars;
+ }
+
+ $vars = array();
+ $url_parts = $url ? explode('/', $url) : Array();
+
+ $process_module = true;
+ if($this->HTTPQuery->Get('rewrite') == 'on' || !$url_parts)
+ {
+ $this->SetDefaultValues($vars);
+ }
+
+ if(!$url_parts)
+ {
+ $this->InitAll();
+
+ $vars['t'] = $this->HTTPQuery->getDefaultTemplate('');
+ $passed[] = 'm';
+ return $vars;
+ }
+ else
+ {
+ $vars['t'] = '';
+ }
+
+ $passed = Array('m');
+ $this->ProcessLanguage($url_parts, $vars);
+ $this->ProcessTheme($url_parts, $vars);
+
+ if ( $this->ProcessVirtualTemplate($url_parts, $vars) ) {
+ return $vars;
+ }
+
+ $this->ProcessCategory($url_parts, $vars);
+
+
+
+ if ( $this->ProcessModuleIndex($url_parts, $vars) ) {
+ foreach ($this->Application->ModuleInfo as $module_name => $info) {
+ $passed[] = $info['Var'];
+ }
+ return $vars;
+ }
+ if ( $module_prefix = $this->ProcessModuleItem($url_parts, $vars) ) {
+ $passed[] = $module_prefix;
+ return $vars;
+ }
+
+ /*// match module
+ $next_template = $this->HTTPQuery->Get('next_template');
+ if($url_part || $next_template)
+ {
+ if($next_template)
+ {
+ $next_template_parts = explode('/', $next_template);
+ $module_folder = array_shift($next_template_parts);
+ }
+ else
+ {
+ $module_folder = $url_part;
+ }
+
+ foreach ($this->Application->ModuleInfo as $module_name => $module_data)
+ {
+ if( trim($module_data['TemplatePath'], '/') == $module_folder )
+ {
+ $module_prefix = $module_data['Var'];
+ break;
+ }
+ }
+ }*/
+
+ if ( $this->ProcessPhisycalTemplate($url_parts, $vars) ) {
+ if (!$url_parts) {
+ return $vars;
+ }
+ }
+
+ if ( $module_prefix = $this->ProcessModuleItem($url_parts, $vars, false) ) {
+ $passed[] = $module_prefix;
+ return $vars;
+ }
+
+ $not_found = $this->Application->ConfigValue('ErrorTemplate');
+ $vars['t'] = $not_found ? $not_found : 'error_notfound';
+
+ header('HTTP/1.0 404 Not Found');
+
+ return $vars;
+
+// $this->HTTPQuery->finalizeParsing($passed, $module_params);
+
+ // pass params left to module
+
+ /*$this->Application->Phrases->Init('phrases');
+ $passed = Array('m');
+ $module_params = Array();
+ if ( isset($module_prefix) ) {
+ $passed[] = $module_prefix;
+ $module_event = new kEvent($module_prefix.':ParseEnv', Array('url_parts' => $url_parts) );
+ if ($process_module) {
+ $this->Application->HandleEvent($module_event);
+ }
+ $item_id = $this->HTTPQuery->Get($module_prefix.'_id');
+ $module_params = Array($module_prefix.'_id' => $item_id ? $item_id : '0' );
+
+ if ($module_event->status == erFAIL) {
+ $not_found = $this->Application->ConfigValue('ErrorTemplate');
+ $this->HTTPQuery->Set('t', $not_found ? $not_found : 'error_notfound' );
+ }
+ }
+
+ $this->HTTPQuery->finalizeParsing($passed, $module_params);*/
+ }
+
+
+ }
+
+?>
\ No newline at end of file
Property changes on: branches/unlabeled/unlabeled-1.5.2/kernel/units/general/helpers/mod_rewrite_helper.php
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.5
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: branches/unlabeled/unlabeled-1.5.2/kernel/admin_templates/config/config_general.tpl
===================================================================
--- branches/unlabeled/unlabeled-1.5.2/kernel/admin_templates/config/config_general.tpl (nonexistent)
+++ branches/unlabeled/unlabeled-1.5.2/kernel/admin_templates/config/config_general.tpl (revision 6134)
@@ -0,0 +1,125 @@
+<inp2:m_RequireLogin perm_event="conf:OnLoad" system="1"/>
+<inp2:m_include t="incs/header" nobody="yes"/>
+
+<body topmargin="0" leftmargin="8" marginheight="0" marginwidth="8" bgcolor="#FFFFFF">
+
+<inp2:m_ParseBlock name="section_header" prefix="conf" icon="icon46_settings_general" title="!la_tab_ConfigGeneral!"/>
+
+<inp2:m_ParseBlock name="blue_bar" prefix="conf" title_preset="config_list_general" icon="icon46_settings_general"/>
+
+
+<!-- ToolBar --->
+<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
+<tbody>
+ <tr>
+ <td>
+ <script type="text/javascript">
+
+ function ValidatePassFld(fieldId){
+ var passFld=document.getElementById(fieldId);
+ var passVerifyFld=document.getElementById('verify_'+fieldId);
+ if (passFld && passVerifyFld && passFld.value == passVerifyFld.value) {
+ return true;
+ }
+ else {
+ var passErrorCell=document.getElementById('error_'+fieldId);
+ if (passErrorCell){
+ passErrorCell.innerHTML='<inp2:m_phrase name="la_error_PasswordMatch" />';
+ }
+ return false;
+ }
+ }
+
+ function ValidatePassFields(){
+ var el=false;
+ var validated=true;
+ for (var i=0; i<document.forms.kernel_form.elements.length; i++){
+ el=document.forms.kernel_form.elements[i];
+ if (el.getAttribute('primarytype')=='password'){
+ if (!ValidatePassFld(el.id)){
+ validated=false;
+ }
+ }
+ }
+ return validated;
+ }
+
+ function toggle_section($label) {
+ var $table = document.getElementById('config_table');
+ var $row = null;
+ var $is_visible = false;
+
+ for (var $i = 0; $i < $table.rows.length; $i++) {
+ $row = $table.rows[$i];
+ if ($row.getAttribute('header_label') != $label) {
+ continue;
+ }
+
+ if (!$row.style.display) {
+ $row.style.display = document.all ? 'block' : 'table-row';
+ }
+
+ $is_visible = !($row.style.display == 'none');
+ $row.style.display = $is_visible ? 'none' : (document.all ? 'block' : 'table-row');
+
+ document.getElementById('toggle_mark['+$label+']').innerHTML = '[' + ($is_visible ? '+' : '-') + ']';
+ }
+ }
+
+ var a_toolbar = new ToolBar();
+ a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
+ if (ValidatePassFields()){
+ submit_event('conf','<inp2:conf_SaveEvent/>');
+ }
+ }
+ ) );
+ a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
+ submit_event('conf','OnCancel');
+ }
+ ) );
+
+ a_toolbar.Render();
+ </script>
+ </td>
+ </tr>
+</tbody>
+</table>
+
+<inp2:m_include t="incs/config_blocks"/>
+
+<inp2:conf_SaveWarning name="grid_save_warning"/>
+<table width="100%" border="0" cellspacing="0" cellpadding="4" class="tableborder" id="config_table">
+ <!-- module root category selector: begin -->
+ <tr class="subsectiontitle">
+ <td colspan="2">
+ <inp2:m_phrase name="la_Text_RootCategory" />
+ </td>
+ <td align="right">
+ <a class="config-header" href="javascript:toggle_section('la_Text_RootCategory');" id="toggle_mark[la_Text_RootCategory]" title="Collapse/Expand Section">[-]</a>
+ </td>
+ </tr>
+
+ <tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>" header_label="la_Text_RootCategory">
+ <td>
+ <span class="text"><inp2:m_phrase name="la_prompt_RootCategory" /></span>
+ </td>
+ <td>
+ <inp2:m_DefineElement name="category_caption">
+ <inp2:m_if check="m_ParamEquals" name="cat_id" value="0" inverse="inverse">
+ <inp2:m_param name="separator"/>
+ </inp2:m_if>
+ <inp2:m_param name="cat_name"/>
+ </inp2:m_DefineElement>
+
+ <b><inp2:conf_CategoryPath separator=" &gt; " render_as="category_caption" /></b>
+ <input type="hidden" name="conf[ModuleRootCategory][VariableValue]" value="<inp2:conf_ModuleRootCategory/>"/>
+ <a href="javascript:openSelector('conf', '<inp2:adm_SelectorLink prefix="conf" selection_mode="single" tab_prefixes="none"/>', 'ModuleRootCategory', '950x600');"><img src="img/icons/icon24_cat.gif" border="0" align="absmiddle" /></a>
+ </td>
+ <td class="error">&nbsp;</td>
+ </tr>
+ <!-- module root category selector: end -->
+
+ <inp2:conf_PrintList block="config_block" per_page="-1" full_block="config_block" half_block1="config_block1" half_block2="config_block2"/>
+</table>
+
+<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Property changes on: branches/unlabeled/unlabeled-1.5.2/kernel/admin_templates/config/config_general.tpl
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.5
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: branches/unlabeled/unlabeled-1.5.2/core/units/relationship/relationship_config.php
===================================================================
--- branches/unlabeled/unlabeled-1.5.2/core/units/relationship/relationship_config.php (nonexistent)
+++ branches/unlabeled/unlabeled-1.5.2/core/units/relationship/relationship_config.php (revision 6134)
@@ -0,0 +1,107 @@
+<?php
+
+$config = Array(
+ 'Prefix' => 'rel',
+
+ 'Clones' => Array(
+ 'c-rel' => Array('ParentPrefix' => 'c'),
+ 'l-rel' => Array('ParentPrefix' => 'l'),
+ 'n-rel' => Array('ParentPrefix' => 'n'),
+ 'bb-rel'=> Array('ParentPrefix' => 'bb'),
+ /*'p-rel' => Array('ParentPrefix' => 'p'),*/
+ 'cms-rel'=> Array('ParentPrefix' => 'cms'),
+ ),
+
+ 'ItemClass' => Array('class'=>'kDBItem','file'=>'','build_event'=>'OnItemBuild'),
+ 'ListClass' => Array('class'=>'kDBList','file'=>'','build_event'=>'OnListBuild'),
+ 'EventHandlerClass' => Array('class'=>'RelationshipEventHandler','file'=>'relationship_event_handler.php','build_event'=>'OnBuild'),
+ 'TagProcessorClass' => Array('class'=>'kDBTagProcessor','file'=>'','build_event'=>'OnBuild'),
+ 'AutoLoad' => true,
+ 'Hooks' => Array(
+ Array(
+ 'Mode' => hAFTER,
+ 'Conditional' => false,
+ 'HookToPrefix' => '#PARENT#',
+ 'HookToSpecial' => '*',
+ 'HookToEvent' => Array('OnAfterItemDelete'),
+ 'DoPrefix' => '',
+ 'DoSpecial' => '',
+ 'DoEvent' => 'OnDeleteForeignRelations',
+ ),
+ ),
+ 'QueryString' => Array(
+ 1 => 'id',
+ 2 => 'page',
+ 3 => 'event',
+ ),
+ 'IDField' => 'RelationshipId',
+ 'StatusField' => Array('Enabled','Type'),
+ 'TableName' => TABLE_PREFIX.'Relationship',
+ 'ParentTableKey'=> 'ResourceId',
+ 'ForeignKey' => 'SourceId',
+ 'ParentPrefix' => 'p',
+ 'AutoDelete' => true,
+ 'AutoClone' => true,
+
+ 'FilterMenu' => Array(
+ 'Groups' => Array(
+ Array('mode' => 'AND', 'filters' => Array('show_active','show_disabled'), 'type' => WHERE_FILTER),
+ Array('mode' => 'AND', 'filters' => Array('show_recip','show_oneway'), 'type' => WHERE_FILTER),
+ ),
+ 'Filters' => Array(
+ 'show_active' => Array('label' =>'la_Active', 'on_sql' => '', 'off_sql' => 'Enabled != 1' ),
+ 'show_disabled' => Array('label' => 'la_Disabled', 'on_sql' => '', 'off_sql' => 'Enabled != 0' ),
+ 's1' => Array(),
+ 'show_recip' => Array('label' => 'la_Reciprocal', 'on_sql' => '', 'off_sql' => '%1$s.Type != 1' ),
+ 'show_oneway' => Array('label' => 'la_OneWay', 'on_sql' => '', 'off_sql' => '%1$s.Type != 2' ),
+ )
+ ),
+
+ 'CalculatedFields' => Array(
+ '' => Array(
+ 'ItemName' => 'TRIM(CONCAT(#ITEM_NAMES#))',
+ 'ItemType' => '#ITEM_TYPES#',
+ ),
+ ),
+
+ 'ListSQLs' => Array( ''=> 'SELECT %1$s.RelationshipId, %1$s.Priority, %1$s.Type, %1$s.Enabled %2$s
+ FROM %1$s #ITEM_JOIN#',
+ ), // key - special, value - list select sql
+
+ 'ListSortings' => Array(
+ '' => Array(
+ 'ForcedSorting' => Array('Priority' => 'desc'),
+ 'Sorting' => Array('ItemName' => 'asc', 'ItemType' => 'asc'),
+ )
+ ),
+ 'ItemSQLs' => Array( '' => 'SELECT %1$s.* %2$s FROM %1$s #ITEM_JOIN#',),
+
+ 'Fields' => Array(
+ 'RelationshipId' => Array(),
+ 'SourceId' => Array('type'=>'int', 'required' => 1, 'default' => 0),
+ 'TargetId' => Array('type'=>'int', 'required' => 1, 'default' => ''),
+ 'SourceType' => Array('type'=>'int','not_null'=>1,'default'=>0),
+ 'TargetType' => Array('type'=>'int','not_null'=>1,'default'=>0),
+ 'Type' => Array('type'=>'int','formatter'=>'kOptionsFormatter', 'required' => 1, 'options'=>Array(1=>'la_Reciprocal',0=>'la_OneWay'),'not_null'=>1,'default'=>0,'use_phrases'=>1),
+ 'Enabled' => Array('type'=>'int','formatter'=>'kOptionsFormatter','options'=>Array(0=>'la_Disabled',1=>'la_Enabled'),'not_null'=>1,'default'=>1,'use_phrases'=>1),
+ 'Priority' => Array('type'=>'int','not_null'=>1,'default'=>0),
+ ),
+ 'VirtualFields' => Array( 'ItemName' => Array(),
+ 'ItemType' => Array(),
+ ),
+
+ 'Grids' => Array(
+ 'Default' => Array(
+ 'Icons' => Array('default'=>'icon16_custom.gif','1_0'=>'icon16_relation_one-way.gif','0_0'=>'icon16_relation_one-way_disabled.gif','1_1'=>'icon16_relation_reciprocal.gif','0_1'=>'icon16_relation_reciprocal_disabled.gif'), // icons for each StatusField values, if no matches or no statusfield selected, then "default" icon is used
+ 'Fields' => Array(
+ 'ItemName' => Array( 'title'=>'la_col_TargetId', 'data_block' => 'grid_checkbox_td'),
+ 'ItemType' => Array( 'title'=>'la_col_TargetType' ),
+ 'Type' => Array( 'title'=>'la_col_RelationshipType' ),
+ 'Enabled' => Array( 'title'=>'la_col_Status' ),
+ ),
+
+ ),
+ ),
+ );
+
+?>
\ No newline at end of file
Property changes on: branches/unlabeled/unlabeled-1.5.2/core/units/relationship/relationship_config.php
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.5
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: branches/unlabeled/unlabeled-1.5.2/core/units/reviews/reviews_tag_processor.php
===================================================================
--- branches/unlabeled/unlabeled-1.5.2/core/units/reviews/reviews_tag_processor.php (nonexistent)
+++ branches/unlabeled/unlabeled-1.5.2/core/units/reviews/reviews_tag_processor.php (revision 6134)
@@ -0,0 +1,95 @@
+<?php
+
+class ReviewsTagProcessor extends kDBTagProcessor
+{
+ /**
+ * Returns a link for editing product
+ *
+ * @param Array $params
+ * @return string
+ */
+ function ItemEditLink($params)
+ {
+ $item_prefix = $params['item_prefix'];
+ $id_field = $this->Application->getUnitOption($item_prefix,'IDField');
+
+ $object =& $this->Application->recallObject($this->getPrefixSpecial(),$this->Prefix, $params);
+ $item_id = $object->GetDBField($id_field);
+
+ return $this->Application->HREF($params['edit_template'],'', Array(
+ 'm_opener' => 'd',
+ $item_prefix.'_mode' => 't',
+ $item_prefix.'_event' => 'OnEdit',
+ $item_prefix.'_id' => $item_id,
+ 'pass' => 'all,'.$item_prefix
+ ), 'index.php');
+ }
+
+ /**
+ * Get's reuested field value
+ *
+ * @param Array $params
+ * @return string
+ * @access public
+ */
+ function Field($params)
+ {
+ $field = $this->SelectParam($params, 'name,field');
+ $object =& $this->Application->recallObject($this->getPrefixSpecial(),$this->Prefix, $params);
+
+ if ($field == 'ReviewText') {
+ if ($object->GetDBField('TextFormat') == 1) {
+ $params['no_special'] = 'no_special';
+ }
+ else {
+ unset($params['no_special']);
+ }
+ }
+
+ return parent::Field($params);
+
+ }
+
+ function AlreadyReviewed($params)
+ {
+ $user_id = ($this->Application->GetVar('u_id') == 0) ? -2 : $this->Application->GetVar('u_id');
+ $object =& $this->getObject( Array('skip_autoload' => true) );
+ $product_info = $object->getLinkedInfo();
+
+ $sql = ' SELECT * FROM '.TABLE_PREFIX.'SpamControl
+ WHERE ItemResourceId='.$product_info['ParentId'].'
+ AND IPaddress="'.$_SERVER['REMOTE_ADDR'].'"
+ AND PortalUserId='.$user_id.'
+ AND DataType="Review"';
+ $res = $this->Conn->GetRow($sql);
+ if($res['Expire'] > adodb_mktime())
+ {
+ $ret = 1;
+ }
+ else
+ {
+ $sql = 'DELETE FROM '.TABLE_PREFIX.'SpamControl
+ WHERE ItemResourceId='.$product_info['ParentId'].'
+ AND IPaddress="'.$_SERVER['REMOTE_ADDR'].'"
+ AND PortalUserId='.$user_id.'
+ AND DataType="Review"';
+ $this->Conn->Query($sql);
+ $ret = 0;
+ }
+ return $ret;
+ }
+
+ function HasError($params)
+ {
+ $object =& $this->Application->recallObject($this->getPrefixSpecial(), $this->Prefix, $params);
+ if (method_exists($object, 'GetErrorMsg')) {
+ return parent::HasError($params);
+ }
+ else {
+ return 0;
+ }
+ }
+}
+
+
+?>
\ No newline at end of file
Property changes on: branches/unlabeled/unlabeled-1.5.2/core/units/reviews/reviews_tag_processor.php
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.5
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: branches/unlabeled/unlabeled-1.5.2/core/units/general/helpers/mod_rewrite_helper.php
===================================================================
--- branches/unlabeled/unlabeled-1.5.2/core/units/general/helpers/mod_rewrite_helper.php (nonexistent)
+++ branches/unlabeled/unlabeled-1.5.2/core/units/general/helpers/mod_rewrite_helper.php (revision 6134)
@@ -0,0 +1,466 @@
+<?php
+
+ class kModRewriteHelper extends kHelper {
+
+ function kModRewriteHelper()
+ {
+ parent::kHelper();
+ $this->HTTPQuery =& $this->Application->recallObject('HTTPQuery');
+ }
+
+ function SetDefaultValues(&$vars)
+ {
+ $defaults = Array('m_cat_id' => 0, 'm_cat_page' => 1, 'm_opener' => 's');
+ foreach ($defaults as $default_key => $default_value)
+ {
+ if ($this->HTTPQuery->Get($default_key) == null) {
+ $vars[$default_key] = $default_value;
+ }
+ }
+ }
+
+ function ProcessLanguage(&$url_parts, &$vars)
+ {
+ if (!isset($url_parts[0])) return false;
+ $res = false;
+ $url_part = array_shift($url_parts);
+
+ $sql = 'SELECT LanguageId FROM '.TABLE_PREFIX.'Language WHERE LOWER(PackName) = '.$this->Conn->qstr($url_part).' AND Enabled = 1';
+ $language_id = $this->Conn->GetOne($sql);
+ $this->Application->Phrases = new PhrasesCache();
+ if($language_id)
+ {
+ $vars['m_lang'] = $language_id;
+ $res = true;
+ }
+
+ $this->Application->VerifyLanguageId();
+ if (!$res) {
+ array_unshift($url_parts, $url_part);
+ }
+ return $res;
+ }
+
+ function ProcessTheme(&$url_parts, &$vars)
+ {
+ if (!isset($url_parts[0])) return false;
+ $res = false;
+ $url_part = array_shift($url_parts);
+
+ $sql = 'SELECT ThemeId FROM '.TABLE_PREFIX.'Theme WHERE LOWER(Name) = '.$this->Conn->qstr($url_part).' AND Enabled = 1';
+ $theme_id = $this->Conn->GetOne($sql);
+ if($theme_id)
+ {
+ $vars['m_theme'] = $theme_id;
+ $res = true;
+ }
+ $this->Application->VerifyThemeId(); // verify anyway - will set default if not found!!!
+ if (!$res) {
+ array_unshift($url_parts, $url_part);
+ }
+ return $res;
+ }
+
+ function ProcessCategory(&$url_parts, &$vars)
+ {
+ if (!isset($url_parts[0])) return false;
+ $res = false;
+ $url_part = array_shift($url_parts);
+
+ $category_id = 0;
+ $last_category_id = 0;
+ $category_path = '';
+ do
+ {
+ $category_path = trim($category_path.'/'.$url_part, '/');
+
+ if( preg_match('/(.*)_([\d]+)$/', $category_path, $rets) )
+ {
+ $category_path = $rets[1];
+ $vars['m_cat_page'] = $rets[2];
+ }
+
+ $category_id = $this->Conn->GetOne(
+ 'SELECT CategoryId
+ FROM '.TABLE_PREFIX.'Category
+ WHERE Status = 1 AND NamedParentPath = '.$this->Conn->qstr($category_path));
+ if ($category_id !== false) {
+ $last_category_id = $category_id;
+ $url_part = array_shift($url_parts);
+ $res = true;
+ }
+ } while ($category_id !== false && $url_part);
+ $vars['m_cat_id'] = $last_category_id;
+
+ if ($url_part) {
+ array_unshift($url_parts, $url_part);
+ }
+ return $res;
+ }
+
+ function ProcessModuleIndex(&$url_parts, &$vars)
+ {
+ if ( count($url_parts) > 1) return false; // if no more parts or only 1 part left
+ if ( $url_parts && $url_parts[0] == 'index') { // treat index same as no parts
+ array_shift($url_parts);
+ }
+
+ if( $url_parts ) { // if parts are left, it can only be module page
+ if (!is_numeric($url_parts[0])) return false;
+
+ // set module pages for all modules, since we don't know which module will need it
+ foreach ($this->Application->ModuleInfo as $module_name => $module_data)
+ {
+ $vars[ $module_data['Var'].'_id'] = 0;
+ $vars[ $module_data['Var'].'_Page'] = $url_parts[0];
+ $vars[ $module_data['Var'].'_Reviews_Page'] = 0;
+ }
+ }
+
+ // try to find CMS index page of the category
+ if ($this->Application->isModuleEnabled('In-CMS')) {
+ $sql = 'SELECT p.Path, ci.CategoryId FROM '.TABLE_PREFIX.'Pages AS p
+ LEFT JOIN '.TABLE_PREFIX.'CategoryItems AS ci
+ ON ci.ItemResourceId = p.ResourceId
+ WHERE
+ p.IsIndex = 1
+ AND
+ p.Status = 1
+ AND
+ CategoryId = '.$vars['m_cat_id'].'
+ AND
+ ci.PrimaryCat = 1';
+ $template_found = $this->Conn->GetRow($sql);
+ if ($template_found !== false) {
+ $vars['t'] = $template_found['Path'];
+ return true;
+ }
+ }
+
+ $sql = 'SELECT CachedCategoryTemplate
+ FROM '.TABLE_PREFIX.'Category
+ WHERE CategoryId = '.$vars['m_cat_id'];
+ $vars['t'] = $this->Conn->GetOne($sql);
+ if (!$vars['t']) $vars['t'] = 'index';
+ return true;
+ }
+
+ function ProcessModuleItem(&$url_parts, &$vars, $set_t=true)
+ {
+ if (preg_match('/^bb_.*/', $url_parts[0])) {
+ $cat_item = $this->Conn->GetRow('
+ SELECT c.ParentPath, c.CategoryId FROM '.TABLE_PREFIX.'Category AS c
+ WHERE
+ c.CategoryId = '.$vars['m_cat_id']);
+
+ if ($set_t) {
+ $item_template = $this->GetItemTemplate($cat_item, 'bb');
+ $vars['t'] = $item_template;
+ }
+
+ $this->Application->HandleEvent($bb_event, 'bb:ParseEnv', Array('url_parts' => $url_parts, 'vars' => $vars));
+ $vars = $bb_event->getEventParam('vars');
+ return 'bb';
+ }
+
+ if (!isset($url_parts[0])) return false;
+ if ( count($url_parts) != 1 ) return false;
+ $url_part = array_shift($url_parts);
+
+ // match module reviews page
+ $page = 1;
+ if( preg_match('/(.*)_([\d]+)$/', $url_part, $rets) )
+ {
+ $url_part = $rets[1];
+ $page = $rets[2];
+ }
+
+ // locating the item in CategoryItems by filename to detect its ItemPrefix and its category ParentPath
+ $cat_item = $this->Conn->GetRow('
+ SELECT ci.ItemResourceId, ci.ItemPrefix, c.ParentPath, ci.CategoryId FROM '.TABLE_PREFIX.'CategoryItems AS ci
+ LEFT JOIN '.TABLE_PREFIX.'Category AS c
+ ON c.CategoryId = ci.CategoryId
+ WHERE
+ ci.CategoryId = '.$vars['m_cat_id'].'
+ AND
+ ci.Filename = '.$this->Conn->qstr($url_part));
+
+ if ($cat_item !== false) { // item found
+ $module_prefix = $cat_item['ItemPrefix'];
+ $item_template = $this->GetItemTemplate($cat_item, $module_prefix);
+
+ // converting ResourceId to correpsonding Item id
+ $module_config = $this->Application->getUnitOptions($module_prefix);
+ $item_id = $this->Conn->GetOne(
+ 'SELECT '.$module_config['IDField'].' FROM '.$module_config['TableName'].'
+ WHERE ResourceId = '.$cat_item['ItemResourceId']
+ );
+
+ if ((!$set_t || $item_template) && $item_id) {
+ if ($set_t) {
+ $vars['t'] = $item_template;
+ }
+ $vars[ $module_prefix.'_id' ] = $item_id;
+ $vars[ $module_prefix.'_Reviews_Page' ] = $page;
+ return $module_prefix;
+ }
+ }
+ array_unshift($url_parts, $url_part);
+ return false;
+ }
+
+ function GetItemTemplate($category, $module_prefix)
+ {
+ if (!is_array($category)) {
+ $category = $this->Conn->GetRow('
+ SELECT c.ParentPath, c.CategoryId FROM '.TABLE_PREFIX.'Category AS c
+ WHERE
+ c.CategoryId = '.$category);
+ }
+ $parent_path = implode(',',explode('|', substr($category['ParentPath'], 1, -1)));
+
+ // item template is stored in module' system custom field - need to get that field Id
+ $item_template_field_id = $this->Conn->GetOne(
+ 'SELECT CustomFieldId
+ FROM '.TABLE_PREFIX.'CustomField
+ WHERE FieldName = '.$this->Conn->qstr($module_prefix.'_ItemTemplate'));
+
+ // looking for item template through cats hierarchy sorted by parent path
+ $query = 'SELECT ccd.l1_cust_'.$item_template_field_id.',
+ FIND_IN_SET(c.CategoryId, '.$this->Conn->qstr($parent_path).') AS Ord1,
+ c.CategoryId, c.Name, ccd.l1_cust_'.$item_template_field_id.'
+ FROM '.TABLE_PREFIX.'Category AS c
+ LEFT JOIN '.TABLE_PREFIX.'CategoryCustomData AS ccd
+ ON ccd.ResourceId = c.ResourceId
+ WHERE c.CategoryId IN ('.$parent_path.') AND ccd.l1_cust_'.$item_template_field_id.' != \'\'
+ ORDER BY FIND_IN_SET(c.CategoryId, '.$this->Conn->qstr($parent_path).') DESC';
+ $item_template = $this->Conn->GetOne($query);
+ return $item_template;
+ }
+
+ function ProcessPhisycalTemplate(&$url_parts, &$vars)
+ {
+ if (!isset($url_parts[0])) return false;
+
+ $remaining = array();
+ do
+ {
+ $template_path = implode('/', $url_parts);
+
+ $t_parts['path'] = dirname($template_path) == '.' ? '' : '/'.dirname($template_path);
+ $t_parts['file'] = basename($template_path);
+
+ $sql = 'SELECT FileId
+ FROM '.TABLE_PREFIX.'ThemeFiles
+ WHERE (FilePath = '.$this->Conn->qstr($t_parts['path']).') AND (FileName = '.$this->Conn->qstr($t_parts['file'].'.tpl').')';
+
+// $sql = 'SELECT FileId FROM '.TABLE_PREFIX.'ThemeFiles WHERE CONCAT(FilePath, "/", FileName) = '.$this->Conn->qstr('/'.$template_path.'.tpl');
+ $template_found = $this->Conn->GetOne($sql);
+ if(!$template_found)
+ {
+ array_unshift($remaining, array_pop($url_parts));
+ }
+ } while (!$template_found && $url_parts);
+
+ $url_parts = $remaining;
+
+ if ($template_found) {
+ $vars['t'] = $template_path;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Checks if whole url_parts matches a whole In-CMS page
+ *
+ * @param array $url_parts
+ * @return boolean
+ */
+ function ProcessVirtualTemplate(&$url_parts, &$vars)
+ {
+ if (!isset($url_parts[0]) || !$this->Application->isModuleEnabled('In-CMS')) return false;
+
+ $template_path = implode('/', $url_parts);
+ $sql = 'SELECT p.PageId, ci.CategoryId FROM '.TABLE_PREFIX.'Pages AS p
+ LEFT JOIN '.TABLE_PREFIX.'CategoryItems AS ci
+ ON ci.ItemResourceId = p.ResourceId
+ WHERE
+ Path = '.$this->Conn->qstr($template_path).'
+ AND
+ ci.PrimaryCat = 1
+ AND
+ p.Status = 1';
+ $template_found = $this->Conn->GetRow($sql);
+
+ if ($template_found) {
+ $vars['m_cat_id'] = $template_found['CategoryId'];
+ $vars['t'] = $template_path;
+ return true;
+ }
+
+ return false;
+ }
+
+ function processRewriteURL()
+ {
+ $passed = array();
+ $url = $this->HTTPQuery->Get('_mod_rw_url_');
+ if( substr($url, -5) == '.html' ) $url = substr($url, 0, strlen($url) - 5 );
+
+ $restored = false;
+ $cache = $this->Conn->GetRow('SELECT Data, Cached FROM '.TABLE_PREFIX.'Cache WHERE VarName = "mod_rw_'.md5($url).'"');
+ if (false && $cache && $cache['Cached'] > 0) {
+ $cache = unserialize($cache['Data']);
+ $vars = $cache['vars'];
+ $passed = $cache['passed'];
+ $restored = true;
+ }
+ else {
+ $passed = array();
+ $vars = $this->parseRewriteURL($url,$passed);
+ $cache = array('vars'=>$vars,'passed'=>$passed);
+ $this->Conn->Query('REPLACE '.TABLE_PREFIX.'Cache (VarName, Data, Cached) VALUES ("mod_rw_'.md5($url).'", '.$this->Conn->qstr(serialize($cache)).', '.adodb_mktime().')');
+ }
+ foreach ($vars as $name => $value)
+ {
+ $this->HTTPQuery->Set($name,$value);
+ }
+ if ($restored) {
+ $this->InitAll();
+ }
+ $this->HTTPQuery->finalizeParsing($passed);
+ }
+
+ function InitAll()
+ {
+ $this->Application->Phrases = new PhrasesCache();
+ $this->Application->VerifyLanguageId();
+ $this->Application->Phrases->Init('phrases');
+ $this->Application->VerifyThemeId();
+ }
+
+ function parseRewriteURL($url, &$passed)
+ {
+ $vars = $this->Conn->GetRow('SELECT Data, Cached FROM '.TABLE_PREFIX.'Cache WHERE VarName = "mod_rw_'.md5($url).'"');
+ if (false && $vars && $vars['Cached'] > 0) {
+ $vars = unserialize($menu['Data']);
+ return $vars;
+ }
+
+ $vars = array();
+ $url_parts = $url ? explode('/', $url) : Array();
+
+ $process_module = true;
+ if($this->HTTPQuery->Get('rewrite') == 'on' || !$url_parts)
+ {
+ $this->SetDefaultValues($vars);
+ }
+
+ if(!$url_parts)
+ {
+ $this->InitAll();
+
+ $vars['t'] = $this->HTTPQuery->getDefaultTemplate('');
+ $passed[] = 'm';
+ return $vars;
+ }
+ else
+ {
+ $vars['t'] = '';
+ }
+
+ $passed = Array('m');
+ $this->ProcessLanguage($url_parts, $vars);
+ $this->ProcessTheme($url_parts, $vars);
+
+ if ( $this->ProcessVirtualTemplate($url_parts, $vars) ) {
+ return $vars;
+ }
+
+ $this->ProcessCategory($url_parts, $vars);
+
+
+
+ if ( $this->ProcessModuleIndex($url_parts, $vars) ) {
+ foreach ($this->Application->ModuleInfo as $module_name => $info) {
+ $passed[] = $info['Var'];
+ }
+ return $vars;
+ }
+ if ( $module_prefix = $this->ProcessModuleItem($url_parts, $vars) ) {
+ $passed[] = $module_prefix;
+ return $vars;
+ }
+
+ /*// match module
+ $next_template = $this->HTTPQuery->Get('next_template');
+ if($url_part || $next_template)
+ {
+ if($next_template)
+ {
+ $next_template_parts = explode('/', $next_template);
+ $module_folder = array_shift($next_template_parts);
+ }
+ else
+ {
+ $module_folder = $url_part;
+ }
+
+ foreach ($this->Application->ModuleInfo as $module_name => $module_data)
+ {
+ if( trim($module_data['TemplatePath'], '/') == $module_folder )
+ {
+ $module_prefix = $module_data['Var'];
+ break;
+ }
+ }
+ }*/
+
+ if ( $this->ProcessPhisycalTemplate($url_parts, $vars) ) {
+ if (!$url_parts) {
+ return $vars;
+ }
+ }
+
+ if ( $module_prefix = $this->ProcessModuleItem($url_parts, $vars, false) ) {
+ $passed[] = $module_prefix;
+ return $vars;
+ }
+
+ $not_found = $this->Application->ConfigValue('ErrorTemplate');
+ $vars['t'] = $not_found ? $not_found : 'error_notfound';
+
+ header('HTTP/1.0 404 Not Found');
+
+ return $vars;
+
+// $this->HTTPQuery->finalizeParsing($passed, $module_params);
+
+ // pass params left to module
+
+ /*$this->Application->Phrases->Init('phrases');
+ $passed = Array('m');
+ $module_params = Array();
+ if ( isset($module_prefix) ) {
+ $passed[] = $module_prefix;
+ $module_event = new kEvent($module_prefix.':ParseEnv', Array('url_parts' => $url_parts) );
+ if ($process_module) {
+ $this->Application->HandleEvent($module_event);
+ }
+ $item_id = $this->HTTPQuery->Get($module_prefix.'_id');
+ $module_params = Array($module_prefix.'_id' => $item_id ? $item_id : '0' );
+
+ if ($module_event->status == erFAIL) {
+ $not_found = $this->Application->ConfigValue('ErrorTemplate');
+ $this->HTTPQuery->Set('t', $not_found ? $not_found : 'error_notfound' );
+ }
+ }
+
+ $this->HTTPQuery->finalizeParsing($passed, $module_params);*/
+ }
+
+
+ }
+
+?>
\ No newline at end of file
Property changes on: branches/unlabeled/unlabeled-1.5.2/core/units/general/helpers/mod_rewrite_helper.php
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.5
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property

Event Timeline