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/multi_elements.php
<?php

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

abstract class ncore_AdminMultiElementsController extends ncore_AdminBaseController
{
    protected function elementSelectorLevelCount()
    {
        return 0;
    }

    protected function elementOptions( $level=1 )
    {
        return array();
    }

    protected function elementSelectionMandatory()
    {
        return false;
    }

    final protected function elementSelectorLevels( $max_level='all')
    {
        $levels = array();
        for ($level=1; $level<=$this->elementSelectorLevelCount(); $level++)
        {
            if ($max_level==='all' || $level<=$max_level)
            {
                $levels[] = $level;
            }
            else
            {
                break;
            }
        }
        return $levels;
    }

    protected function pageHeadlineSuffix()
    {
        if ($this->haveElementSelection())
        {
            $selector = $this->renderElementSelector( ' ' );
            return ' ' . $selector;
        }
        else
        {
            return '';
        }
    }

    protected function setSelectedElement( $level, $id )
    {
        $selected =& $this->selectedElement[ $level ];
        $selected = $id;
    }

    protected function selectedElement( $level=1 )
    {
        $selected =& $this->selectedElement[ $level ];
        if (!isset($selected))
        {
            $selected = false;

            $name = $this->elementSelectorName($level);
            $element_id = ncore_retrieve( $_POST, $name );
            if (!$element_id)
            {
                $element_id =ncore_retrieve( $_GET, $name );
            }

            $options = $this->elementOptions( $level );

            if ($options)
            {
                $have_valid_tab = isset( $options[ $element_id ] );

                if (!$have_valid_tab)
                {
                    $element_ids = array_keys( $options );
                    $element_id = $element_ids[0];
                }

                $selected = $element_id;
            }
        }

        return $selected;
    }

    protected function renderInstructions()
    {
        if ($this->haveElementSelection()
            || !$this->elementSelectionMandatory())
        {
            parent::renderInstructions();
        }
    }

    protected function currentUrlArgs()
    {
        $args = parent::currentUrlArgs();

        foreach ($this->elementSelectorLevels() as $level) {

            $name = $this->elementSelectorName($level);
            $id   = $this->selectedElement( $level );

            $args[ $name ] = $id;
        }

        return $args;
    }


    protected function loadView()
    {
        if ($this->mustLoadNoElementsView())
        {
            $this->loadNoElementsView();
        }
        else
        {
            parent::loadView();
        }
    }

    protected function loadNoElementsView()
    {
        $view = $this->noElementsViewName();

        $data = $this->noElementsViewData();

        extract( $data );

        $rootdir = $this->api->rootDir();

        $path = "$rootdir/application/view/$view.php";

        if (file_exists( $path ))
        {
            require $path;
            return;
        }

        $path = "$rootdir/system/view/$view.php";

        require $path;
    }

    protected function noElementsViewName()
    {
        return 'admin/message';
    }

    protected function noElementsMessage()
    {
        return _ncore( 'Currently you have no elements to edit.');
    }

    protected function noElementsViewData()
    {
        $data = array();

        $data['message'] = $this->noElementsMessage();

        return $data;
    }

    protected function elementSelectorName( $level=1 )
    {
        $suffix = $level >= 2
                ? "_$level"
                : '';
        return "element$suffix";
    }

    private $selectedElement = array();

    private function renderElementSelector( $seperator= ' ' )
    {
        $this->api->load->helper( 'html_input' );

        $page = $this->myAdminPage();

        $url = $this->api->link_logic->adminPage( $page  );

        $tab = $this->currentTab();
        if ($tab)
        {
            $url = ncore_addArgs( $url, array( 'tab' => $tab ), '&' );
        }

        $model = $this->api->load->model( 'logic/html' );

        $selects = array();
        foreach ($this->elementSelectorLevels() as $level)
        {
            $one_url = $url;

            foreach ($this->elementSelectorLevels($level-1) as $i)
            {
                $n = $this->elementSelectorName( $i );
                $v = $this->selectedElement( $i );
                $one_url .= "&$n=$v";
            }

            $options = $this->elementOptions( $level );
            $name = $this->elementSelectorName( $level );
            $selected = $this->selectedElement( $level);

            $js_on_select = "location.href=\"$one_url&$name=\" + ncoreJQ(this).val()";

            $model->jsChange( "select[name=$name]", $js_on_select );

            $selects[] = ncore_htmlSelect( $name, $options, $selected );
        }

        return implode( $seperator, $selects );
    }

    private function haveElementSelection()
    {
        $elements_enabled = $this->elementSelectorLevelCount() >= 1
                        && count($this->elementOptions( $level=1 ) ) >= 1;

        return $elements_enabled;
    }

    private function mustLoadNoElementsView()
    {
        if ($this->haveElementSelection())
        {
            return false;
        }

        if ($this->elementSelectionMandatory())
        {
            return true;
        }

        return false;
    }
}