HEX
Server: Apache/2.4.25
System: Linux ion14 4.9.0-8-amd64 #1 SMP Debian 4.9.144-3.1 (2019-02-19) x86_64
User: (10087)
PHP: 7.4.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,system, exec, shell_exec, passthru, popen, proc_open
Upload Files
File: /home/www/web115/wordpress/wp-content/plugins/digimember/system/controller/admin/form.php
<?php

$load->controllerBaseClass( 'admin/tabbed');

abstract class ncore_AdminFormController extends ncore_AdminTabbedController
{
    //
    // protected section
    //
    abstract protected function editedElementIds();

    protected function submitted( $button_name )
    {
        return $this->form()->isPosted( $button_name );
    }

    protected function handleRequest()
    {
        $form = $this->form();

        $is_posted = $form->isPosted();
        if (!$is_posted)
        {
            return;
        }

        $element_ids = $this->editedElementIds();

        $errors = $this->validateForm( $form );

        if ($errors)
        {
            $this->formError( $errors );

            foreach ($element_ids as $element_id)
            {
                $data = $form->getData($element_id);
                $form->setData( $element_id, $data );
                $this->formPopulated = true;
            }
        }
        else
        {
            $modified = false;

            $prior_element_ids = implode( ',', $element_ids );

            foreach ($element_ids as $element_id)
            {
                $data = $form->getData( $element_id );

                if ($this->setData( $element_id, $data ))
                {
                    $modified = true;
                }
            }

            $post_element_ids = implode( ',', $this->editedElementIds() );

            $element_ids_changed = $post_element_ids != $prior_element_ids;
            if ($element_ids_changed)
            {
                $this->onElementIdChanged();
            }

            if ($modified )
            {
                $message = $this->formSuccessMessage();
                $must_reload = $this->isPageReloadAfterSubmit();
                if ($must_reload)
                {
                    ncore_flashMessage( NCORE_NOTIFY_SUCCESS, $message );

                    $url = ncore_currentUrl();
                    $url = ncore_removeArgs( $url, array( 'id' ), '&', false );
                    $url = ncore_addArgs( $url, array( 'id' => $post_element_ids ), '&', false );

                    ncore_redirect( $url );
                }
                else
                {
                    $this->formSuccess( $message );
                }


            }


        }
    }

    /**
     * @param ncore_FormRendererForm $form
     * @return array
     */
    protected function validateForm( $form )
    {
        $errors = $form->validate();

        return $errors;
    }

    protected function formSuccessMessage( $msg=false )
    {
        if ($msg!==false)
        {
            $this->success_message = $msg;
        }

        return $this->success_message
               ? $this->success_message
               : _ncore('Your changes have been saved.');
    }

    protected function formDisable( $msg )
    {
        if ($msg) {
            $this->addFormMsg( NCORE_NOTIFY_WARNING, $msg );
        }

        $this->is_form_enabled = false;
    }

    protected function formError( $msg )
    {
        if ($msg) {
            $this->addFormMsg( NCORE_NOTIFY_ERROR, $msg );
        }
    }

    protected function formWarning( $msg )
    {
        if ($msg) {
            $this->addFormMsg( NCORE_NOTIFY_WARNING, $msg );
        }
    }

    protected function formSuccess( $msg )
    {
        if ($msg) {
            $this->addFormMsg( NCORE_NOTIFY_SUCCESS, $msg );
        }
    }

    protected function writeAccessGranted()
    {
        if (!parent::writeAccessGranted())
        {
            return false;
        }

        return true;
    }

    protected function formId()
    {
        return $this->baseId() . '_form';
    }

    protected function ajaxErrorMsgDivId()
    {
        return $this->baseId() . '_form_error_message';
    }

    abstract protected function getData( $element_id );

    abstract protected function setData( $element_id, $data );

    protected function viewName()
    {
        return 'admin/form';
    }

    protected function renderContent()
    {
        $this->formData();

        if ($this->is_form_enabled)
        {
            $this->renderFormMessages();

            $this->loadView();
        }
        else
        {
            $this->_renderFormMessagesDisabled();

        }
    }

    abstract protected function inputMetas();

    protected function getInputMetas()
    {
        $metas = $this->inputMetas();

        $element_id = $this->getElementId();
        $meta = array(
            'type' => 'hidden',
            'name' => 'element_id',
            'element_id' => '',
            'default' => $element_id,
        );

        return array_merge( array( $meta ), $metas );
    }

    protected function saveButtonLabel()
    {
        return _ncore('Save Changes');
    }

    protected function buttonMetas()
    {
        return array(
            array(
                'type' => 'submit',
                'name' => 'save',
                'label' => $this->saveButtonLabel(),
                'primary' => true,
            )
        );
    }

    abstract protected function sectionMetas();

    protected function formSettings() {
        return array();
    }

    protected function pageInstructions()
    {
        return array();
    }

    protected function renderFormMessages()
    {
        echo $this->_renderFormMessages();
    }

    protected function isPageReloadAfterSubmit() {
        return false;
    }

    protected function renderFormInner()
    {
        if (!$this->formPopulated)
        {
            $form_data = $this->formData();
            foreach ($form_data as $element_id => $data)
            {
                $this->form()->setData( $element_id, $data );
            }
        }

        $this->form()->render();
    }

    protected function renderFormButtons()
    {
        $this->form()->renderButtons();
    }



    protected function viewData()
    {
        $data = parent::viewData();

        $data[ 'action' ] = $this->formActionUrl();
        $data[ 'have_required' ] = $this->form()->haveRequiredRule();
        $data[ 'form_id'] = $this->formId();

        return $data;
    }

    protected function formActionUrl()
    {
        $this->api->load->helper( 'url' );
        return ncore_currentUrl();
    }

    protected function haveFormErrors()
    {
        foreach ($this->formMessages as $one)
        {
            if ($one->type == 'error')
            {
                return true;
            }
        }

        return false;
    }

    protected function renderPageFootnotes()
    {
    }

    private function renderFormMessageDisabled( $type, $msg)
    {
        $msg_types = array(
            'error'         => NCORE_NOTIFY_ERROR,
            'updated'       => NCORE_NOTIFY_SUCCESS,
        );

        $msg_type = ncore_retrieve( $msg_types, $type, $type );

        echo ncore_renderMessage( $msg_type, $msg, 'p' );
    }

    private function renderFormMessage( $type, $msg)
    {
        $type_map = array(
            'updated' => 'success',
        );
        $icon_map = [
            'error' => 'attention-circled',
            'success' => 'ok-circled',
        ];

        $type = ncore_retrieve( $type_map, $type, $type );
        $icon = ncore_retrieve( $icon_map, $type, 'attention-circled' );

        $css = 'dm-alert dm-alert-' . $type;

        $base_id  = 'ncore-error-';
        self::$html_id++;
        $id = $base_id . self::$html_id;

        return '<div id="' . $id . '" class="' . $css . '">
    <div class="dm-alert-icon">
        <span class="dm-icon icon-' . $icon . ' dm-color-' . $type . '"></span>        
    </div>
    <div class="dm-alert-content">
        <label>' . $msg . '</label>
    </div>
</div>';
    }

    protected function onElementIdChanged()
    {
        $this->form( $force_reload = true );
    }

    /** @var bool | ncore_FormRendererForm */
    private $form = false;
    private $formPopulated = false;
    private $is_form_enabled = true;
    private $formMessages = array();
    private static $html_id = 0;

    private function _renderFormMessagesDisabled()
    {
        $ajax_div_id = $this->ajaxErrorMsgDivId();

        $html = "<div id='$ajax_div_id'>";

        foreach ($this->formMessages as $one)
        {
            $type = $one->type;
            $msg  = $one->msg;

            $html .= $this->renderFormMessageDisabled( $type, $msg );
        }

        $html .= '</div>';

        return ncore_minifyHtml( $html );
    }

    private function _renderFormMessages()
    {
        $ajax_div_id = $this->ajaxErrorMsgDivId();

        $html = "<div id='$ajax_div_id' class='dm-form-messages'>";

        foreach ($this->formMessages as $one)
        {
            $type = $one->type;
            $msg  = $one->msg;

            $html .= $this->renderFormMessage( $type, $msg );
        }

        $html .= '</div>';

        return ncore_minifyHtml( $html );
    }

    /**
     * @param bool $force_reload
     * @return ncore_FormRendererForm | bool
     */
    protected function form( $force_reload = false )
    {
        if ($this->form !== false && !$force_reload)
        {
            return $this->form;
        }
        /** @var ncore_FormRendererLib $lib */
        $lib = $this->api->load->library('form_renderer');

        $input_metas = $this->getInputMetas();

        $button_metas = $this->buttonMetas();

        $sections = $this->sectionMetas();

        $settings = $this->formSettings();

        $this->form = $lib->createForm(  $sections, $input_metas, $button_metas, $settings );

        return $this->form;
    }

    private function addFormMsg( $type, $message_or_messages )
    {
        if (empty($this->formMessages))
        {
            $this->formMessages = array();
        }

        $messages = is_array( $message_or_messages )
                  ? $message_or_messages
                  : array( $message_or_messages );

        foreach ($messages as $msg)
        {
            foreach ($this->formMessages as $one)
            {
                $have_message = $one->msg == $msg;
                if ($have_message) {
                    continue 2;
                }
            }

            $obj                  = new StdClass();
            $obj->type            = $type;
            $obj->msg             = $msg;

            $this->formMessages[] = $obj;
        }
    }

    protected function getElementId()
    {
        $have_id = !empty($this->element_id)
                && is_numeric($this->element_id);
        if (!$have_id)
        {
            $id = ncore_retrieve( $_GET, 'id', 0 );
            if (is_numeric($id) && $id > 0)
            {
                $this->element_id = $id;
                $have_id = true;
            }
        }
        if (!$have_id)
        {
            $id = ncore_retrieve( $_POST, 'ncore_element_id', 0 );
            if (is_numeric($id) && $id > 0)
            {
                $this->element_id = $id;
            }
        }

        return $this->element_id;
    }

    private $form_data;
    private $success_message = '';
    private function formData( $force_reload = false )
    {
        if ($force_reload || !isset($this->form_data))
        {
            $this->form_data = array();

            $element_ids = $this->editedElementIds();
            foreach ($element_ids as $element_id)
            {
                $this->form_data[ $element_id ] = $this->getData( $element_id );
            }
        }

        return $this->form_data;
    }



}