Page Menu
Home
In-Portal Phabricator
Search
Configure Global Search
Log In
Files
F864572
install_toolkit.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
Sat, May 3, 10:39 PM
Size
20 KB
Mime Type
text/x-php
Expires
Mon, May 5, 10:39 PM (5 h, 37 m)
Engine
blob
Format
Raw Data
Handle
614343
Attached To
rINP In-Portal
install_toolkit.php
View Options
<?php
/**
* @version $Id: install_toolkit.php 12199 2009-08-05 15:59:15Z alex $
* @package In-Portal
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license GNU/GPL
* In-Portal is Open Source software.
* This means that this software may have been modified pursuant
* the GNU General Public License, and as distributed it includes
* or is derivative of works licensed under the GNU General Public License
* or other free or open source software licenses.
* See http://www.in-portal.net/license/ for copyright notices and details.
*/
/**
* Upgrade sqls are located using this mask
*
*/
define
(
'UPGRADES_FILE'
,
FULL_PATH
.
'/%sinstall/upgrades.%s'
);
/**
* Prerequisit check classes are located using this mask
*
*/
define
(
'PREREQUISITE_FILE'
,
FULL_PATH
.
'/%sinstall/prerequisites.php'
);
/**
* Format of version identificator in upgrade files
*
*/
define
(
'VERSION_MARK'
,
'# ===== v ([
\d
]+
\.
[
\d
]+
\.
[
\d
]+) ====='
);
if
(!
defined
(
'GET_LICENSE_URL'
))
{
/**
* Url used for retrieving user licenses from Intechnic licensing server
*
*/
define
(
'GET_LICENSE_URL'
,
'http://www.intechnic.com/myaccount/license.php'
);
}
/**
* Misc functions, that are required during installation, when
*
*/
class
kInstallToolkit
{
/**
* Reference to kApplication class object
*
* @var kApplication
*/
var
$Application
=
null
;
/**
* Connection to database
*
* @var kDBConnection
*/
var
$Conn
=
null
;
/**
* Path to config.php
*
* @var string
*/
var
$INIFile
=
''
;
/**
* Parsed data from config.php
*
* @var Array
*/
var
$systemConfig
=
Array
();
/**
* Installator instance
*
* @var kInstallator
*/
var
$_installator
=
null
;
function
kInstallToolkit
()
{
if
(
class_exists
(
'kApplication'
))
{
// auto-setup in case of separate module install
$this
->
Application
=&
kApplication
::
Instance
();
$this
->
Conn
=&
$this
->
Application
->
GetADODBConnection
();
}
$this
->
INIFile
=
FULL_PATH
.
DIRECTORY_SEPARATOR
.
'config.php'
;
$this
->
systemConfig
=
$this
->
ParseConfig
(
true
);
}
/**
* Sets installator
*
* @param kInstallator $instance
*/
function
setInstallator
(&
$instance
)
{
$this
->
_installator
=&
$instance
;
}
/**
* Checks prerequisities before module install or upgrade
*
* @param string $module_path
* @param string $versions
* @param string $mode upgrade mode = {install, standalone, upgrade}
*/
function
CheckPrerequisites
(
$module_path
,
$versions
,
$mode
)
{
static
$prerequisit_classes
=
Array
();
$prerequisites_file
=
sprintf
(
PREREQUISITE_FILE
,
$module_path
);
if
(!
file_exists
(
$prerequisites_file
)
||
!
$versions
)
{
return
Array
();
}
if
(!
isset
(
$prerequisit_classes
[
$module_path
]))
{
// save class name, because 2nd time
// (in after call $prerequisite_class variable will not be present)
include_once
$prerequisites_file
;
$prerequisit_classes
[
$module_path
]
=
$prerequisite_class
;
}
$prerequisite_object
=
new
$prerequisit_classes
[
$module_path
]();
if
(
method_exists
(
$prerequisite_object
,
'setToolkit'
))
{
$prerequisite_object
->
setToolkit
(
$this
);
}
// some errors possible
return
$prerequisite_object
->
CheckPrerequisites
(
$versions
,
$mode
);
}
/**
* Processes one license, received from server
*
* @param string $file_data
*/
function
processLicense
(
$file_data
)
{
$modules_helper
=&
$this
->
Application
->
recallObject
(
'ModulesHelper'
);
/* @var $modules_helper kModulesHelper */
$file_data
=
explode
(
'Code==:'
,
$file_data
);
$file_data
[
0
]
=
str_replace
(
'In-Portal License File - do not edit!'
.
"
\n
"
,
''
,
$file_data
[
0
]);
$file_data
=
array_map
(
'trim'
,
$file_data
);
if
(
$modules_helper
->
verifyLicense
(
$file_data
[
0
]))
{
$this
->
setSystemConfig
(
'Intechnic'
,
'License'
,
$file_data
[
0
]);
if
(
array_key_exists
(
1
,
$file_data
))
{
$this
->
setSystemConfig
(
'Intechnic'
,
'LicenseCode'
,
$file_data
[
1
]);
}
else
{
$this
->
setSystemConfig
(
'Intechnic'
,
'LicenseCode'
);
}
$this
->
SaveConfig
();
}
else
{
// invalid license received from licensing server
$this
->
_installator
->
errorMessage
=
'Invalid License File'
;
}
}
/**
* Saves given configuration values to database
*
* @param Array $config
*/
function
saveConfigValues
(
$config
)
{
foreach
(
$config
as
$config_var
=>
$value
)
{
$sql
=
'UPDATE '
.
TABLE_PREFIX
.
'ConfigurationValues
SET VariableValue = '
.
$this
->
Conn
->
qstr
(
$value
)
.
'
WHERE VariableName = '
.
$this
->
Conn
->
qstr
(
$config_var
);
$this
->
Conn
->
Query
(
$sql
);
}
}
/**
* Sets module version to passed
*
* @param string $module_name
* @param string $version
*/
function
SetModuleVersion
(
$module_name
,
$version
=
false
)
{
if
(
$version
===
false
)
{
$version
=
$this
->
GetMaxModuleVersion
(
$module_name
);
}
// get table prefix from config, because application may not be available here
$table_prefix
=
$this
->
getSystemConfig
(
'Database'
,
'TablePrefix'
);
if
(
$module_name
==
'kernel'
)
{
$module_name
=
'in-portal'
;
}
$sql
=
'UPDATE '
.
$table_prefix
.
'Modules
SET Version = "'
.
$version
.
'"
WHERE LOWER(Name) = "'
.
strtolower
(
$module_name
)
.
'"'
;
$this
->
Conn
->
Query
(
$sql
);
}
/**
* Sets module root category to passed
*
* @param string $module_name
* @param string $category_id
*/
function
SetModuleRootCategory
(
$module_name
,
$category_id
=
0
)
{
// get table prefix from config, because application may not be available here
$table_prefix
=
$this
->
getSystemConfig
(
'Database'
,
'TablePrefix'
);
if
(
$module_name
==
'kernel'
)
{
$module_name
=
'in-portal'
;
}
$sql
=
'UPDATE '
.
$table_prefix
.
'Modules
SET RootCat = '
.
$category_id
.
'
WHERE LOWER(Name) = "'
.
strtolower
(
$module_name
)
.
'"'
;
$this
->
Conn
->
Query
(
$sql
);
}
/**
* Returns maximal version of given module by scanning it's upgrade scripts
*
* @param string $module_name
* @return string
*/
function
GetMaxModuleVersion
(
$module_name
)
{
$upgrades_file
=
sprintf
(
UPGRADES_FILE
,
mb_strtolower
(
$module_name
).
'/'
,
'sql'
);
if
(!
file_exists
(
$upgrades_file
))
{
// no upgrade file
return
'4.0.1'
;
}
$sqls
=
file_get_contents
(
$upgrades_file
);
$versions_found
=
preg_match_all
(
'/'
.
VERSION_MARK
.
'/s'
,
$sqls
,
$regs
);
if
(!
$versions_found
)
{
// upgrades file doesn't contain version definitions
return
'4.0.1'
;
}
return
end
(
$regs
[
1
]);
}
/**
* Runs SQLs from file
*
* @param string $filename
* @param mixed $replace_from
* @param mixed $replace_to
*/
function
RunSQL
(
$filename
,
$replace_from
=
null
,
$replace_to
=
null
)
{
if
(!
file_exists
(
FULL_PATH
.
$filename
))
{
return
;
}
$sqls
=
file_get_contents
(
FULL_PATH
.
$filename
);
if
(!
$this
->
RunSQLText
(
$sqls
,
$replace_from
,
$replace_to
))
{
if
(
is_object
(
$this
->
_installator
))
{
$this
->
_installator
->
Done
();
}
else
{
if
(
isset
(
$this
->
Application
))
{
$this
->
Application
->
Done
();
}
exit
;
}
}
}
/**
* Runs SQLs from string
*
* @param string $sqls
* @param mixed $replace_from
* @param mixed $replace_to
*/
function
RunSQLText
(&
$sqls
,
$replace_from
=
null
,
$replace_to
=
null
,
$start_from
=
0
)
{
$table_prefix
=
$this
->
getSystemConfig
(
'Database'
,
'TablePrefix'
);
// add prefix to all tables
if
(
strlen
(
$table_prefix
)
>
0
)
{
$replacements
=
Array
(
'INSERT INTO '
,
'UPDATE '
,
'ALTER TABLE '
,
'DELETE FROM '
,
'REPLACE INTO '
);
foreach
(
$replacements
as
$replacement
)
{
$sqls
=
str_replace
(
$replacement
,
$replacement
.
$table_prefix
,
$sqls
);
}
}
$sqls
=
str_replace
(
'CREATE TABLE '
,
'CREATE TABLE IF NOT EXISTS '
.
$table_prefix
,
$sqls
);
$sqls
=
str_replace
(
'DROP TABLE '
,
'DROP TABLE IF EXISTS '
.
$table_prefix
,
$sqls
);
if
(
isset
(
$replace_from
)
&&
isset
(
$replace_to
))
{
// replace something additionally, e.g. module root category
$sqls
=
str_replace
(
$replace_from
,
$replace_to
,
$sqls
);
}
$sqls
=
str_replace
(
"
\r\n
"
,
"
\n
"
,
$sqls
);
// convert to linux line endings
$sqls
=
preg_replace
(
"/#([^;]*?)
\n
/"
,
''
,
$sqls
);
// remove all comments
$sqls
=
explode
(
";
\n
"
,
$sqls
.
"
\n
"
);
// ensures that last sql won't have ";" in it
$db_collation
=
$this
->
getSystemConfig
(
'Database'
,
'DBCollation'
);
for
(
$i
=
$start_from
;
$i
<
count
(
$sqls
);
$i
++)
{
$sql
=
trim
(
$sqls
[
$i
]);
if
(!
$sql
)
{
continue
;
// usually last line
}
if
(
substr
(
$sql
,
0
,
13
)
==
'CREATE TABLE '
&&
$db_collation
)
{
// it is CREATE TABLE statement -> add collation
$sql
.=
' COLLATE
\'
'
.
$db_collation
.
'
\'
'
;
}
$this
->
Conn
->
Query
(
$sql
);
if
(
$this
->
Conn
->
getErrorCode
()
!=
0
)
{
if
(
is_object
(
$this
->
_installator
))
{
$this
->
_installator
->
errorMessage
=
'Error: ('
.
$this
->
Conn
->
getErrorCode
().
') '
.
$this
->
Conn
->
getErrorMsg
().
'<br /><br />Last Database Query:<br /><textarea cols="70" rows="10" readonly>'
.
htmlspecialchars
(
$sql
).
'</textarea>'
;
$this
->
_installator
->
LastQueryNum
=
$i
+
1
;
}
return
false
;
}
}
return
true
;
}
/**
* Performs clean language import from given xml file
*
* @param string $lang_file
* @param bool $upgrade
* @todo Import for "core/install/english.lang" (322KB) takes 18 seconds to work on Windows
*/
function
ImportLanguage
(
$lang_file
,
$upgrade
=
false
)
{
$lang_file
=
FULL_PATH
.
$lang_file
.
'.lang'
;
if
(!
file_exists
(
$lang_file
))
{
return
;
}
$language_import_helper
=&
$this
->
Application
->
recallObject
(
'LanguageImportHelper'
);
/* @var $language_import_helper LanguageImportHelper */
$language_import_helper
->
performImport
(
$lang_file
,
'|0|1|2|'
,
''
,
$upgrade
?
LANG_SKIP_EXISTING
:
LANG_OVERWRITE_EXISTING
);
}
/**
* Converts module version in format X.Y.Z to signle integer
*
* @param string $version
* @return int
*/
function
ConvertModuleVersion
(
$version
)
{
$parts
=
explode
(
'.'
,
$version
);
$bin
=
''
;
foreach
(
$parts
as
$part
)
{
$bin
.=
str_pad
(
decbin
(
$part
),
8
,
'0'
,
STR_PAD_LEFT
);
}
return
bindec
(
$bin
);
}
/**
* Returns themes, found in system
*
* @param bool $rebuild
* @return int
*/
function
getThemes
(
$rebuild
=
false
)
{
if
(
$rebuild
)
{
$this
->
rebuildThemes
();
}
$id_field
=
$this
->
Application
->
getUnitOption
(
'theme'
,
'IDField'
);
$table_name
=
$this
->
Application
->
getUnitOption
(
'theme'
,
'TableName'
);
$sql
=
'SELECT Name, '
.
$id_field
.
'
FROM '
.
$table_name
;
return
$this
->
Conn
->
GetCol
(
$sql
,
$id_field
);
}
function
ParseConfig
(
$parse_section
=
false
)
{
if
(!
file_exists
(
$this
->
INIFile
))
{
return
Array
();
}
if
(
file_exists
(
$this
->
INIFile
)
&&
!
is_readable
(
$this
->
INIFile
)
)
{
die
(
'Could Not Open Ini File'
);
}
$contents
=
file
(
$this
->
INIFile
);
$retval
=
Array
();
$section
=
''
;
$ln
=
1
;
$resave
=
false
;
foreach
(
$contents
as
$line
)
{
if
(
$ln
==
1
&&
$line
!=
'<'
.
'?'
.
'php die() ?'
.
">
\n
"
)
{
$resave
=
true
;
}
$ln
++;
$line
=
trim
(
$line
);
$line
=
eregi_replace
(
';[.]*'
,
''
,
$line
);
if
(
strlen
(
$line
)
>
0
)
{
//echo $line . " - ";
if
(
eregi
(
'^[[a-z]+]$'
,
str_replace
(
' '
,
''
,
$line
)))
{
//echo 'section';
$section
=
mb_substr
(
$line
,
1
,
(
mb_strlen
(
$line
)
-
2
));
if
(
$parse_section
)
{
$retval
[
$section
]
=
array
();
}
continue
;
}
elseif
(
eregi
(
'='
,
$line
))
{
//echo 'main element';
list
(
$key
,
$val
)
=
explode
(
' = '
,
$line
);
if
(!
$parse_section
)
{
$retval
[
trim
(
$key
)]
=
str_replace
(
'"'
,
''
,
$val
);
}
else
{
$retval
[
$section
][
trim
(
$key
)]
=
str_replace
(
'"'
,
''
,
$val
);
}
}
}
}
if
(
$resave
)
{
$fp
=
fopen
(
$this
->
INIFile
,
'w'
);
reset
(
$contents
);
fwrite
(
$fp
,
'<'
.
'?'
.
'php die() ?'
.
">
\n\n
"
);
foreach
(
$contents
as
$line
)
{
fwrite
(
$fp
,
"$line"
);
}
fclose
(
$fp
);
}
return
$retval
;
}
function
SaveConfig
(
$silent
=
false
)
{
if
(!
is_writable
(
$this
->
INIFile
)
&&
!
is_writable
(
dirname
(
$this
->
INIFile
)))
{
trigger_error
(
'Cannot write to "'
.
$this
->
INIFile
.
'" file.'
,
$silent
?
E_USER_NOTICE
:
E_USER_ERROR
);
return
;
}
$fp
=
fopen
(
$this
->
INIFile
,
'w'
);
fwrite
(
$fp
,
'<'
.
'?'
.
'php die() ?'
.
">
\n\n
"
);
foreach
(
$this
->
systemConfig
as
$section_name
=>
$section_data
)
{
fwrite
(
$fp
,
'['
.
$section_name
.
"]
\n
"
);
foreach
(
$section_data
as
$key
=>
$value
)
{
fwrite
(
$fp
,
$key
.
' = "'
.
$value
.
'"'
.
"
\n
"
);
}
fwrite
(
$fp
,
"
\n
"
);
}
fclose
(
$fp
);
}
/**
* Sets value to system config (yet SaveConfig must be called to write it to file)
*
* @param string $section
* @param string $key
* @param string $value
*/
function
setSystemConfig
(
$section
,
$key
,
$value
=
null
)
{
if
(
isset
(
$value
))
{
if
(!
array_key_exists
(
$section
,
$this
->
systemConfig
))
{
// create section, when missing
$this
->
systemConfig
[
$section
]
=
Array
();
}
// create key in section
$this
->
systemConfig
[
$section
][
$key
]
=
$value
;
return
;
}
unset
(
$this
->
systemConfig
[
$section
][
$key
]);
}
/**
* Returns information from system config
*
* @return string
*/
function
getSystemConfig
(
$section
,
$key
)
{
if
(!
array_key_exists
(
$section
,
$this
->
systemConfig
))
{
return
false
;
}
if
(!
array_key_exists
(
$key
,
$this
->
systemConfig
[
$section
]))
{
return
false
;
}
return
$this
->
systemConfig
[
$section
][
$key
]
?
$this
->
systemConfig
[
$section
][
$key
]
:
false
;
}
/**
* Checks if system config is present and is not empty
*
* @return bool
*/
function
systemConfigFound
()
{
return
file_exists
(
$this
->
INIFile
)
&&
$this
->
systemConfig
;
}
/**
* Checks if given section is present in config
*
* @param string $section
* @return bool
*/
function
sectionFound
(
$section
)
{
return
array_key_exists
(
$section
,
$this
->
systemConfig
);
}
/**
* Returns formatted module name based on it's root folder
*
* @param string $module_folder
* @return string
*/
function
getModuleName
(
$module_folder
)
{
if
(
$module_folder
==
'kernel'
)
{
$module_folder
=
'in-portal'
;
}
return
implode
(
'-'
,
array_map
(
'ucfirst'
,
explode
(
'-'
,
$module_folder
)));
}
/**
* Creates module root category in "Home" category using given data and returns it
*
* @param string $name
* @param string $description
* @param string $category_template
* @param string $category_icon
* @return kDBItem
*/
function
&
createModuleCategory
(
$name
,
$description
,
$category_template
=
null
,
$category_icon
=
null
)
{
static
$fields
=
null
;
if
(!
isset
(
$fields
))
{
$ml_formatter
=&
$this
->
Application
->
recallObject
(
'kMultiLanguage'
);
$fields
[
'name'
]
=
$ml_formatter
->
LangFieldName
(
'Name'
);
$fields
[
'description'
]
=
$ml_formatter
->
LangFieldName
(
'Description'
);
}
$category
=&
$this
->
Application
->
recallObject
(
'c'
,
null
,
Array
(
'skip_autoload'
=>
true
));
/* @var $category kDBItem */
$category_fields
=
Array
(
$fields
[
'name'
]
=>
$name
,
'Filename'
=>
$name
,
'AutomaticFilename'
=>
1
,
$fields
[
'description'
]
=>
$description
,
'Status'
=>
$status
,
'Priority'
=>
-
9999
,
);
$category_fields
[
'ParentId'
]
=
$this
->
Application
->
findModule
(
'Name'
,
'Core'
,
'RootCat'
);
if
(
isset
(
$category_template
))
{
$category_fields
[
'Template'
]
=
$category_template
;
$category_fields
[
'CachedTemplate'
]
=
$category_template
;
}
if
(
isset
(
$category_icon
))
{
$category_fields
[
'UseMenuIconUrl'
]
=
1
;
$category_fields
[
'MenuIconUrl'
]
=
$category_icon
;
}
$category
->
Clear
();
$category
->
SetDBFieldsFromHash
(
$category_fields
);
$category
->
Create
();
$priority_helper
=&
$this
->
Application
->
recallObject
(
'PriorityHelper'
);
/* @var $priority_helper kPriorityHelper */
$event
=
new
kEvent
(
'c:OnListBuild'
);
// ensure, that newly created category has proper value in Priority field
$priority_helper
->
recalculatePriorities
(
$event
,
'ParentId = '
.
$category_fields
[
'ParentId'
]);
// update Priority field in object, becase "CategoriesItem::Update" method will be called
// from "kInstallToolkit::setModuleItemTemplate" and otherwise will set 0 to Priority field
$sql
=
'SELECT Priority
FROM '
.
$category
->
TableName
.
'
WHERE '
.
$category
->
IDField
.
' = '
.
$category
->
GetID
();
$category
->
SetDBField
(
'Priority'
,
$this
->
Conn
->
GetOne
(
$sql
));
return
$category
;
}
/**
* Sets category item template into custom field for given prefix
*
* @param kDBItem $category
* @param string $prefix
* @param string $item_template
*/
function
setModuleItemTemplate
(&
$category
,
$prefix
,
$item_template
)
{
$this
->
Application
->
removeObject
(
'c-cdata'
);
// recreate all fields, because custom fields are added during install script
$category
->
defineFields
();
$category
->
prepareConfigOptions
();
// creates ml fields
$category
->
SetDBField
(
'cust_'
.
$prefix
.
'_ItemTemplate'
,
$item_template
);
$category
->
Update
();
}
/**
* Link custom field records with search config records + create custom field columns
*
* @param string $module_folder
* @param int $item_type
*/
function
linkCustomFields
(
$module_folder
,
$prefix
,
$item_type
)
{
$module_folder
=
strtolower
(
$module_folder
);
$module_name
=
$module_folder
;
if
(
$module_folder
==
'kernel'
)
{
$module_name
=
'in-portal'
;
$module_folder
=
'core'
;
}
$db
=&
$this
->
Application
->
GetADODBConnection
();
$sql
=
'SELECT FieldName, CustomFieldId
FROM '
.
TABLE_PREFIX
.
'CustomField
WHERE Type = '
.
$item_type
.
' AND IsSystem = 0'
;
// config is not read here yet :( $this->Application->getUnitOption('p', 'ItemType');
$custom_fields
=
$db
->
GetCol
(
$sql
,
'CustomFieldId'
);
foreach
(
$custom_fields
as
$cf_id
=>
$cf_name
)
{
$sql
=
'UPDATE '
.
TABLE_PREFIX
.
'SearchConfig
SET CustomFieldId = '
.
$cf_id
.
'
WHERE (TableName = "CustomField") AND (LOWER(ModuleName) = "'
.
$module_name
.
'") AND (FieldName = '
.
$db
->
qstr
(
$cf_name
)
.
')'
;
$db
->
Query
(
$sql
);
}
$this
->
Application
->
refreshModuleInfo
();
// this module configs are now processed
// because of configs was read only from installed before modules (in-portal), then reread configs
$unit_config_reader
=&
$this
->
Application
->
recallObject
(
'kUnitConfigReader'
);
/* @var $unit_config_reader kUnitConfigReader */
$unit_config_reader
->
scanModules
(
MODULES_PATH
.
DIRECTORY_SEPARATOR
.
$module_folder
);
// create correct columns in CustomData table
$ml_helper
=&
$this
->
Application
->
recallObject
(
'kMultiLanguageHelper'
);
$ml_helper
->
createFields
(
$prefix
.
'-cdata'
,
true
);
}
/**
* Deletes cache, useful after separate module install and installator last step
*
*/
function
deleteCache
(
$refresh_permissions
=
false
)
{
$sql
=
'DELETE FROM '
.
TABLE_PREFIX
.
'Cache
WHERE VarName IN ("config_files", "configs_parsed", "sections_parsed", "cms_menu", "StructureTree")'
;
$this
->
Conn
->
Query
(
$sql
);
if
(
$refresh_permissions
)
{
if
(
$this
->
Application
->
ConfigValue
(
'QuickCategoryPermissionRebuild'
))
{
// refresh permission without progress bar
$updater
=&
$this
->
Application
->
recallObject
(
'kPermCacheUpdater'
);
/* @var $updater kPermCacheUpdater */
$updater
->
OneStepRun
();
}
else
{
// refresh permissions with ajax progress bar (when available)
$fields_hash
=
Array
(
'VarName'
=>
'ForcePermCacheUpdate'
,
'Data'
=>
1
,
);
$this
->
Conn
->
doInsert
(
$fields_hash
,
TABLE_PREFIX
.
'Cache'
);
}
}
}
/**
* Perform redirect after separate module install
*
* @param string $module_folder
* @param bool $refresh_permissions
*/
function
finalizeModuleInstall
(
$module_folder
,
$refresh_permissions
=
false
)
{
if
(!
$this
->
Application
->
GetVar
(
'redirect'
))
{
return
;
}
$this
->
SetModuleVersion
(
$module_folder
);
$this
->
deleteCache
(
$refresh_permissions
);
$url_params
=
Array
(
'pass'
=>
'm'
,
'admin'
=>
1
,
'RefreshTree'
=>
1
,
'index_file'
=>
'index.php'
,
);
$this
->
Application
->
Redirect
(
'modules/modules_list'
,
$url_params
);
}
/**
* Performs rebuild of themes
*
*/
function
rebuildThemes
()
{
$this
->
Application
->
HandleEvent
(
$themes_event
,
'adm:OnRebuildThemes'
);
}
/**
* Checks that file is writable by group or others
*
* @param string $file
* @return boolean
*/
function
checkWritePermissions
(
$file
)
{
if
(
DIRECTORY_SEPARATOR
==
'
\\
'
)
{
// windows doen't allow to check permissions (always returns true)
return
true
;
}
$permissions
=
fileperms
(
$file
);
return
$permissions
&
0x0010
||
$permissions
&
0x0002
;
}
}
Event Timeline
Log In to Comment