<?php

class actionGroupsGroupEdit extends cmsAction {

    public $lock_explicit_call = true;

    public function run($group, $do = false) {

        if (!$group['access']['is_can_edit']) {
            return cmsCore::error404();
        }

        // если нужно, передаем управление другому экшену
        if ($do) {

            $this->current_params = [$group] + array_slice($this->params, 2);

            return $this->runExternalActionIfExists('group_edit_' . $do, $this->current_params);
        }

        $form = $this->getGroupForm($group, 'edit');

        if (!$group['access']['is_owner'] && !$group['access']['is_moderator']) {
            $form->removeFieldset('group_options');
        }

        if ($this->request->has('submit')) {

            $group = array_merge($group, $form->parse($this->request, true, $group));

            $errors = $form->validate($this, $group);

            if (!$errors) {

                $this->model->updateGroup($group['id'], $group);

                $this->model->fieldsAfterStore($group, $this->getGroupsFields(), 'edit');

                cmsUser::addSessionMessage(LANG_SUCCESS_MSG, 'success');

                $group = $this->model->getGroup($group['id']);

                $content = cmsCore::getController('content', $this->request);

                $parents = $content->model->getContentTypeParents(null, $this->name);

                if ($parents) {
                    $content->bindItemToParents(['id' => null, 'name' => $this->name, 'controller' => $this->name], $group, $parents);
                }

                return $this->redirectToAction($group['slug']);
            }

            if ($errors) {
                cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error');
            }
        }

        $page_title = LANG_GROUPS_EDIT;

        $this->cms_template->setPageTitle($page_title);

        $this->cms_template->addBreadcrumb(LANG_GROUPS, href_to('groups'));
        $this->cms_template->addBreadcrumb($group['title'], href_to('groups', $group['id']));
        $this->cms_template->addBreadcrumb($page_title);

        return $this->cms_template->render('group_edit', [
            'do'               => 'edit',
            'is_premoderation' => false,
            'page_title'       => $page_title,
            'group'            => $group,
            'form'             => $form,
            'errors'           => $errors ?? false
        ]);
    }

}
