本文整理汇总了PHP中SPFactory::CmsHelper方法的典型用法代码示例。如果您正苦于以下问题:PHP SPFactory::CmsHelper方法的具体用法?PHP SPFactory::CmsHelper怎么用?PHP SPFactory::CmsHelper使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SPFactory
的用法示例。
在下文中一共展示了SPFactory::CmsHelper方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: install
public function install()
{
$id = $this->xGetString('id');
$name = $this->xGetString('name');
if (SPLoader::dirPath('usr.templates.' . $id) && !SPRequest::bool('force')) {
throw new SPException(SPLang::e('TEMPLATE_INST_DUPLICATE', $name) . ' ' . Sobi::Txt('FORCE_TPL_UPDATE', Sobi::Url(array('task' => 'extensions.install', 'force' => 1, 'root' => basename($this->root) . '/' . basename($this->xmlFile)))));
}
$requirements = $this->xGetChilds('requirements/*');
if ($requirements && $requirements instanceof DOMNodeList) {
SPFactory::Instance('services.installers.requirements')->check($requirements);
}
$language = $this->xGetChilds('language/file');
$folder = @$this->xGetChilds('language/@folder')->item(0)->nodeValue;
if ($language && $language instanceof DOMNodeList && $language->length) {
$langFiles = array();
foreach ($language as $file) {
$adm = false;
if ($file->attributes->getNamedItem('admin')) {
$adm = $file->attributes->getNamedItem('admin')->nodeValue == 'true' ? true : false;
}
$langFiles[$file->attributes->getNamedItem('lang')->nodeValue][] = array('path' => Sobi::FixPath("{$this->root}/{$folder}/" . trim($file->nodeValue)), 'name' => $file->nodeValue, 'adm' => $adm);
}
SPFactory::CmsHelper()->installLang($langFiles, false, true);
}
$path = SPLoader::dirPath('usr.templates.' . $id, 'front', false);
if (SPRequest::bool('force')) {
/** @var $from SPDirectory */
$from = SPFactory::Instance('base.fs.directory', $this->root);
$from->moveFiles($path);
} else {
if (!SPFs::move($this->root, $path)) {
throw new SPException(SPLang::e('CANNOT_MOVE_DIRECTORY', $this->root, $path));
}
}
if (!SPRequest::bool('force')) {
$section = $this->xGetChilds('install');
if ($section instanceof DOMNodeList && $section->length) {
$this->section($id);
}
}
//05 Oct 2015 Kishore
$exec = $this->xGetString('exec');
if ($exec && SPFs::exists($path . DS . $exec)) {
include_once "{$path}/{$exec}";
}
/** @var $dir SPDirectory */
$dir =& SPFactory::Instance('base.fs.directory', $path);
$zip = array_keys($dir->searchFile('.zip', false));
if (count($zip)) {
foreach ($zip as $file) {
SPFs::delete($file);
}
}
Sobi::Trigger('After', 'InstallTemplate', array($id));
$dir =& SPFactory::Instance('base.fs.directory', SPLoader::dirPath('tmp.install'));
$dir->deleteFiles();
return Sobi::Txt('TP.TEMPLATE_HAS_BEEN_INSTALLED', array('template' => $name));
}
示例2: check
/**
* @param DOMNodeList $requirements
* @throws SPException
* @return bool
*/
public function check($requirements)
{
if ($requirements && $requirements instanceof DOMNodeList) {
for ($i = 0; $i < $requirements->length; $i++) {
$reqVersion = null;
if ($requirements->item($i)->attributes->getNamedItem('version') && $requirements->item($i)->attributes->getNamedItem('version')->nodeValue) {
$reqVersion = $this->parseVer($requirements->item($i)->attributes->getNamedItem('version')->nodeValue);
}
switch ($requirements->item($i)->nodeName) {
case 'core':
if (!$this->compareVersion($reqVersion, SPFactory::CmsHelper()->myVersion())) {
throw new SPException(SPLang::e('CANNOT_INSTALL_EXT_CORE', implode('.', $reqVersion), implode('.', SPFactory::CmsHelper()->myVersion())));
}
break;
case 'cms':
$cms = SPFactory::CmsHelper()->cmsVersion($requirements->item($i)->nodeValue);
if (!is_array($cms)) {
throw new SPException(SPLang::e('CANNOT_INSTALL_EXT_REQU_CMS', $requirements->item($i)->nodeValue, implode('.', $reqVersion), $cms));
}
if (!$this->compareVersion($reqVersion, $cms)) {
throw new SPException(SPLang::e('CANNOT_INSTALL_EXT_REQ', $requirements->item($i)->nodeValue, implode('.', $reqVersion), implode('.', SPFactory::CmsHelper()->cmsVersion())));
}
break;
case 'field':
case 'plugin':
case 'application':
$version = $this->extension($requirements->item($i)->nodeValue, $requirements->item($i)->nodeName);
if (!$version) {
// "Cannot install extension. This extension requires %s %s version >= %s, But this %s is not installed."
if ($reqVersion) {
throw new SPException(SPLang::e('CANNOT_INSTALL_EXT_PLG', $requirements->item($i)->nodeName, $requirements->item($i)->nodeValue, implode('.', $reqVersion), $requirements->item($i)->nodeName));
} else {
throw new SPException(SPLang::e('CANNOT_INSTALL_EXT_PLG_NO_VERSION', $requirements->item($i)->nodeName, $requirements->item($i)->nodeValue, $requirements->item($i)->nodeName));
}
}
if (isset($reqVersion) && !$this->compareVersion($reqVersion, $version)) {
throw new SPException(SPLang::e('CANNOT_INSTALL_EXT_FIELD', $requirements->item($i)->nodeName, $requirements->item($i)->nodeValue, implode('.', $reqVersion), implode('.', $version)));
}
break;
case 'php':
$version = $this->phpReq($requirements->item($i));
$type = 'PHP';
if ($requirements->item($i)->attributes->getNamedItem('type') && $requirements->item($i)->attributes->getNamedItem('type')->nodeValue) {
$type = $requirements->item($i)->attributes->getNamedItem('type');
}
if (strlen($version) && isset($reqVersion)) {
if (isset($reqVersion) && !$this->compareVersion($reqVersion, $version)) {
throw new SPException(SPLang::e('CANNOT_INSTALL_EXT_FIELD', $type, $requirements->item($i)->nodeValue, implode('.', $reqVersion), implode('.', $version)));
}
} elseif ($version == false) {
throw new SPException(SPLang::e('CANNOT_INSTALL_EXT_MISSING', $type, $requirements->item($i)->nodeValue, implode('.', $reqVersion), implode('.', $version)));
}
break;
}
}
}
}
示例3: execute
public function execute()
{
$this->start = microtime(true);
$sites = $this->getSites();
$responses = array();
$status = 'working';
$message = null;
$this->format = SPRequest::bool('fullFormat') ? self::FORMAT_FULL : self::FORMAT;
// $this->format = SPRequest::bool( 'fullFormat' ) ? self::FORMAT_FULL : self::FORMAT_FULL;
$task = SPRequest::task();
if (in_array($task, array('crawler.init', 'crawler.restart'))) {
if ($task == 'crawler.restart') {
SPFactory::cache()->cleanSection(Sobi::Section());
}
SPFactory::db()->truncate(self::DB_TABLE);
$multiLang = Sobi::Cfg('lang.multimode', false);
if ($multiLang) {
$langs = SPFactory::CmsHelper()->getLanguages();
if ($multiLang && $langs) {
foreach ($langs as $lang) {
$responses[] = $this->getResponse(Sobi::Cfg('live_site') . 'index.php?option=com_sobipro&sid=' . Sobi::Section() . '&lang=' . $lang);
}
}
}
$responses[] = $this->getResponse(Sobi::Cfg('live_site') . 'index.php?option=com_sobipro&sid=' . Sobi::Section());
$sites = $this->getSites();
}
if (!count($sites) && !in_array($task, array('crawler.init', 'crawler.restart'))) {
$message = Sobi::Txt('CRAWL_URL_PARSED_DONE', SPFactory::db()->select('count(*)', self::DB_TABLE)->loadResult());
SPFactory::db()->truncate(self::DB_TABLE);
$this->response(array('status' => 'done', 'data' => array(), 'message' => $message));
}
if (count($sites)) {
$i = 0;
$timeLimit = SPRequest::int('timeLimit', self::TIME_LIMIT, 'get', true);
foreach ($sites as $site) {
if (!strlen($site)) {
continue;
}
$responses[] = $this->getResponse($site);
$i++;
if (microtime(true) - $this->start > $timeLimit) {
break;
}
}
$message = Sobi::Txt('CRAWL_URL_PARSED_WORKING', $i, count($sites));
}
$this->response(array('status' => $status, 'data' => $responses, 'message' => $message));
}
示例4: download
private function download()
{
// $file = SPLoader::path( 'tmp.info', 'front', false, 'txt' );
$cont = null;
$settings = array();
$settings['SobiPro'] = array('Version' => SPFactory::CmsHelper()->myVersion(true), 'Version_Num' => implode('.', SPFactory::CmsHelper()->myVersion()));
$file = SPLoader::path('tmp.info', 'front', false, 'txt');
// if ( SPFs::exists( $file ) ) {
// $cont = SPFs::read( $file );
// }
// $cont = explode( "\n", $cont );
// if ( count( $cont ) ) {
// foreach ( $cont as $line ) {
// if ( strstr( $line, '=' ) ) {
// $line = explode( "=", $line );
// $line[ 1 ] = explode( ';', $line[ 1 ] );
// $settings[ $line[ 0 ] ] = array( 'key' => $line[ 0 ], 'response' => $line[ 1 ][ 0 ], 'status' => $line[ 1 ][ 1 ] );
// }
// }
// }
$this->prepareStoredData($settings);
$settings['env'] = array('PHP_OS' => PHP_OS, 'php_uname' => php_uname(), 'PHP_VERSION_ID' => PHP_VERSION_ID);
$settings['ftp'] = $this->ftp();
$settings['curl'] = $this->curlFull();
$settings['exec']['response'] = $this->execResp();
$settings['SOBI_SETTINGS'] = SPFactory::config()->getSettings();
$c = SPFactory::db()->select('*', 'spdb_config')->loadObjectList();
$sections = SPFactory::db()->select(array('nid', 'id'), 'spdb_object', array('oType' => 'section'))->loadAssocList('id');
$as = array();
foreach ($c as $key) {
if ($key->section == 0 || !isset($sections[$key->section])) {
continue;
}
$key->section = $sections[$key->section]['nid'];
if (!isset($as[$key->section])) {
$as[$key->section] = array();
}
if (!isset($as[$key->section][$key->cSection])) {
$as[$key->section][$key->cSection] = array();
}
$_c = explode('_', $key->sKey);
if ($_c[count($_c) - 1] == 'array') {
$key->sValue = SPConfig::unserialize($key->sValue);
}
$as[$key->section][$key->cSection][$key->sKey] = $key->sValue;
}
$settings['SOBI_SETTINGS']['sections'] = $as;
$apps = SPFactory::db()->select('*', 'spdb_plugins')->loadObjectList();
foreach ($apps as $app) {
$settings['Apps'][$app->pid] = get_object_vars($app);
}
$settings['SOBI_SETTINGS']['mail']['smtphost'] = $settings['SOBI_SETTINGS']['mail']['smtphost'] ? 'SET' : 0;
$settings['SOBI_SETTINGS']['mail']['smtpuser'] = $settings['SOBI_SETTINGS']['mail']['smtpuser'] ? 'SET' : 0;
$settings['SOBI_SETTINGS']['mail']['smtppass'] = $settings['SOBI_SETTINGS']['mail']['smtppass'] ? 'SET' : 0;
$php = ini_get_all();
unset($php['extension_dir']);
unset($php['include_path']);
unset($php['mysql.default_user']);
unset($php['mysql.default_password']);
unset($php['mysqli.default_pw']);
unset($php['mysqli.default_user']);
unset($php['open_basedir']);
unset($php['pdo_mysql.default_socket']);
unset($php['sendmail_path']);
unset($php['session.name']);
unset($php['session.save_path']);
unset($php['soap.wsdl_cache_dir']);
unset($php['upload_tmp_dir']);
unset($php['doc_root']);
unset($php['docref_ext']);
unset($php['docref_root']);
unset($php['mysql.default_socket']);
$settings['PHP_SETTINGS'] = $php;
$php = get_loaded_extensions();
$settings['PHP_EXT'] = $php;
$out = SPFactory::Instance('types.array');
$data = $out->toXML($settings, 'settings');
$data = str_replace(array(SOBI_ROOT, '></'), array('REMOVED', '>0</'), $data);
$f = SPLang::nid($settings['SOBI_SETTINGS']['general']['site_name'] . '-' . date(DATE_RFC822));
SPFactory::mainframe()->cleanBuffer();
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
header("Content-type: application/xml");
header("Content-Disposition: attachment; filename=\"sobipro_system_{$f}.xml\"");
header('Content-Length: ' . strlen($data));
ob_clean();
flush();
echo $data;
exit;
}
示例5: execute
/**
*/
public function execute()
{
switch ($this->_task) {
case 'panel':
$this->getSections();
/** @var $view SPAdmPanelView */
$view = SPFactory::View('front', true)->assign($acl, 'acl')->assign($this->_sections, 'sections')->assign($this->getNews(), 'news')->assign(Sobi::GetUserState('sections.order', 'order', 'name.asc'), 'order')->assign(SPFactory::CmsHelper()->myVersion(true), 'version')->assign(Sobi::Cfg('cpanel.show_entries', false), 'show-entries')->assign($this->getState(), 'system-state');
if (Sobi::Cfg('cpanel.show_entries', false)) {
$view->assign($this->getEntries(), 'entries');
}
SPLang::load('com_sobipro.about');
$view->determineTemplate('front', 'cpanel');
Sobi::Trigger('Panel', 'View', array(&$view));
$view->display();
break;
default:
/* case plugin didn't registered this task, it was an error */
if (!parent::execute()) {
Sobi::Error($this->name(), SPLang::e('SUCH_TASK_NOT_FOUND', SPRequest::task()), SPC::NOTICE, 404, __LINE__, __FILE__);
}
break;
}
}
示例6: templatesList
public function templatesList($params = null)
{
$cms = SPFactory::CmsHelper()->templatesPath();
$dir = new SPDirectoryIterator(SPLoader::dirPath('usr.templates'));
$templates = array();
foreach ($dir as $file) {
if ($file->isDir()) {
if ($file->isDot() || in_array($file->getFilename(), array('common', 'front'))) {
continue;
}
if (SPFs::exists($file->getPathname() . DS . 'template.xml') && ($tname = $this->templateName($file->getPathname() . DS . 'template.xml'))) {
$templates[$file->getFilename()] = $tname;
} else {
$templates[$file->getFilename()] = $file->getFilename();
}
}
}
if (is_array($cms) && isset($cms['name']) && isset($cms['data']) && is_array($cms['data']) && count($cms['data'])) {
$templates[$cms['name']] = array();
foreach ($cms['data'] as $name => $path) {
$templates[$cms['name']][$name] = array();
$dir = new SPDirectoryIterator($path);
foreach ($dir as $file) {
if ($file->isDot()) {
continue;
}
$fpath = 'cms:' . str_replace(SOBI_ROOT . DS, null, $file->getPathname());
$fpath = str_replace(DS, '.', $fpath);
if (SPFs::exists($file->getPathname() . DS . 'template.xml') && ($tname = $this->templateName($file->getPathname() . DS . 'template.xml'))) {
$templates[$cms['name']][$name][$fpath] = $tname;
} else {
$templates[$cms['name']][$name][$fpath] = $file->getFilename();
}
}
}
}
if ($params) {
$p = array('select', 'spcfg_' . $params[1], $templates, Sobi::Cfg('section.template', SPC::DEFAULT_TEMPLATE), false, $params[3]);
} else {
$p = $templates;
}
return $p;
}
示例7: listTemplates
protected function listTemplates($tpl = null, $cmsOv = true)
{
SPFactory::header()->addJsFile('dtree')->addCssFile('dtree', true);
SPLoader::loadClass('base.fs.directory_iterator');
$ls = Sobi::Cfg('live_site') . 'media/sobipro/tree';
$nodes = null;
$count = 0;
$tpl = Sobi::FixPath($tpl ? $tpl : SPLoader::dirPath('usr.templates'));
if (Sobi::Section()) {
$realName = Sobi::Txt('TP.INFO');
$iTask = Sobi::Url(array('task' => 'template.info', 'template' => basename($tpl), 'sid' => Sobi::Section()));
$nodes .= "spTpl.add( -123, 0,'{$realName}','{$iTask}', '', '', '{$ls}/info.png' );\n";
if (file_exists("{$tpl}/config.xml")) {
$realName = Sobi::Txt('TP.SETTINGS');
$iTask = Sobi::Url(array('task' => 'template.settings', 'template' => basename($tpl), 'sid' => Sobi::Section()));
$nodes .= "spTpl.add( -120, 0,'{$realName}','{$iTask}', '', '', '{$ls}/settings.png' );\n";
}
}
$this->travelTpl(new SPDirectoryIterator($tpl), $nodes, 0, $count);
if ($cmsOv) {
$cms = SPFactory::CmsHelper()->templatesPath();
if (is_array($cms) && isset($cms['name']) && isset($cms['data']) && is_array($cms['data']) && count($cms['data'])) {
$count++;
if (isset($cms['icon'])) {
$nodes .= "spTpl.add( {$count}, 0, '{$cms['name']}', '', '', '', '{$cms['icon']}', '{$cms['icon']}' );\n";
} else {
$nodes .= "spTpl.add( {$count}, 0, '{$cms['name']}' );\n";
}
$current = $count;
foreach ($cms['data'] as $name => $path) {
$count++;
$nodes .= "spTpl.add( {$count}, {$current},'{$name}' );\n";
$this->travelTpl(new SPDirectoryIterator($path), $nodes, $count, $count, true);
}
}
}
if (Sobi::Section()) {
$file = SPLoader::path('usr.templates.' . Sobi::Cfg('section.template', SPC::DEFAULT_TEMPLATE) . '.template', 'front', true, 'xml');
$def = new DOMDocument();
$def->load($file);
$xdef = new DOMXPath($def);
$t = $xdef->query('/template/name')->item(0)->nodeValue;
} else {
$t = Sobi::Txt('GB.TEMPLATES');
}
SPFactory::header()->addJsCode("\n\t\t\ticons = {\n\t\t\t\t\t\troot : '{$ls}/base.gif',\n\t\t\t\t\t\tfolder : '{$ls}/folder.gif',\n\t\t\t\t\t\tfolderOpen : '{$ls}/folderopen.gif',\n\t\t\t\t\t\tnode : '{$ls}/page.gif',\n\t\t\t\t\t\tempty : '{$ls}/empty.gif',\n\t\t\t\t\t\tline : '{$ls}/line.gif',\n\t\t\t\t\t\tjoin : '{$ls}/join.gif',\n\t\t\t\t\t\tjoinBottom : '{$ls}/joinbottom.gif',\n\t\t\t\t\t\tplus : '{$ls}/plus.gif',\n\t\t\t\t\t\tplusBottom : '{$ls}/plusbottom.gif',\n\t\t\t\t\t\tminus : '{$ls}/minus.gif',\n\t\t\t\t\t\tminusBottom\t: '{$ls}/minusbottom.gif',\n\t\t\t\t\t\tnlPlus : '{$ls}/nolines_plus.gif',\n\t\t\t\t\t\tnlMinus : '{$ls}/nolines_minus.gif'\n\t\t\t};\n\t\t\tvar spTpl = new dTree( 'spTpl', icons );\t\n\n\t\t\tSobiPro.jQuery( document ).ready( function ()\n\t\t\t{\n\t\t\t\tspTpl.add(0, -1, '{$t}' );\n\n\t\t\t\t{$nodes} \n\n\t\t\t\ttry { document.getElementById( 'spTpl' ).innerHTML = spTpl } catch( e ) {}\n\t\t\t} );\n\t\t");
/** for some reason jQuery is not able to add the tree */
return "<div id=\"spTpl\"></div>";
}
示例8: editForm
//.........这里部分代码省略.........
}
$revisionChange = false;
$rev = SPRequest::cmd('revision');
$revisionsDelta = array();
if ($rev) {
$revision = SPFactory::message()->getRevision(SPRequest::cmd('revision'));
if (isset($revision['changes']) && count($revision['changes'])) {
SPFactory::message()->warning(Sobi::Txt('HISTORY_REVISION_WARNING', $revision['changedAt']), false);
foreach ($fields as $i => $field) {
if ($field->get('enabled') && $field->enabled('form')) {
if (isset($revision['changes']['fields'][$field->get('nid')])) {
$revisionData = $revision['changes']['fields'][$field->get('nid')];
} else {
$revisionData = null;
}
$currentData = $field->getRaw();
if (is_array($revisionData) && !is_array($currentData)) {
try {
$currentData = SPConfig::unserialize($currentData);
} catch (SPException $x) {
}
}
if ($revisionData || $currentData) {
if (md5(serialize($currentData)) != md5(serialize($revisionData))) {
$field->revisionChanged()->setRawData($revisionData);
}
}
$fields[$i] = $field;
}
}
unset($revision['changes']['fields']);
foreach ($revision['changes'] as $attr => $value) {
if ($value != $this->_model->get($attr)) {
$revisionsDelta[$attr] = $value;
$this->_model->setRevData($attr, $value);
}
}
$revisionChange = true;
} else {
SPFactory::message()->error(Sobi::Txt('HISTORY_REVISION_NOT_FOUND'), false)->setSystemMessage();
}
}
$f = array();
foreach ($fields as $field) {
if ($field->get('enabled') && $field->enabled('form')) {
$f[] = $field;
}
}
/* create the validation script to check if required fields are filled in and the filters, if any, match */
$this->createValidationScript($fields);
$view->assign($this->_model, 'entry');
/* get the categories */
$cats = $this->_model->getCategories(true);
if (count($cats)) {
$tCats = array();
foreach ($cats as $cid) {
/* ROTFL ... damn I like arrays ;-) */
$tCats2 = SPFactory::config()->getParentPath($cid, true);
if (is_array($tCats2) && count($tCats2)) {
$tCats[] = implode(Sobi::Cfg('string.path_separator'), $tCats2);
}
}
if (count($tCats)) {
$view->assign(implode("\n", $tCats), 'parent_path');
}
$view->assign(implode(", ", $cats), 'parents');
} elseif ($this->_model->get('valid')) {
$parent = $sid == Sobi::Reg('current_section') ? 0 : $sid;
if ($parent) {
$view->assign(implode(Sobi::Cfg('string.path_separator', ' > '), SPFactory::config()->getParentPath($parent, true)), 'parent_path');
}
$view->assign($parent, 'parents');
} else {
$n = null;
$view->assign($n, 'parents');
$view->assign($n, 'parent_path');
}
$history = array();
$messages = SPFactory::message()->getHistory($id);
if (count($messages)) {
foreach ($messages as $message) {
$message['change'] = Sobi::Txt('HISTORY_CHANGE_TYPE_' . str_replace('-', '_', strtoupper($message['change'])));
$message['site'] = Sobi::Txt('HISTORY_CHANGE_AREA_' . strtoupper($message['site']));
if (strlen($message['reason'])) {
$message['status'] = 1;
} else {
$message['status'] = 0;
}
$history[] = $message;
}
}
$versioningAdminBehaviour = Sobi::Cfg('entry.versioningAdminBehaviour', 1);
if ($versioningAdminBehaviour || !Sobi::Cfg('entry.versioning', true)) {
SPFactory::header()->addJsCode('
SobiPro.jQuery( document ).ready( function () { SobiPro.jQuery( "[rel=\'entry.saveWithRevision\']" ).parent().css( "display", "none" ); } );
');
}
$view->assign($this->_task, 'task')->assign($f, 'fields')->assign($id, 'id')->assign($history, 'history')->assign($revisionChange, 'revision-change')->assign($revisionsDelta, 'revision')->assign($versioningAdminBehaviour, 'history-behaviour')->assign(SPFactory::CmsHelper()->userSelect('entry.owner', $this->_model->get('owner') ? $this->_model->get('owner') : ($this->_model->get('id') ? 0 : Sobi::My('id')), true), 'owner')->assign(Sobi::Reg('current_section'), 'sid')->determineTemplate('entry', 'edit')->addHidden($rev, 'revision')->addHidden($sid, 'pid');
$view->display();
}
示例9: install
private function install($file = null)
{
$arch = SPFactory::Instance('base.fs.archive');
$ajax = strlen(SPRequest::cmd('ident', null, 'post'));
if (!$file && SPRequest::string('root')) {
$file = str_replace('.xml', null, SPRequest::string('root'));
$file = SPLoader::path('tmp.install.' . $file, 'front', true, 'xml');
}
if (!$file) {
$ident = SPRequest::cmd('ident', null, 'post');
$data = SPRequest::file($ident);
$name = str_replace(array('.' . SPFs::getExt($data['name']), '.'), null, $data['name']);
$path = SPLoader::dirPath('tmp.install.' . $name, 'front', false);
$c = 0;
while (SPFs::exists($path)) {
$path = SPLoader::dirPath('tmp.install.' . $name . '_' . ++$c, 'front', false);
}
/*
* temp directory - will be removed later but it needs to be writable for apache and Joomla! fs (FTP mode)
*/
try {
if (Sobi::Cfg('ftp_mode')) {
SPFs::mkdir($path, 0777);
} else {
SPFs::mkdir($path);
}
} catch (SPException $x) {
return $this->ajaxResponse($ajax, $x->getMessage(), false, SPC::ERROR_MSG);
}
$file = $path . '/' . $data['name'];
try {
$arch->upload($data['tmp_name'], $file);
} catch (SPException $x) {
return $this->ajaxResponse($ajax, $x->getMessage(), false, SPC::ERROR_MSG);
}
} elseif (SPRequest::string('root') && $file) {
$path = dirname($file);
} else {
$arch->setFile($file);
$name = str_replace(array('.' . SPFs::getExt($file), '.'), null, basename($file));
$path = SPLoader::dirPath('tmp.install.' . $name, 'front', false);
$c = 0;
while (SPFs::exists($path)) {
$path = SPLoader::dirPath('tmp.install.' . $name . '_' . ++$c, 'front', false);
}
/*
* temp directory - will be removed later but it needs to writable for apache and Joomla! fs (FTP mode)
*/
try {
if (Sobi::Cfg('ftp_mode')) {
SPFs::mkdir($path, 0777);
} else {
SPFs::mkdir($path);
}
} catch (SPException $x) {
return $this->ajaxResponse($ajax, $x->getMessage(), false, SPC::ERROR_MSG);
}
}
if ($path) {
if (!SPRequest::string('root')) {
if (!$arch->extract($path)) {
return $this->ajaxResponse($ajax, SPLang::e('CANNOT_EXTRACT_ARCHIVE', basename($file), $path), false, SPC::ERROR_MSG);
}
}
$dir =& SPFactory::Instance('base.fs.directory', $path);
$xml = array_keys($dir->searchFile('.xml', false, 2));
if (!count($xml)) {
return $this->ajaxResponse($ajax, SPLang::e('NO_INSTALL_FILE_IN_PACKAGE'), false, SPC::ERROR_MSG);
}
$definition = $this->searchInstallFile($xml);
if (!$definition) {
if (SPFactory::CmsHelper()->installerFile($xml)) {
try {
$message = SPFactory::CmsHelper()->install($xml, $path);
return $this->ajaxResponse($ajax, $message['msg'], $ajax, $message['msgtype']);
} catch (SPException $x) {
return $this->ajaxResponse($ajax, $x->getMessage(), $ajax, SPC::ERROR_MSG);
}
} else {
return $this->ajaxResponse($ajax, SPLang::e('NO_INSTALL_FILE_IN_PACKAGE'), false, SPC::ERROR_MSG);
}
}
/** @var $installer SPInstaller */
$installer =& SPFactory::Instance('services.installers.' . trim(strtolower($definition->documentElement->tagName)), $xml[0], trim($definition->documentElement->tagName));
try {
$installer->validate();
$msg = $installer->install();
return $this->ajaxResponse($ajax, $msg, true, SPC::SUCCESS_MSG);
} catch (SPException $x) {
return $this->ajaxResponse($ajax, $x->getMessage(), false, SPC::ERROR_MSG);
}
} else {
return $this->ajaxResponse($ajax, SPLang::e('NO_FILE_HAS_BEEN_UPLOADED'), false, SPC::ERROR_MSG);
}
}
示例10: languages
public function languages()
{
$subMenu = array();
if (Sobi::Cfg('lang.multimode', false)) {
$availableLanguages = SPFactory::CmsHelper()->availableLanguages();
$sectionLength = 30;
if (count($availableLanguages)) {
$sid = SPRequest::sid();
if (!$sid) {
$sid = Sobi::Section();
}
$subMenu = array();
$task = SPRequest::task();
$url = array('sid' => $sid, 'task' => $task, 'sp-language' => null);
if ($task == 'field.edit') {
$url = array('sid' => $sid, 'task' => $task, 'fid' => SPRequest::int('fid'), 'sp-language' => null);
}
foreach ($availableLanguages as $language) {
$url['sp-language'] = $language['tag'];
$subMenu[] = array('type' => 'url', 'task' => '', 'url' => $url, 'label' => strlen($language['name']) < $sectionLength ? $language['name'] : substr($language['name'], 0, $sectionLength - 3) . ' ...', 'icon' => 'file', 'element' => 'button', 'selected' => $language['tag'] == Sobi::Lang());
}
}
}
return $subMenu;
}
示例11: editForm
/**
*/
private function editForm()
{
/* if adding new */
if (!$this->_model || $this->_task == 'add') {
$this->setModel(SPLoader::loadModel('category'));
}
$this->checkTranslation();
$this->_model->formatDatesToEdit();
$id = $this->_model->get('id');
if (!$id) {
$this->_model->set('state', 1);
$this->_model->set('parent', SPRequest::sid());
}
if ($this->_model->isCheckedOut()) {
SPFactory::message()->error(Sobi::Txt('CAT.IS_CHECKED_OUT'), false);
} else {
$this->_model->checkOut();
}
$view = SPFactory::View('category', true);
$view->assign($this->_model, 'category')->assign($this->_task, 'task')->assign(SPFactory::CmsHelper()->userSelect('category.owner', $this->_model->get('owner') ? $this->_model->get('owner') : ($this->_model->get('id') ? 0 : Sobi::My('id')), true), 'owner')->assign($id, 'cid')->addHidden(Sobi::Section(), 'pid');
Sobi::Trigger('Category', 'EditView', array(&$view));
$view->display();
}
示例12: install
public function install()
{
$log = array();
$type = strlen($this->xGetString('type')) ? $this->xGetString('type') : ($this->xGetString('fieldType') ? 'field' : null);
$id = $this->xGetString('id');
if ($this->installed($id, $type)) {
SPFactory::db()->delete('spdb_plugins', array('pid' => $id, 'type' => $type));
}
Sobi::Trigger('Before', 'InstallPlugin', array($id));
$requirements = $this->xGetChilds('requirements/*');
if ($requirements && $requirements instanceof DOMNodeList) {
$reqCheck =& SPFactory::Instance('services.installers.requirements');
$reqCheck->check($requirements);
}
$permissions = $this->xGetChilds('permissions/*');
if ($permissions && $permissions instanceof DOMNodeList) {
$permsCtrl =& SPFactory::Instance('ctrl.adm.acl');
for ($i = 0; $i < $permissions->length; $i++) {
$perm = explode('.', $permissions->item($i)->nodeValue);
$permsCtrl->addPermission($perm[0], $perm[1], $perm[2]);
$log['permissions'][] = $permissions->item($i)->nodeValue;
}
}
$actions = $this->xGetChilds('actions/*');
if ($actions && $actions instanceof DOMNodeList) {
$log['actions'] = $this->actions($actions, $id);
}
$dir = SPLoader::dirPath('etc.installed.' . $type . 's', 'front', false);
if (!SPFs::exists($dir)) {
SPFs::mkdir($dir);
SPFs::mkdir("{$dir}/{$id}/backup");
}
$files = $this->xGetChilds('files');
$date = str_replace(array(':', ' '), array('-', '_'), SPFactory::config()->date(time()));
if ($files && $files instanceof DOMNodeList && $files->length) {
$log['files'] = $this->files($files, $id, "{$dir}/{$id}/backup/{$date}");
if (count($log['files'])) {
foreach ($log['files'] as $i => $f) {
$log['files'][$i] = str_replace(SOBI_ROOT, null, $f);
}
}
}
$languages = $this->xGetChilds('language');
if ($languages->length) {
$langFiles = array();
foreach ($languages as $language) {
$folder = $language->attributes->getNamedItem('folder')->nodeValue;
foreach ($language->childNodes as $file) {
$adm = false;
if (strstr($file->nodeName, '#')) {
continue;
}
if ($file->attributes->getNamedItem('admin')) {
$adm = $file->attributes->getNamedItem('admin')->nodeValue == 'true' ? true : false;
}
$langFiles[$file->attributes->getNamedItem('lang')->nodeValue][] = array('path' => Sobi::FixPath("{$this->root}/{$folder}/" . trim($file->nodeValue)), 'name' => $file->nodeValue, 'adm' => $adm);
}
}
$log['files']['created'] = array_merge($log['files']['created'], SPFactory::CmsHelper()->installLang($langFiles, false));
}
$sql = $this->xGetString('sql');
if ($sql && SPFs::exists("{$this->root}/{$sql}")) {
try {
$log['sql'] = SPFactory::db()->loadFile("{$this->root}/{$sql}");
} catch (SPException $x) {
Sobi::Error('installer', SPLang::e('CANNOT_EXECUTE_QUERIES', $x->getMessage()), SPC::WARNING, 500, __LINE__, __FILE__);
return false;
}
}
if (!strlen($this->xGetString('type')) && strlen($this->xGetString('fieldType'))) {
$log['field'] = $this->field();
}
$exec = $this->xGetString('exec');
if ($exec && SPFs::exists("{$this->root}/{$exec}")) {
include_once "{$this->root}/{$exec}";
}
$this->plugin($id, $type);
$this->log($log);
$this->definition->formatOutput = true;
$this->definition->preserveWhiteSpace = false;
$this->definition->normalizeDocument();
$path = "{$dir}/{$id}.xml";
$file = SPFactory::Instance('base.fs.file', $path);
// $file->content( $this->definition->saveXML() );
// why the hell DOM cannot format it right. Try this
$outXML = $this->definition->saveXML();
$xml = new DOMDocument();
$xml->preserveWhiteSpace = false;
$xml->formatOutput = true;
$xml->loadXML($outXML);
$file->content($xml->saveXML());
$file->save();
switch ($type) {
case 'SobiProApp':
$type = 'plugin';
default:
case 'update':
case 'plugin':
case 'field':
$t = Sobi::Txt('EX.' . strtoupper($type) . '_TYPE');
//.........这里部分代码省略.........
示例13: checkTranslation
protected function checkTranslation()
{
$lang = SPRequest::cmd('sp-language', false, 'get');
if ($lang && $lang != Sobi::DefLang()) {
$languages = SPFactory::CmsHelper()->availableLanguages();
SPFactory::message()->info(Sobi::Txt('INFO_DIFFERENT_LANGUAGE', $this->_type, $languages[$lang]['name']), false);
}
}