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/application/model/data/advanced_forms.php
<?php

class digimember_AdvancedFormsData extends ncore_BaseData
{
    const ADVANCED_FORM_ID_LENGTH = 15;

    public function dataType()
    {
        return NCORE_MODEL_DATA_TYPE_ADVANCED_FORM;
    }

    public function options( $where=array())
    {
        return $this->asArray( 'name', 'id', $where );
    }

    protected function sqlBaseTableName()
    {
        return 'advanced_forms';
    }

    protected function serializedColumns()
    {
        return array(
            'pages',
            'products',
            'formDimensions',
            'requiredElements',
        );
    }

    protected function onBeforeCopy( &$data )
    {
        parent::onBeforeSave( $data );

        $have_pages = !empty( $data[ 'pages' ] );
        if ($have_pages)
        {
            foreach ($data[ 'pages' ] as $index => $one)
            {
                $data[ 'pages' ][ $index ]['id'] = $this->_generateId();

                foreach ($one[ 'elements' ] as $i => $answer)
                {
                    $data[ 'pages' ][ $index ]['elements'][$i]['id'] = $this->_generateId();
                }
            }
        }
    }


    protected function onBeforeSave( &$data )
    {
        //$advancedFormsElementsModel = $this->api->load->model('data/advanced_forms_elements');
        parent::onBeforeSave( $data );

    }

    protected function cleanNotSubmittedButSavedPagesElements($formElementId, $submittedPages) {
        $advancedFormsModel = $this->api->load->model('data/advanced_forms');
        $advancedFormsElementsModel = $this->api->load->model('data/advanced_forms_elements');

        $whereForFormsWithId = array(
            'elementId'    => $formElementId,
        );
        $savedForms = (array) $advancedFormsModel->getAll($whereForFormsWithId);
        foreach ($savedForms as $savedForm) {
            $savedForm = (array) $savedForm;
            $savedFormPages = $savedForm['pages'];
            foreach ($savedFormPages as $savedPage) {
                $pageFound = false;
                foreach ($submittedPages as $submittedPage) {
                    if ($savedPage['id'] === $submittedPage['id']) {
                        $pageFound = true;
                    }
                }
                if (!$pageFound) {
                    //delete pageElements
                    $whereElementsToDelete = array(
                        'formElementId'    => $formElementId,
                        'pageId' => $savedPage['id'],
                    );
                    $elementsToDelete = $advancedFormsElementsModel->getAll($whereElementsToDelete);
                    foreach ($elementsToDelete as $elementToDelete) {
                        $advancedFormsElementsModel->delete($elementToDelete->id);
                    }
                }
            }
        }
    }

    protected function sqlTableMeta()
    {
       $columns = array(
            'name'                   => 'string[127]',
            'elementId'                   => 'string[127]',
            'page_count'         => 'int',
            'element_count'           => 'int',
            'product_count' => 'int',
            'hasErrors' => ['type' => 'yes_no_bit', 'default' => 'Y'],
       );

       $indexes = array( /*'order_id', 'product_id', 'email'*/ );

       $meta = array(
        'columns' => $columns,
        'indexes' => $indexes,
       );

       return $meta;
    }

    protected function buildObject( $obj )
    {
        parent::buildObject( $obj );
    }


    protected function hasTrash()
    {
        return true;
    }

    protected function defaultValues()
    {
        $values = parent::defaultValues();

        return $values;
    }

    protected function hasModified()
    {
        return true;
    }

    protected function sanitizeSerializedData( $column, $array )
    {
        switch ($column)
        {
            case 'pages':
                return $this->_sanitzePages( $array );

            default:
                return $array;
        }
    }

    protected function _sanitzePages( $pages )
    {
        return $pages;
    }


    private function _generateId()
    {
        $this->api->load->helper( 'string' );
        return ncore_randomString( 'alnum_upper', self::ADVANCED_FORM_ID_LENGTH );
    }

    /**
     * createTableIfNeeded
     * creates table of the model when called and the table doesnt exist.
     * @return bool
     */
    public function createTableIfNeeded() {
        global $wpdb;
        $table_name = $this->sqlTableName();
        $query = $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->esc_like( $table_name ) );
        if ( ! $wpdb->get_var( $query ) == $table_name ) {
            $initCore = $this->api->init();
            $initCore->forceUpgrade();
            return true;
        }
        return false;
    }

    public function createSampleDataIfNeeded() {
        $forms = $this->getAll();
        if (is_array($forms) && count($forms) < 1) {
            $config = $this->api->load->config('advanced_forms');
            $sampleData = $config->get('forms_sampledata');
            $formsController = $this->api()->load->controller("admin/advanced_forms_edit");

            $lang = substr(get_locale(), 0, 2);
            if (array_key_exists($lang, $sampleData)) {
                $sampleData = $sampleData[$lang];
            }
            else {
                $sampleData = $sampleData["en"];
            }
            foreach ($sampleData as $sample) {
                $id = $this->create($sample['form']);
                $formsController->saveFormElements($id, $sample['elements']);
            }
        }
    }
}