/** * Редактирует свойства сайта */ 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)); }
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 ''; }
/** * Редактирует свойства страницы * * @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)); }
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); }
/** * Обрабатывает запрос на редактирование блока * * @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)); } }