Server IP : 172.24.0.40 / Your IP : 216.73.216.10 Web Server : Apache System : Linux dbweb26.ust.edu.ph 4.18.0-513.5.1.el8_9.x86_64 #1 SMP Fri Sep 29 05:21:10 EDT 2023 x86_64 User : apache ( 48) PHP Version : 8.2.18 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/tomas/public_html/wp-content/plugins/ninja-forms/includes/AJAX/REST/ |
Upload File : |
<?php if ( ! defined( 'ABSPATH' ) ) exit; class NF_AJAX_REST_RequiredUpdate extends NF_AJAX_REST_Controller { private $updates = array(); private $running = array(); protected $action = 'nf_required_update'; public function __construct() { parent::__construct(); } /** * POST * @param array $request_data [ int $clone_id ] * @return array $data [ int $new_form_id ] */ public function post( $request_data ) { $data = array(); // Does the current user have admin privileges if (!current_user_can('manage_options')) { $data['error'] = esc_html__('Access denied. You must have admin privileges to perform this action.', 'ninja-forms'); return $data; } // If we don't have a nonce... // OR if the nonce is invalid... if ( ! isset( $request_data[ 'security' ] ) || ! wp_verify_nonce( $request_data[ 'security' ], 'ninja_forms_required_update_nonce' ) ) { // Kick the request out now. $data[ 'error' ] = esc_html__( 'Request forbidden.', 'ninja-forms' ); return $data; } $doing_updates = get_option( 'ninja_forms_doing_required_updates' ); // If we're not already doing updates... if ( ! $doing_updates ) { // Get our list of already run updates. $processed = get_option( 'ninja_forms_required_updates', array() ); // Get our list of updates to run. $this->updates = Ninja_Forms()->config( 'RequiredUpdates' ); // Sort our updates. $this->running = $this->sort_updates( $this->updates, $processed ); } // Otherwise... (We are already processing updates.) else { $this->running = $doing_updates; } // Call the class of our current update. $class = $this->running[ 0 ][ 'class_name' ]; $update_class = new $class( $request_data, $this->running ); } /** * GET * @param $request_data (Array) * @return $data (Array) * * @since 3.4.0 */ public function get( $request_data ) { $data = array(); $data[ 'updates' ] = array(); // Get our list of already run updates. $processed = get_option( 'ninja_forms_required_updates', array() ); // Get our list of updates yet to be run. $this->updates = Ninja_Forms()->config( 'RequiredUpdates' ); // Sort our updates. $sorted = $this->sort_updates( $this->updates, $processed ); $data[ 'updates' ] = $sorted; return $data; } protected function get_request_data() { $request_data = array(); if (isset($_REQUEST['data']) && $_REQUEST['data']) { $request_data['data'] = WPN_Helper::sanitize_text_field($_REQUEST['data']); } if( isset( $_REQUEST[ 'security' ] ) && $_REQUEST[ 'security' ] ){ $request_data[ 'security' ] = WPN_Helper::sanitize_text_field($_REQUEST[ 'security' ]); } if( isset( $_REQUEST[ 'action' ] ) && $_REQUEST[ 'action' ] ){ $request_data[ 'action' ] = WPN_Helper::sanitize_text_field($_REQUEST[ 'action' ]); } return $request_data; } /** * Function to get the list of updates that need to run. * * @param $processed (Array) The list of updates that have already run on this install. * @return Array */ private function get_current_updates( $processed ) { $updates = array(); // For each update in the list... foreach ( $this->updates as $slug => $update ) { // If we've not already processed it... if ( ! isset( $processed[ $slug ] ) ) { // Add it to our list. $updates[ $slug ] = $update; } } return $updates; } /** * Function to sort the updates to be run. * * @param $current (Array) The list of updates to be run. * @param $previous (Array) The list of updates that have already been run. * @return Array */ private function sort_updates( $current, $previous ) { $sorted = array(); $queue = array(); // While we have not finished sorting updates... while ( count( $sorted ) < count( $current ) ) { // For each update we wish to run... foreach ( $current as $slug => $update ) { // Migrate the slug to a property. $update[ 'slug' ] = $slug; // If we've not already added this to the sorted list... if ( ! in_array( $update, $sorted ) ) { // If it has requirements... if ( ! empty( $update[ 'requires' ] ) ) { $enqueued = 0; // For each requirement... foreach ( $update[ 'requires' ] as $requirement ) { // If the requirement doesn't exist... if ( ! isset( $this->updates[ $requirement ] ) ) { // unset the update b/c we are missing requirements unset( $current[ $slug ] ); unset( $this->updates[ $slug ] ); } // If the requirement has already been added to the stack... if ( in_array( $requirement, $queue ) ) { $enqueued++; } // OR If the requirement has already been processed... elseif ( isset( $previous[ $requirement ] ) ) { $enqueued++; } } // If all requirement are met... if ( $enqueued == count( $update[ 'requires' ] ) ) { // Add it to the list. array_push( $sorted, $update ); // Record that we enqueued it. array_push( $queue, $slug ); } } // Otherwise... (It has no requirements.) else { // Add it to the list. array_push( $sorted, $update ); // Record that we enqueued it. array_push( $queue, $slug ); } } } } return $sorted; } }