Syntaxerror Installing Add-Ons

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?