Example #1
0
 /**
  * Редактирует свойства сайта
  */
 public function actionSiteSettings()
 {
     //$settingsForm = ;
     $form_array = SiteSettingsForm::form();
     //$form_array['title'] = Yii::t('cms', 'General settings');
     $form_array['id'] = 'SiteSettings';
     $form_array['activeForm'] = Form::ajaxify($form_array['id']);
     $form_array['buttons'] = array('refresh' => array('type' => 'submit', 'label' => Yii::t('cms', 'Save'), 'title' => Yii::t('cms', 'Save and reload the page')));
     $form = new Form($form_array);
     $form->id = $form_array['id'];
     $form->model = clone Yii::app()->settings->model;
     $form->loadData();
     $this->performAjaxValidation($form->model, null, false);
     if ($form->submitted('refresh')) {
         if ($form->model->validate()) {
             Yii::app()->settings->saveAll($form->model->getAttributes());
             echo '1';
         } else {
             echo '0';
         }
         Yii::app()->end();
     }
     $caption = array('icon' => 'settings', 'label' => Yii::t('cms', 'Site settings'));
     $this->render('/form', array('form' => $form, 'caption' => $caption));
 }
Example #2
0
 public static function dynamicFeedbackForm($params)
 {
     $user = User::model()->findByPk($params['id']);
     if ($user && Yii::app()->user->hasRole($user->send_message) && $user->id != Yii::app()->user->id && $user->email) {
         $vm = new VirtualModel($params['feedback_form'], 'FieldSet');
         $config = $vm->formMap;
         $config['id'] = sprintf('%x', crc32(serialize(array_keys($params['feedback_form']))));
         $config['buttons'] = array('send' => array('type' => 'submit', 'label' => Yii::t('UnitProfiles.main', 'Send')));
         $profileVar = 'view';
         $config['activeForm'] = Form::ajaxify($config['id']);
         $config['activeForm']['clientOptions']['validationUrl'] = '/?r=view/widget&pageWidgetId=' . $params['pageWidgetId'] . '&' . $profileVar . '=' . $user->id;
         $config['activeForm']['clientOptions']['afterValidate'] = "js:function(f,d,h){if (!h) {return true;}}";
         $form = new Form($config, $vm);
         $ret = '<h3>' . Yii::t('UnitProfiles.main', 'Feedback form') . '</h3>';
         if (Yii::app()->user->hasFlash('WidgetProfilesSend-permanent')) {
             $ret .= Yii::t('UnitProfiles.main', 'Your message was successfully sent');
         } else {
             $ret .= '<div class="form">' . $form->render() . '</div>';
         }
         return $ret;
     }
     return '';
 }
Example #3
0
 /**
  * Редактирует свойства страницы
  *
  * @param int $pageId id редактируемой страницы
  */
 public function actionEdit($pageId)
 {
     $page = Yii::app()->page->model;
     $form_array = Page::form();
     $form_array['id'] = sprintf('%x', crc32(serialize(array_keys($page->attributes))));
     $form_array['buttons'] = array('refresh' => array('type' => 'submit', 'label' => Yii::t('cms', 'Save'), 'title' => Yii::t('cms', 'Save and reload the page')));
     $form_array['activeForm'] = Form::ajaxify($form_array['id']);
     if ($page->id != 1) {
         $form_array['buttons']['deletepage'] = array('type' => 'submit', 'label' => Yii::t('cms', 'Delete'), 'title' => Yii::t('cms', 'Delete page'));
     }
     $form = new Form($form_array);
     $form->model = $page;
     $this->performAjaxValidation($page);
     if ($form->submitted('save') || $form->submitted('refresh')) {
         $page = $form->model;
         if ($form->validate()) {
             //$page->path = '';
             if ($page->save(false)) {
                 Yii::app()->user->setFlash('save', Yii::t('cms', 'Properties has been saved successfully'));
             } else {
                 Yii::app()->user->setFlash('save-error-permanent', Yii::t('cms', 'There is some error on page saving'));
             }
         }
     } elseif ($form->submitted('delete')) {
         $page = $form->model;
         if ($page->id != 1) {
             $parentId = $page->parent_id ? $page->parent_id : 1;
             $params = array('pageId' => $parentId);
             if ($page->parent_id) {
                 $params['url'] = $page->parent->url;
                 $params['alias'] = $page->parent->url;
             }
             echo CJavaScript::jsonEncode(array('url' => $this->createAbsoluteUrl('view/index', $params)));
             $page->delete();
             Yii::app()->user->setFlash('delete', Yii::t('cms', 'Page deleted.'));
             Yii::app()->end();
         }
     }
     $form = new Form($form_array);
     $form->model = $page;
     $caption = array('icon' => 'edit', 'label' => Yii::t('cms', 'Page properties'));
     $this->render('/form', array('form' => $form, 'caption' => $caption));
 }
Example #4
0
function smarty_function_form($params, &$smarty)
{
    if (!empty($params['className']) && method_exists($params['className'], 'form')) {
        if (empty($params['ajaxUrlParams'])) {
            $params['ajaxUrlParams'] = '';
        }
        if (!empty($params['elements'])) {
            $form_array['elements'] = $params['elements'];
        } else {
            $f = call_user_func(array($params['className'], 'form'));
            $form_array['elements'] = $f['elements'];
        }
        $id = $params['className'] . $params['id'];
        $form_array['id'] = $id;
        if (!empty($params['enableAjax'])) {
            $cs = Yii::app()->getClientScript();
            $am = Yii::app()->getAssetManager();
            $cs->registerScriptFile($am->publish(Yii::getPathOfAlias('application.assets.js')) . '/cms.js');
            $form_array['activeForm'] = Form::ajaxify($id);
            $widget = $smarty->getTemplateVars('widget');
            $pageWidget = $smarty->getTemplateVars('pageWidget');
            unset($form_array['activeForm']['focus']);
            $form_array['activeForm']['clientOptions']['validationUrl'] = '/?r=view/widget&pageWidgetId=' . $pageWidget['id'] . $params['ajaxUrlParams'];
            if ($params['enableAjax'] === 'validate') {
                $form_array['activeForm']['clientOptions']['afterValidate'] = "js:function(f,d,h){if (!h) {return true;}}";
            } else {
                $form_array['activeForm']['clientOptions']['afterValidate'] = 'js:function(f,d,h)' . <<<JS
{
    if (!h) {
        var params = f.serialize();
        cmsAjaxSave('/?r=view/widget&pageWidgetId={$pageWidget['id']}{$params['ajaxUrlParams']}', params, f.attr('method'), function(html) {
        //    cmsReloadPageWidget({$pageWidget['id']}, '.pagewidget[rev={$widget['id']}]');
        });
    }
}
JS;
            }
        }
        $form_array['type'] = 'form';
        if (!empty($params['buttons'])) {
            $form_array['buttons'] = $params['buttons'];
        } else {
            if (empty($params['submitLabel'])) {
                $params['submitLabel'] = Yii::t('cms', 'Submit');
            }
            $form_array['buttons'] = array('submit' => array('type' => 'submit', 'label' => $params['submitLabel'], 'title' => $params['submitLabel']));
        }
        $form = new Form($form_array);
        if (!empty($params['id'])) {
            $form->model = call_user_func(array($params['className'], 'model'))->findByPk(intval($params['id']));
        } else {
            $form->model = new $params['className']();
        }
        if (!empty($params['scenario'])) {
            $form->model->scenario = $params['scenario'];
        }
        if (!empty($params['rules'])) {
            $form->model->rules = $params['rules'];
        }
        $buttons = array_keys($form_array['buttons']);
        $submitted = false;
        foreach ($buttons as $btn) {
            $submitted = $submitted || $form->submitted($btn);
        }
        if ($submitted) {
            $form->validate();
        }
        return '<div class="form">' . $form->render() . '</div>';
    }
    $htmlOptions = $params;
    unset($htmlOptions['action']);
    unset($htmlOptions['method']);
    return CHtml::form($params['action'], $params['method'], $htmlOptions);
}
Example #5
0
    /**
     * Обрабатывает запрос на редактирование блока
     *
     * @param int $pageWidgetId id редактируемого страничного блока
     * @param int $widgetId id редактируемого блока
     * @param int $pageId id страницы, на которой размещается блок
     * (используется, если предполагается создание нового блока)
     * @param int $prevPageWidgetId id блока, после которого размещается текущий блок
     * (используется, если предполагается создание нового блока)
     * @param string $area название области страницы где размещается блок
     * (используется, если предполагается создание нового блока)
     * (используется, если предполагается создание нового блока)
     * @param string $modelClass имя класса модели редактируемой записи
     * @param string $widgetClass имя класса виджета редактируемого блока
     * @param int $recordId id редактируемой записи
     * @param int $sectionId
     * @param string foreignAttribute
     * @param string $return тип возвращаемого ответа (json, html)
     */
    public function actionEdit($pageWidgetId = 0, $widgetId = 0, $pageId = 0, $prevPageWidgetId = 0, $area = 'main', $modelClass = '', $widgetClass = '', $recordId = 0, $sectionId = 0, $foreignAttribute = '', $return = 'html')
    {
        $ret = true;
        // Обрабатываем входящие параметры и находим (или создаем) необходимые объекты
        $pageWidgetId = (int) $pageWidgetId;
        $widgetId = (int) $widgetId;
        $recordId = (int) $recordId;
        $pageId = (int) $pageId;
        // Если указан id страничного блока
        if ($pageWidgetId > 0) {
            $pageWidget = PageWidget::model()->with('widget')->findByPk($pageWidgetId);
            if ($pageWidget) {
                $widget = $pageWidget->widget;
                $widgetClass = $widget->class;
                $content = $widget->content;
                $content->scenario = 'edit';
            }
            // Если указан id блока в общем
        } elseif ($widgetId > 0) {
            $widget = Widget::model()->findByPk($widgetId);
            $widgetClass = $widget->class;
            if ($widget) {
                $content = $widget->content;
                $content->scenario = 'edit';
            }
            // Если указан класс и id модели
        } elseif ($recordId > 0 && $modelClass) {
            $content = call_user_func(array($modelClass, 'model'))->findByPk($recordId);
            $content->scenario = 'edit';
            // Если указан только класс виджета
        } elseif ($widgetClass || $modelClass) {
            if ($widgetClass) {
                $modelClass = call_user_func(array($widgetClass, 'modelClassName'));
            }
            if (method_exists($modelClass, 'defaultObject')) {
                $content = call_user_func(array($modelClass, 'defaultObject'));
            } else {
                $content = new $modelClass();
            }
            $content->scenario = 'add';
        } else {
            $ret = false;
        }
        if (!isset($widget) && $content && $content->hasAttribute('widget_id')) {
            if (!empty($content->widget_id)) {
                $widget = $content->widget;
                $widgetClass = $widget->class;
            } elseif ($content->scenario == 'add') {
                $widget = new Widget();
            }
        }
        $modelClass = get_class($content);
        $langs = array_keys(I18nActiveRecord::getLangs(Yii::app()->language));
        // Если блок новый, заполняем его исходными данными
        if (isset($widget) && $widgetClass && $widget->isNewRecord) {
            $widget->class = $widgetClass;
            $widget->title = call_user_func(array($modelClass, 'modelName'));
            foreach ($langs as $lang) {
                $widget->{$lang . '_title'} = call_user_func(array($modelClass, 'modelName'), $lang);
            }
        }
        // Если указывается внешний ключ
        $sectionId = (int) $sectionId;
        if ($sectionId && $foreignAttribute && $content->hasAttribute($foreignAttribute)) {
            $content->{$foreignAttribute} = $sectionId;
        }
        // Делаем форму редактирования
        $id = 'WidgetEdit' . $modelClass;
        $widgetFormArray = call_user_func(array($modelClass, 'form'));
        $widgetFormArray['type'] = 'form';
        $widgetFormArray['id'] = $id;
        $showTitle = true;
        if (isset($widgetFormArray['title'])) {
            if ($widgetFormArray['title'] === false) {
                $showTitle = false;
            }
            unset($widgetFormArray['title']);
        }
        //  В окно редактирования свойств подключаем диалог для управления размещением
        //  todo: нужно исправить урл
        //        if (isset($pageWidget)) {
        //            $widgetFormArray['elements'][] = Form::tab('Размещение', '/?r=widget/setDialog&pageId='.$pageWidget->page_id.'&widgetId='.$pageWidget->widget_id.'&pageWidgetId='.$pageWidget->id);
        //        }
        $formArray = array('id' => $id, 'activeForm' => Form::ajaxify($id), 'action' => Yii::app()->request->getUrl(), 'buttons' => array('save' => array('type' => 'submit', 'label' => Yii::t('cms', 'Save'), 'title' => Yii::t('cms', 'Save and close window')), 'apply' => array('type' => 'submit', 'label' => Yii::t('cms', 'Apply'), 'title' => Yii::t('cms', 'Save and continue editing'))));
        if ($content->scenario == 'add') {
            $formArray['activeForm']['clientOptions']['afterValidate'] = 'js:function(f,d,h)' . <<<JS
{cmsAjaxSubmitForm(f,d,h, {
    onSuccess: function(html) {

        var params = \$(html).find('form').attr('action').split('&');
        for (var i=0; i<params.length; i++)
        {
            var a = params[i].split('=');
            if (a[0] == 'pageWidgetId') {
                var pageWidgetId = a[1];
            }
            if (a[0] == 'widgetId') {
                var widgetId = a[1];
            }
        }
        var prevPageWidgetId = '{$prevPageWidgetId}';
        var areaName = '{$area}';
        var widgetClass = '{$widgetClass}';
        var pageId = '{$pageId}';
        if (\$('#cms-pagewidget-'+pageWidgetId).length==0) {
            if (prevPageWidgetId != '0') {
                var prevPageWidget = \$('#cms-pagewidget-'+prevPageWidgetId);
            } else {
                var prevPageWidget = \$('#cms-area-'+areaName).find('.cms-empty-area-buttons').eq(0);
            }
            prevPageWidget.after('<div id="cms-pagewidget-'+pageWidgetId+'" class="cms-pagewidget cms-widget-'+widgetClass+'" rel="'+widgetClass+'" rev="'+widgetId+'" style="cursor:move;"></div>');
        }
        var pageWidget = \$('#cms-pagewidget-'+pageWidgetId);
        if (pageWidget.length) {
            var origBg = pageWidget.css('backgroundColor');
            cmsReloadPageWidget(pageWidgetId, '.cms-pagewidget[rev='+widgetId+']', function() {
                cmsAreaEmptyCheck();
            });
            pageWidget.css('backgroundColor', '#FFFF00').animate({
                backgroundColor: origBg
            }, 2500);
            \$.scrollTo('#cms-pagewidget-'+pageWidgetId, 'normal', {
                offset: -10
            });
        }


    }
});
}
JS;
        }
        if (substr($widgetFormArray['elements'][0], 0, 2) != Form::TAB_DELIMETER || substr($widgetFormArray['elements'][0], -2) != Form::TAB_DELIMETER) {
            $formArray['title'] = '';
        }
        if (method_exists($modelClass, 'modelName')) {
            if (is_subclass_of($modelClass, 'Content')) {
                $caption = array('icon' => call_user_func(array($modelClass, 'icon')), 'label' => call_user_func(array($modelClass, 'modelName')));
            } else {
                $caption = array('icon' => $content->icon(), 'label' => $content->modelName());
            }
        } else {
        }
        if (isset($widget)) {
            $formArray['elements']['widget'] = array('type' => 'form', 'id' => $id, 'elements' => array('title' => array('type' => 'text', 'maxlength' => 255, 'size' => 60)));
            if (Yii::app()->settings->getValue('showWidgetAppearance')) {
                $formArray['elements']['widget']['elements']['template'] = array('type' => 'TemplateSelect', 'className' => $widgetClass, 'hideDefault' => false, 'empty' => Yii::t('cms', '«accordingly to general settings»'));
                $widgetFormArray['elements'][] = Form::tab(Yii::t('cms', 'Appearance'));
            }
        }
        $formArray['elements']['content'] = $widgetFormArray;
        $form = new Form($formArray);
        if (isset($widget)) {
            $form['widget']->model = $widget;
        }
        $form['content']->model = $content;
        // ajax-валидация
        if (isset($widget)) {
            $this->performAjaxValidation(array($widget, $content));
        } else {
            $this->performAjaxValidation($content);
        }
        // Проверка и сохранение
        if ($form->submitted('save') || $form->submitted('apply')) {
            if (isset($widget)) {
                $widget = $form['widget']->model;
            }
            $content = $form['content']->model;
            if ($form->validate()) {
                if (isset($widget)) {
                    $isWidgetNew = $widget->isNewRecord;
                    if ($isWidgetNew && $content->isMaxLimitReached()) {
                        $ret = false;
                    }
                    if ($ret && $widget->save(false)) {
                        $formArray['action'] .= '&widgetId=' . $widget->id;
                        // Если блок новый, размещаем его на текущей странице
                        if ($isWidgetNew) {
                            $prevPageWidgetId = (int) $prevPageWidgetId;
                            $order = $prevPageWidgetId > 0 ? PageWidget::model()->findByPk($prevPageWidgetId)->order : -1;
                            if ($content->hasAttribute('page_id') && $content->page_id > 0) {
                                $pageWidget = $widget->setOnPage($content->page_id, $area, -1);
                            } else {
                                $pageWidget = $widget->setOnPage($pageId, $area, $order);
                            }
                            $formArray['action'] .= '&pageWidgetId=' . $pageWidget->id;
                        }
                        $content->widget_id = $widget->id;
                        $content->save(false);
                    }
                } else {
                    $content->save(false);
                    $formArray['action'] .= '&modelClass=' . get_class($content);
                    $formArray['action'] .= '&recordId=' . $content->id;
                }
            }
        }
        $form = new Form($formArray);
        if (isset($widget)) {
            $form['widget']->model = $widget;
        }
        $form['content']->model = $content;
        // Формируем ответ
        if ($return == 'html') {
            if ($ret) {
                $this->render('/form', compact('form', 'showTitle', 'caption', 'prevPageWidgetId', 'pageId', 'area'));
            } else {
                throw new CHttpException(500, Yii::t('cms', 'The requested page does not exist.'));
            }
        } elseif ($return == 'json') {
            echo CJavaScript::jsonEncode(array('pageWidgetId' => $pageWidget->id, 'widgetId' => $widget->id, 'contentId' => $content->id, 'status' => (int) $ret));
        }
    }