I’ve been having this problem for the past couple of days. I’m not sure if its a server setting issue or a file issue.
When I go to install an add-on, I get a SyntaxError.
I’m also not able to update Twigmo.
Stack trace:
#0 /home/derbysma/public_html/app/Tygh/Less.php(87): lessc->parse(‘’)
#1 /home/derbysma/public_html/app/Tygh/Themes/Themes.php(450): Tygh\Less->customCompile(‘’, ‘/home/derbysma/…’, Array, ‘’, ‘C’)
#2 /home/derbysma/public_html/app/Tygh/Themes/Themes.php(136): Tygh\Themes\Themes->convertChunkToCss(‘’, ‘/home/derbysma/…’)
#3 /home/derbysma/public_html/app/functions/fn.addons.php(771): Tygh\Themes\Themes->convertAddonToCss(‘hw_size_guide’)
#4 /home/derbysma/public_html/app/functions/fn.addons.php(340): fn_update_addon_status(‘hw_size_guide’, ‘A’, false)
#5 /home/derbysma/public_html/app/controllers/backend/addons.php(217): fn_install_addon(‘hw_size_guide’)
#6 /home/derbysma/public_html/app/functions/fn.control.php(574): include(‘/home/derbysma/…’)
#7 /home/derbysma/public_html/app/functions/fn.control.php(357): fn_run_controller(‘/home/derbysma/…’, ‘addons’, in /home/derbysma/public_html/app/lib/other/lessphp/lessc.inc.php on line 2080
Stack trace:
#0 /home/derbysma/public_html/app/Tygh/Less.php(87): lessc->parse(‘’)
/public_html/app/Tygh/Less.php[i]```php
// Apply all Custom styles styles
if ($area == ‘C’) {
$less_output .= Styles::factory(fn_get_theme_path(‘[theme]’, $area))->getLess($data);
// Inject Bootstrap fluid variables
$less_output .= self::getLayoutStyleVariables();
}
if (!empty($prepend_prefix)) {
$less_output = $prepend_prefix . " {\n" . $less_output . “\n}”;
}
LINE 87=====> $output = $this->parse($less_output);
// Remove “body” definition
if (!empty($prepend_prefix)) {
$output = str_replace($prepend_prefix . ’ body’, $prepend_prefix, $output);
}
return Less::parseUrls($output, $dirname, fn_get_theme_path(‘[themes]/[theme]/media’));
}
/**
* Gets data from layout to pass it to LESS
* @param string $layout_data layout data
* @return string LESS code
*/
[i]
<br />
[b]#1 /####/####/public_html/app/Tygh/Themes/Themes.php(450): Tygh\Less->customCompile('', '/####/####/...', Array, '', 'C')[/b]<br />
[u]app/Tygh/Themes/Themes.php[/u]```php
<br />
/**<br />
* Compile chunk of LESS output and save the result in the file<br />
*<br />
* @param string $less_output Chunk of LESS output<br />
* @param string $css_path The path where the precompiled LESS will be saved<br />
*<br />
* @return boolean Result<br />
*/<br />
protected function convertChunkToCss($less_output, $css_path)<br />
{<br />
$less = $this->getLess();<br />
$less_reflection = $this->getLessReflection();<br />
$less->setImportDir($less_reflection['import_dirs']);<br />
Registry::set('runtime.layout', Layout::instance()->getDefault($this->theme_name));<br />
$from_path = Storage::instance('statics')->getAbsolutePath($this->relative_path . '/css');<br />
LINE 450----> $compiled_less = $less->customCompile($less_output, $from_path, array(), '', 'C');<br />
$res = fn_put_contents($css_path . '/' . self::$compiled_less_filename, $compiled_less);<br />
if ($res === false) {<br />
return false;<br />
}<br />
return true;<br />
}<br />
/**<br />
* Remove LESS files<br />
*<br />
* @param string $from The directory the LESS files are removed from<br />
* @param string $backup_dir Backup directory<br />
* @param array $exclude The list of directories to skip while removing<br />
*<br />
* @return boolean Result<br />
*/<br />
```<br />
<br />
[b]#2 /####/####/public_html/app/Tygh/Themes/Themes.php(136): Tygh\Themes\Themes->convertChunkToCss('', '/home/derbysma/...')[/b]<br />
[u]/app/Tygh/Themes/Themes.php[/u]<br />
```php
<br />
if ($_temporary_restore_less) {<br />
$exclude = array(<br />
'addons', self::$less_backup_dirname, self::$css_backup_dirname<br />
);<br />
$this->removeLessFiles($this->theme_path . '/css', null, $exclude);<br />
$manifest['converted_to_css'] = true;<br />
$this->saveManifest();<br />
}<br />
$addon_css_path = $this->theme_path . '/css/addons/' . $addon;<br />
$addon_less_backup_path = $this->theme_path . '/css/' . self::$less_backup_dirname . '/addons/' . $addon;<br />
if (!(<br />
LINE 136=====> $this->convertChunkToCss($addon_less_output, $addon_css_path)<br />
&& $this->removeLessFiles($addon_css_path, $addon_less_backup_path)<br />
)) {<br />
return false;<br />
}<br />
return true;<br />
}<br />
```<br />
<br />
[b]#3 /####/####/public_html/app/functions/fn.addons.php(771): Tygh\Themes\Themes->convertAddonToCss('hw_size_guide')[/b]<br />
[u]/app/functions/fn.addons.php[/u]<br />
```php
<br />
// Clean cache<br />
fn_clear_cache();<br />
if ($status == 'A') {<br />
foreach (fn_get_installed_themes() as $theme_name) {<br />
$theme = Themes::factory($theme_name);<br />
$theme_manifest = $theme->getManifest();<br />
// Precompile addon LESS files if the theme has been converted to CSS<br />
LINE 771=====> if (!empty($theme_manifest['converted_to_css']) && !$theme->convertAddonToCss($addon)) {<br />
fn_update_addon_status($addon, 'D', $show_notification, $on_install);<br />
return $old_status;<br />
}<br />
}<br />
}<br />
return true;<br />
}<br />
/**<br />
* Returns addon's version<br />
* @param string $addon Addon name to return version for<br />
* @return string Addon's version<br />
*/<br />
```<br />
<br />
<br />
[b]#4 /####/####/public_html/app/functions/fn.addons.php(340): fn_update_addon_status('hw_size_guide', 'A', false)[/b]<br />
[u]app/functions/fn.addons.php[/u]<br />
```php
<br />
// If we need to activate addon after install, call "update status" procedure<br />
if ($addon_scheme->getStatus() != 'D') {<br />
LINE 340====> fn_update_addon_status($addon, $addon_scheme->getStatus(), false);<br />
}<br />
if (file_exists(Registry::get('config.dir.addons') . $addon . '/layouts.xml')) {<br />
if (fn_allowed_for('ULTIMATE')) {<br />
foreach (fn_get_all_companies_ids() as $company) {<br />
$layouts = Layout::instance($company)->getList();<br />
foreach ($layouts as $layout_id => $layout) {<br />
Exim::instance($company, $layout_id)->importFromFile(Registry::get('config.dir.addons') . $addon . '/layouts.xml');<br />
}<br />
}<br />
} else {<br />
$layouts = Layout::instance()->getList();<br />
foreach ($layouts as $layout_id => $layout) {<br />
Exim::instance(0, $layout_id)->importFromFile(Registry::get('config.dir.addons') . $addon . '/layouts.xml');<br />
}<br />
}<br />
}<br />
// Clean cache<br />
```<br />
<br />
<br />
[b]#5 /####/####/public_html/app/controllers/backend/addons.php(217): fn_install_addon('hw_size_guide')[/b]<br />
[u]app/controllers/backend/addons.php[/u]<br />
```php
<br />
} elseif ($mode == 'install') {<br />
fn_install_addon($_REQUEST['addon']);<br />
return array(CONTROLLER_STATUS_OK, "addons.manage");<br />
} elseif ($mode == 'uninstall') {<br />
fn_uninstall_addon($_REQUEST['addon']);<br />
return array(CONTROLLER_STATUS_OK, "addons.manage");<br />
LINE 227=====> } elseif ($mode == 'update_status') {<br />
$is_snapshot_correct = fn_check_addon_snapshot($_REQUEST['id']);<br />
if (!$is_snapshot_correct) {<br />
$status = false;<br />
} else {<br />
$status = fn_update_addon_status($_REQUEST['id'], $_REQUEST['status']);<br />
}<br />
if ($status !== true) {<br />
Registry::get('ajax')->assign('return_status', $status);<br />
}<br />
exit;<br />
} elseif ($mode == 'manage') {<br />
$params = $_REQUEST;<br />
$params['for_company'] = (bool) Registry::get('runtime.company_id');<br />
list($addons, $search) = fn_get_addons($params);<br />
Registry::get('view')->assign('search', $search);<br />
Registry::get('view')->assign('addons_list', $addons);<br />
}<br />
```<br />
<br />
[b]#6 /####/####/public_html/app/functions/fn.control.php(574): include('/####/####/...')[/b]<br />
[u]/app/functions/fn.control.php[/u]<br />
<br />
```php
<br />
/**<br />
* Runs specified controller by including its file<br />
*<br />
* @param string $path path to controller<br />
* @return array controller return status<br />
*/<br />
function fn_run_controller($path, $controller, $mode, $action, $dispatch_extra)<br />
{<br />
static $check_included = array();<br />
$auth = & $_SESSION['auth'];<br />
LINE 574====> //TODO Remove in 3.2.1<br />
$ajax = new Tygh\SmartyEngine\ViewDeprecated('ajax');<br />
$view = new Tygh\SmartyEngine\ViewDeprecated('view');<br />
if (!empty($check_included[$path])) {<br />
$code = fn_get_contents($path);<br />
$code = str_replace(array('function fn', '<?php', '?>'), array('function _fn', '', ''), $code);<br />
return eval($code);<br />
} else {<br />
$check_included[$path] = true;<br />
return include($path);<br />
}<br />
}<br />
/**<br />
* Generates list of core (pre/post)controllers<br />
*<br />
* @param string $controller controller name<br />
* @param string $type controller type (pre/post)<br />
* @return array controllers list<br />
*/<br />
```<br />
<br />
[b]#7 /####/####/public_html/app/functions/fn.control.php(357): fn_run_controller('/####/####/...', 'addons', in /####/####/public_html/app/lib/other/lessphp/lessc.inc.php on line 2080[/b]<br />
[u]/app/functions/fn.control.php[/u]<br />
```php
<br />
$view = Registry::get('view');<br />
if ($view->templateExists('views/' . $controller . '/' . $tpl)) { // try to find template in base views<br />
$view->assign('content_tpl', 'views/' . $controller . '/' . $tpl);<br />
} elseif (defined('LOADED_ADDON_PATH') && $view->templateExists('addons/' . LOADED_ADDON_PATH . '/views/' . $controller . '/' . $tpl)) { // try to find template in addon views<br />
$view->assign('content_tpl', 'addons/' . LOADED_ADDON_PATH . '/views/' . $controller . '/' . $tpl);<br />
} elseif (!empty($addons)) { // try to find template in addon views that extend base views<br />
foreach ($addons as $addon => $_v) {<br />
if ($view->templateExists('addons/' . $addon . '/views/' . $controller . '/' . $tpl)) {<br />
$view->assign('content_tpl', 'addons/' . $addon . '/views/' . $controller . '/' . $tpl);<br />
break;<br />
}<br />
}<br />
LINE 357===> }<br />
/**<br />
* Performs actions after template assignment and before controller run<br />
*<br />
* @param string $controller controller name<br />
* @param string $mode controller mode name<br />
* @param string $area current working area<br />
* @param array $controllers_cascade list of controllers to run<br />
*/<br />
```<br />
[u]/app/lib/other/lessphp/lessc.inc.php[/u]<br />
```php
<br />
// This is deprecated<br />
public function parse($str = null, $initialVariables = null)<br />
{<br />
if (is_array($str)) {<br />
$initialVariables = $str;<br />
$str = null;<br />
}<br />
<br />
$oldVars = $this->registeredVars;<br />
if ($initialVariables !== null) {<br />
$this->setVariables($initialVariables);<br />
}<br />
<br />
if ($str == null) {<br />
if (empty($this->_parseFile)) {<br />
LINE 2080========> throw new exception("nothing to parse");<br />
}<br />
<br />
$out = $this->compileFile($this->_parseFile);<br />
} else {<br />
$out = $this->compile($str);<br />
}<br />
<br />
$this->registeredVars = $oldVars;<br />
<br />
return $out;<br />
}<br />
<br />
protected function makeParser($name)<br />
{<br />
$parser = new lessc_parser($this, $name);<br />
$parser->writeComments = $this->preserveComments;<br />
<br />
return $parser;<br />
}<br />
<br />
public function setFormatter($name)<br />
{<br />
$this->formatterName = $name;<br />
}<br />
<br />
protected function newFormatter()<br />
{<br />
$className = "lessc_formatter_lessjs";<br />
if (!empty($this->formatterName)) {<br />
if (!is_string($this->formatterName))<br />
return $this->formatterName;<br />
$className = "lessc_formatter_$this->formatterName";<br />
}<br />
<br />
```<br />
<br />
Thoughts?