<?php
/**
 * Main controller for main actions
 * @author smikhalyev <smikhalyev@parallels.com>
 * @since 2010/10/10
 * @package SB
 * @subpackage Controllers
 * @copyright (c) 2004-2014. Parallels IP Holdings GmbH. All rights reserved.
 */
class SB_Controllers_Main extends Zend_Controller_Action {

	/**
	 * Site object
	 * @var Sb_Site
	 */
	protected $_site = null;

	/**
	 * custom initialization controller
	 */
	public function init() {
		$config = SB_Config::getInstance();
		$this->view->headMeta()->appendHttpEquiv('Content-Type', 'text/html; charset=utf-8');
		$this->view->headMeta()->appendHttpEquiv('X-UA-Compatible', 'IE=edge');
		$this->view->headLink(array(
			'rel' => 'icon',
			'href' => $config->getUrl('base') . '/favicon.ico', 'type' => 'image/vnd.microsoft.icon'
		));
		$this->view->headLink(array('rel' => 'SHORTCUT ICON', 'href' => $config->getUrl('base') . '/favicon.ico'));

		$this->view->pageLanguage = str_replace('_', '-', SB_Locale::getLocaleName());

		$helper = new SB_Helpers_Wizard_Site();
		$this->_site = $helper->getSite();
	}

	public function preDispatch() {
		$this->view->headTitle($this->view->safeLocale('title'), Zend_View_Helper_Placeholder_Container_Abstract::PREPEND);
	}

	/**
	 * Default action when we are gone to a /sitebuilder
	 */
	public function defaultAction() {
		$this->_redirect('/Start');
	}

	/**
	 * Start Action
	 */
	public function startAction() {
		$site = $this->_site;
		$view = $this->view;
		$locale = SB_Locale::getSection('Start');
		$extension = SB_Extension::getInstance();

		if (!$site->isStub) {
			$this->_redirect('/Editor');
		}

		if (!$site->isRegular()) {
			$view->headScript()->appendScript('Sb.Locale.loadData(' . Zend_Json::encode(array(
				'UserEditInfoDescription'	=> $locale->TrialSiteUserEditInfoDescription
			)) . ')');
		} else {
			$trialMessages = new SB_Trial_Messages(SB_Locale::getLocaleName());
			$placeholders	= SB_Helpers_Placeholder::getInstance($site->uuid, SB_Locale::getLocaleName());
			$viewKeys		= array();
			try {
				if ($extension->isUpsellAllowed($site)) {
					$site->checkLicenseConstraints();
				}
			} catch (SB_Site_Action_CheckTarget_LimitsExceeded_Exception $e) {
				$view->onLoadDialogButton = $locale->upsellGoToSiteBuilder;
				$viewKeys	= array(
					'onLoadDialogTitle'	=> 'startUpsellLimitExceedingTitle',
					'onLoadDialogBody'	=> 'startUpsellLimitExceedingBody',
				);
			} catch (SB_Site_Action_CheckTarget_FirstSite_Exception $e) {
				$view->onLoadDialogButton = $locale->upsellGoToSiteBuilder;
				$viewKeys	= array(
					'onLoadDialogTitle'	=> 'startUpsellNoSitesTitle',
					'onLoadDialogBody'	=> 'startUpsellNoSitesBody',
				);
			}
			foreach ($viewKeys as $viewKey => $localeKey) {
				$view->$viewKey = $placeholders->replacePlaceholders($trialMessages->$localeKey);
			}
		}

		$mainLogoImageUrl = $extension->getMainLogoImageUrl();
		$mainLogoLinkUrl = $extension->getMainLogoLinkUrl();
		$companyLogoImageUrl = $extension->getCompanyLogoImageUrl();
		$companyLogoLinkUrl = $extension->getCompanyLogoLinkUrl();

		$view->mainLogo = $view->companyLogo = '';
		if ($mainLogoImageUrl) {
			$view->mainLogo = '<img src="' . $mainLogoImageUrl . '" alt="' .
				$view->escape(SB_Config::getInstance()->getGeneral('product')) . '" />';
		}
		if ($mainLogoLinkUrl) {
			$view->mainLogo = '<a href="' . $mainLogoLinkUrl . '" target="_blank">' . $view->mainLogo . '</a>';
		}

		if ($companyLogoImageUrl) {
			$view->companyLogo = '<img height="31" width="62" src="' . $companyLogoImageUrl . '" alt="" />';
		}
		if ($companyLogoLinkUrl) {
			$view->companyLogo = '<a href="' . $companyLogoLinkUrl . '" target="_blank">' . $view->companyLogo . '</a>';
		}
		$view->copyright = $view->safeLocale('copyright', 'Common', array(date('Y')));
		if ($companyLogoLinkUrl) {
			$view->copyright = '<a href="' . $companyLogoLinkUrl . '" target="_blank">' . $view->copyright . '</a>';
		}
		$view->headScript()->appendScript('Sb.maxAdditionalLocales = ' . $site->limits->maxAdditionalLocales . ';');
	}

	/**
	 * Editor Action
	 */
	public function editorAction() {
		$site = $this->_site;
		$view = $this->view;

		if ($site->isStub) {
			$this->_redirect('/Start');
		}

		$topMessage	= null;
		$trialMessages = new SB_Trial_Messages(SB_Locale::getLocaleName());
		$extension	= SB_Extension::getInstance();

		if (!$site->isRegular()) {
			if (!SB_Config::getInstance()->getGeneral('demo_mode')) {
				$topMessage = $trialMessages->editorTopMessageTrialSite;
			}
		} else {
			try {
				if ($extension->isUpsellAllowed($site)) {
					$site->checkLicenseConstraints();
				}
			} catch (SB_Site_Action_CheckTarget_LimitsExceeded_Exception $e) {
				$topMessage = $trialMessages->editorTopMessageUpsellLimitExceeding;
			} catch (SB_Site_Action_CheckTarget_FirstSite_Exception $e) {
				$topMessage = $trialMessages->editorTopMessageUpsellNoSites;
			}
		}

		if (SB_Config::getInstance()->getGeneral('cta_bar_visibility') && $topMessage) {
			$placeholders = SB_Helpers_Placeholder::getInstance($site->uuid, SB_Locale::getLocaleName());
			$view->topMessage = $placeholders->replacePlaceholders($topMessage);
		}

		//:INFO: austimenko@ 20101210: Overwrite keys, that should be taken from site`s locale
		$locale = SB_Locale::getSection('Js/Editor/Site', $site->localeCode);
		$localeKeys = $locale->getAll();

		//:INFO: smikhalyev@ 20121220: Add a locale keys for upselling promotional footer dialog
		$placeholders = SB_Helpers_Placeholder::getInstance($site->uuid, SB_Locale::getLocaleName());
		try {
			if ($site->properties->isPromoFooterVisible) {
				$localeKeys['disablePromoFooterUpsellTitle'] = $trialMessages->disablePromoFooterUpsellTitle;
				$localeKeys['disablePromoFooterUpsellMsg'] = $placeholders->replacePlaceholders(
					$trialMessages->disablePromoFooterUpsellMsg
				);
			}
		} catch (SB_Exception $e) {
		}

		$localeContent = Zend_Json::encode($localeKeys);
		$view->headScript()->appendScript('Sb.Locale.loadData(' . $localeContent . ');');
		$view->headScript()->appendScript('Sb.isNeedUpgradeSite = ' . ($site->isUpgraded() ? 'false' : 'true') . ';');
	}
}