Page Menu
Home
In-Portal Phabricator
Search
Configure Global Search
Log In
Files
F1245189
mod_rewrite_helper.php
No One
Temporary
Actions
Download 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
Fri, Nov 21, 5:28 AM
Size
9 KB
Mime Type
text/x-php
Expires
Sun, Nov 23, 5:28 AM (1 d, 21 h)
Engine
blob
Format
Raw Data
Handle
809717
Attached To
rINP In-Portal
mod_rewrite_helper.php
View Options
<?php
class
kModRewriteHelper
extends
kHelper
{
function
kModRewriteHelper
()
{
parent
::
kHelper
();
$this
->
HTTPQuery
=&
$this
->
Application
->
recallObject
(
'HTTPQuery'
);
}
function
processRewriteURL
()
{
// directory_1_2_3/sc1/inlink/detail/3/l1_ka_asd.html
$url
=
$this
->
HTTPQuery
->
Get
(
'_mod_rw_url_'
);
if
(
substr
(
$url
,
-
5
)
==
'.html'
)
$url
=
substr
(
$url
,
0
,
strlen
(
$url
)
-
5
);
$url_parts
=
$url
?
explode
(
'/'
,
$url
)
:
Array
();
$process_module
=
true
;
if
(
$this
->
HTTPQuery
->
Get
(
'rewrite'
)
==
'on'
||
!
$url_parts
)
{
// set default values
$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
)
{
$this
->
HTTPQuery
->
Set
(
$default_key
,
$default_value
);
}
}
}
if
(!
$url_parts
)
{
$this
->
Application
->
Phrases
=
new
PhrasesCache
();
$this
->
Application
->
VerifyLanguageId
();
$this
->
Application
->
Phrases
->
Init
(
'phrases'
);
$this
->
Application
->
VerifyThemeId
();
$this
->
HTTPQuery
->
Set
(
't'
,
$this
->
HTTPQuery
->
getDefaultTemplate
(
''
)
);
$this
->
HTTPQuery
->
finalizeParsing
(
Array
(
'm'
));
return
false
;
}
else
{
$this
->
HTTPQuery
->
Set
(
't'
,
''
);
}
$url_part
=
array_shift
(
$url_parts
);
// match language
$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
)
{
$this
->
HTTPQuery
->
Set
(
'm_lang'
,
$language_id
);
$url_part
=
$url_parts
?
array_shift
(
$url_parts
)
:
''
;
// prepare next url part for parsing
}
$this
->
Application
->
VerifyLanguageId
();
// $this->HTTPQuery->Get('m_lang') );
// match theme
if
(
$url_part
)
{
$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
)
{
$this
->
HTTPQuery
->
Set
(
'm_theme'
,
$theme_id
);
$url_part
=
$url_parts
?
array_shift
(
$url_parts
)
:
''
;
// prepare next url part for parsing
}
}
$this
->
Application
->
VerifyThemeId
();
// verify anyway - will set default if not found!!!
// match category
$category_id
=
0
;
if
(
$url_part
)
{
$category_stack
=
Array
();
$category_found
=
false
;
$category_path
=
''
;
$rets
=
Array
();
// just in case someone has used this variable before
do
{
$category_path
=
trim
(
$category_path
.
'/'
.
$url_part
,
'/'
);
if
(
preg_match
(
'/(.*)_([
\d
]+)$/'
,
$category_path
,
$rets
)
)
{
$category_path
=
$rets
[
1
];
$this
->
HTTPQuery
->
Set
(
'm_cat_page'
,
$rets
[
2
]);
}
if
(
$category_path
==
''
)
{
// this is "Home" virtual category
array_push
(
$category_stack
,
0
);
}
else
{
$sql
=
'SELECT CategoryId
FROM '
.
TABLE_PREFIX
.
'Category
WHERE NamedParentPath = '
.
$this
->
Conn
->
qstr
(
$category_path
);
array_push
(
$category_stack
,
$this
->
Conn
->
GetOne
(
$sql
)
);
}
$category_found
=
end
(
$category_stack
);
if
(
$category_found
!==
false
)
$url_part
=
array_shift
(
$url_parts
);
}
while
(
$category_found
&&
$url_part
);
if
(
count
(
$category_stack
))
{
$category_id
=
array_pop
(
$category_stack
);
// remove last not found category
if
(
$category_id
===
false
)
{
$category_id
=
array_pop
(
$category_stack
);
}
if
(
$category_id
!==
false
)
{
$this
->
HTTPQuery
->
Set
(
'm_cat_id'
,
$category_id
);
}
}
elseif
(!
$category_found
&&
getArrayValue
(
$rets
,
2
))
{
$url_part
=
array_shift
(
$url_parts
);
}
}
if
(!
$url_part
)
{
// no more parts left in url
$process_module
=
false
;
$sql
=
'SELECT CachedCategoryTemplate
FROM '
.
TABLE_PREFIX
.
'Category
WHERE CategoryId = '
.
$category_id
;
$category_template
=
$this
->
Conn
->
GetOne
(
$sql
);
if
(
$category_template
)
{
$category_template
=
explode
(
'/'
,
$category_template
);
$url_part
=
array_shift
(
$category_template
);
$url_parts
=
$category_template
;
}
else
{
$url_part
=
'index'
;
}
}
elseif
(
$url_part
&&
count
(
$url_parts
)
<=
1
&&
$category_id
)
{
// only filename left, no other parts
$process_module
=
false
;
$sql
=
'SELECT ParentPath, CachedItemTemplate, CachedCategoryTemplate
FROM '
.
TABLE_PREFIX
.
'Category
WHERE CategoryId = '
.
$category_id
;
$category_data
=
$this
->
Conn
->
GetRow
(
$sql
);
$root_category_id
=
array_shift
(
explode
(
'|'
,
substr
(
$category_data
[
'ParentPath'
],
1
,
-
1
))
);
$module_info
=
$this
->
Application
->
findModule
(
'RootCat'
,
$root_category_id
);
if
(
$module_info
)
{
$module_prefix
=
$module_info
[
'Var'
];
$module_event
=
new
kEvent
(
$module_prefix
.
':ParseEnv'
,
Array
(
'url_parts'
=>
array_merge
(
Array
(
$url_part
),
$url_parts
))
);
$this
->
Application
->
HandleEvent
(
$module_event
);
if
(
$module_event
->
status
==
erSUCCESS
&&
$this
->
HTTPQuery
->
Get
(
$module_prefix
.
'_id'
))
{
$item_template
=
$category_data
[
'CachedItemTemplate'
];
if
(
$item_template
)
{
$url_parts
=
explode
(
'/'
,
$item_template
);
array_push
(
$url_parts
,
$url_part
);
// save item's filename as not processed
$url_part
=
array_shift
(
$url_parts
);
}
}
elseif
(!
$module_event
->
getEventParam
(
'url_parts'
))
{
// parseEnv has processed that param
$url_part
=
''
;
$category_template
=
$category_data
[
'CachedCategoryTemplate'
];
if
(
$category_template
)
{
$category_template
=
explode
(
'/'
,
$category_template
);
$url_part
=
array_shift
(
$category_template
);
$url_parts
=
$category_template
;
}
else
{
$url_part
=
'index'
;
}
}
}
}
// 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
;
}
}
}
// match template
$template_path
=
''
;
$template_found
=
false
;
if
(
$url_part
)
{
// search for template in real template records
array_unshift
(
$url_parts
,
$url_part
);
$template_parts
=
$url_parts
;
$url_parts
=
Array
();
do
{
$template_path
=
implode
(
'/'
,
$template_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
(
$url_parts
,
array_pop
(
$template_parts
)
);
}
}
while
(!
$template_found
&&
$template_parts
);
// try to find template in virtual templates in case if such ability exists
if
(
$this
->
Application
->
isModuleEnabled
(
'In-CMS'
)
&&
!
$template_found
)
{
$template_parts
=
$url_parts
;
$url_parts
=
Array
();
do
{
$template_path
=
implode
(
'/'
,
$template_parts
);
$sql
=
'SELECT PageId FROM '
.
TABLE_PREFIX
.
'Pages WHERE Path = '
.
$this
->
Conn
->
qstr
(
$template_path
);
$template_found
=
$this
->
Conn
->
GetOne
(
$sql
);
if
(!
$template_found
)
{
array_unshift
(
$url_parts
,
array_pop
(
$template_parts
)
);
}
}
while
(!
$template_found
&&
$template_parts
);
}
}
// guess template if no existing template found
if
(!
$template_found
&&
isset
(
$module_folder
)
&&
$module_folder
)
{
// 1. try index template of module
$sql
=
'SELECT FileId FROM '
.
TABLE_PREFIX
.
'ThemeFiles WHERE CONCAT(FilePath, "/", FileName) = '
.
$this
->
Conn
->
qstr
(
'/'
.
$module_folder
.
'/index.tpl'
);
$template_found
=
$this
->
Conn
->
GetOne
(
$sql
);
if
(
$template_found
)
{
$template_path
=
$module_folder
.
'/index'
;
array_shift
(
$url_parts
);
}
else
{
// 2. return error template then
$template_found
=
true
;
$template_path
=
$this
->
Application
->
ConfigValue
(
'ErrorTemplate'
);
if
(!
$template_path
)
$template_path
=
'error_notfound'
;
header
(
'HTTP/1.0 404 Not Found'
);
}
}
$this
->
HTTPQuery
->
Set
(
't'
,
$this
->
HTTPQuery
->
getDefaultTemplate
(
$template_found
?
$template_path
:
''
)
);
// 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
);
}
}
?>
Event Timeline
Log In to Comment