<?php

// class to process api request from content editor
class ContentManager extends BaseManager
{
    //function to convert json data to css content
    protected function json2CSS($css)
    {
        return Functions::getCSSTextFormArray($css);
    }
    // function to save site builder data
    public function actionupdateSite()
    {
        $page_id = $_REQUEST['page_id'];
        $page = BPages::model()->find('file_name=:file_name', array(':file_name' => $page_id));
        if (!$page) {
            $this->ajaxError(1);
            return;
        }
        $siteObj = Yii::app()->site;
        if (Yii::app()->site->model->isExpired()) {
            $this->ajaxError(1);

            return;
        }
        $structure = $_REQUEST['structure'];
        if (isset($_REQUEST['deleted'])) {
            $deleted = $_REQUEST['deleted'];
            Yii::app()->site->model->deleteModules($deleted);
        }
        if (isset($_REQUEST['configurations'])) {
            $configurations = $_REQUEST['configurations'];
            $this->_updateConfigurations($configurations);
        }
        $parts = $structure['parts'];
        $file_name = $page->file_name;
        foreach ($parts as $z) {
            $part_structure = $this->json2PagePartStructure($z);
            $content = $part_structure['content'];
            $ptype = $this->getIndex($z, 'type');
            if ($ptype == 'main') {
                $type = $file_name;

                Yii::app()->site->model->writeFile('page_data', $page->id, implode(',', $part_structure['elements']), '.json');
            } else {
                $type = '_'.$ptype;
                Yii::app()->site->model->writeFile('page_data', $type, implode(',', $part_structure['elements']), '.json');
            }
            Yii::app()->site->model->writeFile('views', $type, $content);
        }
        if (isset($_REQUEST['styleSheets'])) {
            $styleSheets = $_REQUEST['styleSheets'];
            foreach ($styleSheets as $style_item) {
                $name = $style_item['name'];
                if ($name == 'themes') {
                    continue;
                }
                $css_arr = array();
                $skin_arr = array();
                if (isset($style_item['css'])) {
                    $css_arr = $style_item['css'];
                }
                if (isset($style_item['skin'])) {
                    $skin_arr = $style_item['skin'];
                }
                $css = $this->json2CSS($skin_arr);
                Yii::app()->site->model->writeFile('css', $name, $css, '.css_skin');
                $css = $this->json2CSS($css_arr);
                Yii::app()->site->model->writeFile('css', $name, $css, '.css');
            }
        }
        $this->ajaxSuccess(true);
    }
    //convert POST pageZone data to HTML Structure
    public function json2PagePartStructure($part)
    {
        $s = '';
        $elements = array();
        if (isset($part['zones'])) {
            $zones = $part['zones'];
            foreach ($zones as $r) {
                $zone_structure = $this->json2ZoneStructure($r);

                $elements = array_merge($elements, $zone_structure['elements']);

                $s .= $zone_structure['content'];
            }
        }

        return array('content' => $s,'elements' => $elements);
    }
    //convert POST Zone data to HTML Structure
    public function json2ZoneStructure($zone, $data_mode = 1)
    {
        $s = '';
        $elements = array();
        if (isset($zone['rows'])) {
            $rows = $zone['rows'];
            foreach ($rows as $r) {
                $row_structure = $this->json2RowStructure($r, $data_mode);
                $elements = array_merge($elements, $row_structure['elements']);
                $s .= $row_structure['content'];
            }
        }
        $content = '';
        $content .= "<?php Yii::app()->controller->beginWidget('application.widgets.CWidgetZone', array('page_id'=>'".$this->getIndex($zone, 'id')."','page_class'=>'".$this->getIndex($zone, 'class')."')) ?>";
        $content .= $s;
        $content .= '<?php Yii::app()->controller->endWidget(); ?>';
        $elements[] = $this->getIndex($zone, 'id');

        return array('content' => $content,'elements' => $elements);
    }
    //convert POST Row data to HTML Structure
    public function json2RowStructure($row, $data_mode = 1)
    {
        $row_content = '';
        $content = '';
        $elements = array();
        if (isset($row['columns'])) {
            $columns = $row['columns'];
            foreach ($columns as $c) {
                $column_structure = $this->json2ColumnStructure($c, $data_mode);
                $elements = array_merge($elements, $column_structure['elements']);
                $row_content .= $column_structure['content'];
            }
            $content .= "<?php Yii::app()->controller->beginWidget('application.widgets.CWidgetRow', array('page_id'=>'".$this->getIndex($row, 'id')."','page_class'=>'".$this->getIndex($row, 'class')."')) ?>";
            $content .= $row_content;
            $content .= '<?php Yii::app()->controller->endWidget(); ?>';
        }
        $elements[] = $this->getIndex($row, 'id');

        return array('content' => $content,'elements' => $elements);
    }
    //convert POST Column data to HTML Structure
    public function json2ColumnStructure($column, $data_mode = 1)
    {
        $content = '';
        $column_content = '';
        $elements = array();
        if (isset($column['modules'])) {
            $modules = $column['modules'];

            foreach ($modules as $m) {
                $module_structure = $this->json2ModuleStructure($m, $data_mode);
                $elements = array_merge($elements, $module_structure['elements']);
                $column_content .= $module_structure['content'];
            }
        }
        $content .= "<?php Yii::app()->controller->beginWidget('application.widgets.CWidgetColumn', array('page_id'=>'".$this->getIndex($column, 'id')."','page_class'=>'".$this->getIndex($column, 'class')."')) ?>";
        $content .= $column_content;
        $content .= '<?php Yii::app()->controller->endWidget(); ?>';
        $elements[] = $this->getIndex($column, 'id');

        return array('content' => $content,'elements' => $elements);
    }
    //convert POST Module data to HTML Structure
    public function json2ModuleStructure($module, $data_mode = 1)
    {
        $content = '';
        $module_content = '';
        $elements = array();

        if (isset($module['boxes'])) {
            $this->saveModule($module);
            $boxes = $module['boxes'];
            $box_module_content = '';
            foreach ($boxes as $c) {
                $box_structure = $this->json2RowStructure($c);
                $elements = array_merge($elements, $box_structure['elements']);
                $box_module_content .= $box_structure['content'];
            }
            if ($data_mode == 1) {
                $content .= "<?php Yii::app()->controller->beginWidget('application.widgets.modules.CWidgetBox', array('page_id'=>'".$this->getIndex($module, 'id')."')); ?>";
            } else {
                $content .= "<?php Yii::app()->controller->beginWidget('application.widgets.modules.CWidgetBox', array('dataJson'=>'".json_encode($this->getIndex($module, 'data'))."')); ?>";
            }
            $content .= $box_module_content;
            $content .= '<?php Yii::app()->controller->endWidget(); ?>';
        } elseif (isset($module['tabs'])) {
            $this->saveModule($module);
            $tabs = $module['tabs'];
            $navigation_content = '';
            $tab_content = '';
            $i = 0;
            foreach ($tabs as $t) {
                $tab_content .= "<?php Yii::app()->controller->beginWidget('application.widgets.modules.tab.CWidgetTabContent', array('page_id'=>'".$this->getIndex($module, 'id')."','tab_index'=>".$i.')); ?>';
                if (isset($t['rows'])) {
                    foreach ($t['rows'] as $c) {
                        $tab_structure = $this->json2RowStructure($c);
                        $elements = array_merge($elements, $tab_structure['elements']);
                        $tab_content .= $tab_structure['content'];
                    }
                }
                $tab_content .= '<?php Yii::app()->controller->endWidget(); ?>';
                ++$i;
            }
            $this->saveModule($module);
            if ($data_mode == 1) {
                $content .= "<?php Yii::app()->controller->beginWidget('application.widgets.modules.tab.CWidgetTab', array('page_id'=>'".$this->getIndex($module, 'id')."')); ?>";
            } else {
                $content .= "<?php Yii::app()->controller->beginWidget('application.widgets.modules.tab.CWidgetTab', array('dataJson'=>'".json_encode($this->getIndex($module, 'data'))."')); ?>";
            }
            $content .= $tab_content;
            $content .= '<?php Yii::app()->controller->endWidget(); ?>';
        } elseif (isset($module['accordions'])) {
            $this->saveModule($module);
            $accordions = $module['accordions'];

            $navigation_content = '';
            $tab_content = '';
            $i = 0;
            foreach ($accordions as $t) {
                $tab_content .= "<?php Yii::app()->controller->beginWidget('application.widgets.modules.accordion.CWidgetAccordionContent', array('page_id'=>'".$this->getIndex($module, 'id')."','tab_index'=>".$i.",'name'=>'".$this->getIndex($t, 'name')."')); ?>";
                if (isset($t['rows'])) {
                    foreach ($t['rows'] as $c) {
                        $tab_structure = $this->json2RowStructure($c);
                        $elements = array_merge($elements, $tab_structure['elements']);
                        $tab_content .= $tab_structure['content'];
                    }
                }
                $tab_content .= '<?php Yii::app()->controller->endWidget(); ?>';

                ++$i;
            }
            if ($data_mode == 1) {
                $content .= "<?php Yii::app()->controller->beginWidget('application.widgets.modules.accordion.CWidgetAccordion', array('page_id'=>'".$this->getIndex($module, 'id')."')); ?>";
            } else {
                $content .= "<?php Yii::app()->controller->beginWidget('application.widgets.modules.accordion.CWidgetAccordion', array('dataJson'=>'".json_encode($this->getIndex($module, 'data'))."')); ?>";
            }
            $content .= $tab_content;
            $content .= '<?php Yii::app()->controller->endWidget(); ?>';
        } elseif (isset($module['slicks'])) {
            $this->saveModule($module);
            $slicks = $module['slicks'];
            $box_module_content = '';
            foreach ($slicks as $c) {
                $box_module_content .= "<?php Yii::app()->controller->beginWidget('application.widgets.modules.slick.CWidgetSlickItem', array('page_id'=>'".$this->getIndex($module, 'id')."')); ?>";
                if (isset($c['rows'])) {
                    foreach ($c['rows'] as $row) {
                        $box_module_structure = $this->json2RowStructure($row);
                        $elements = array_merge($elements, $box_module_structure['elements']);
                        $box_module_content .= $box_module_structure['content'];
                    }
                }
                $box_module_content .= '<?php Yii::app()->controller->endWidget(); ?>';
            }
            if ($data_mode == 1) {
                $content .= "<?php Yii::app()->controller->beginWidget('application.widgets.modules.CWidgetSlick', array('page_id'=>'".$this->getIndex($module, 'id')."')); ?>";
            } else {
                $content .= "<?php Yii::app()->controller->beginWidget('application.widgets.modules.CWidgetSlick', array('dataJson'=>'".json_encode($this->getIndex($module, 'data'))."')); ?>";
            }
            $content .= $box_module_content;
            $content .= '<?php Yii::app()->controller->endWidget(); ?>';
        } else {
            if ($data_mode == 1) {
                $this->saveModule($module);
            }
            if ($data_mode == 1) {
                $content .= "<?php Yii::app()->controller->widget('application.widgets.CWidgetModuleRenderer', array('page_id'=>'".$this->getIndex($module, 'id')."')); ?>";
            } else {
                $content .= "<?php Yii::app()->controller->widget('application.widgets.CWidgetModuleRenderer', array('dataJson'=>'".json_encode($this->getIndex($module, 'data'))."')); ?>";
            }
        }
        $elements[] = $this->getIndex($module, 'id');

        return array('content' => $content,'elements' => $elements);
    }
    // function to save widget data to database
    protected function saveModule($module)
    {
        $data = getIndex($module, 'data', array());
        $type = getIndex($module, 'type');
        $id = getIndex($module, 'data_id', 0);
        $skin = getIndex($module, 'skin');
        $data_id = getIndex($module, 'id');
        $moduleForm = new ModuleForm();
        $moduleForm->id = $id;
        $moduleForm->type = $type;
        $moduleForm->data_id = $data_id;
        $moduleForm->data = $data;
        $moduleForm->skin = $skin;
        if ($moduleForm->save()) {
            return true;
        }

        return false;
    }
    // get all skin for an module
    public function actiongetSkinList()
    {
        $type = $_REQUEST['name'];
        $format = $_REQUEST['format'];
        $skin_list = array();

        $skins = BSkins::model()->findAll('type=:name and format=:format', array(':name' => $type, ':format' => $format));
        $prefix = 'b_';
        $postfix = '';
        for ($i = 0; $i < sizeof($skins); ++$i) {
            $skin = $skins[$i]->attributes;
            $skin['html'] = Functions::parseSkinHtml($skin['html']);
            $skin['name'] = $prefix.$skin['name'].$postfix.'_'.$skins[$i]['format'];
            $skin_list[] = $skin;
        }
        
		$prefix = 'a_';
        $postfix = '';
		$skin = array();
		$filePath = Yii::getPathofAlias('application.skins').DIRECTORY_SEPARATOR.$type;
		if(file_exists($filePath)) {
			foreach(glob($filePath. DIRECTORY_SEPARATOR.'*.skn.php') as $file) {
				$filename = basename($file);
				$skinName = str_replace('.skn.php', '',$filename);
				$skin = @include($file);
				if(isset($skin) && is_array($skin)) {
					$skin['name'] = $prefix.$skinName.$postfix.'_'.(isset($skin['format']) ? $skin['format'] : 0);
					$skin['html'] = Functions::parseSkinHtml($skin['html']);
					$skin_list[] = $skin;
				}
				
			}
		}


        $this->ajaxSuccess($skin_list);
    }
    // get default skin for all modules
    public function actiongetdefaultSkinsList()
    {
        $module = new BModule();

        $skins = BSkins::model()->findAll(array(
            'select' => '*',
            'group' => 'type,format',
            'distinct' => true,

        ));
        $rs = $this->ar_toArray($skins);

        $this->ajaxSuccess($rs);
    }
	public function actiongetZoneTemplate()
	{
		$name = $_REQUEST['name'];
		$c = $this->_getTemplate('zone_templates/'.$name);
		$this->ajaxSuccess($c);
	}
	public function actiongetzone_templatesList()
	{
		$list = Zone_Templates::model()->findAll();
        $rs = $this->ar_toArray($list);

        $this->ajaxSuccess($rs);
	}
	public function actiongetFullModuleList()
	{
		$criteria = new CDbCriteria();
		$criteria->condition = '1';
		if (!Yii::app()->cms->isEnabled()) {
			$criteria->condition .= ' and blog=0';
		}

		$criteria->order = 'priority asc';
		$modulecategories = ModuleCategory::model()->findAll(array('order' => 'id asc, priority asc'));
		$modules = ModuleList::model()->findAll();
		$data = array();
		foreach ($modulecategories as $category) {
			$m = array();
			$m['name'] = $category['name'];
		  
			$j = 0;
			$m['items'] = array();
			foreach ($modules  as $module) {
				if($module['category'] == $category['id']) {
					$display = (isset($module['display']) ? $module['display'] : 1);
					if($display == 1) {
						$iconPath = Yii::getPathOfAlias('application_root.images.module').DIRECTORY_SEPARATOR .$module['name'].'.png';
						if(file_exists($iconPath))
							$preview = '/images/module/'.$module['name'].'.png';
						else
							$preview = '/images/module/module.png';
						$m['items'][] = array('name' => $module['name'], 'preview'=>$preview, 'display'=>(isset($module['display']) ? $module['display'] : 1),'display_name' => $module['display_name']);
					}
				}
			}
			$data[] = $m;
		}
		$this->ajaxSuccess($data);
	}
}
