HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: /var/www/html/triad-infosec/wp-content/plugins/autoupdater/lib/Task/DatabaseUpdateElementor.php
<?php

defined('AUTOUPDATER_LIB') or die;

class AutoUpdater_Task_DatabaseUpdateElementor extends AutoUpdater_Task_Base
{
    /**
     * @return array
     */
    public function doTask()
    {
        $success = false;
        $message = '';
        $plugin_slug = $this->input('slug');

        if (substr($plugin_slug, -4) !== '.php') {
            $plugin_slug .= '.php';
        }

        if ($plugin_slug != 'elementor-pro/elementor-pro.php' && $plugin_slug != 'elementor/elementor.php') {
            return array(
                'success' => true,
                'message' => 'Slug does not match either Elementor or Elementor Pro slugs'
            );
        }

        $plugin_dir = '/' . strtok($plugin_slug, '/');
        $plugin_name = 'Elementor' . (strpos($plugin_slug, 'pro') !== false ? ' Pro' : '');
        $plugin_file_name = strpos($plugin_slug, 'pro') !== 'false' ? ' elementor-pro.php' : 'elementor.php';


        if (!is_plugin_active($plugin_slug)) {
            return array(
                'success' => true,
                'message' => $plugin_name . ' plugin is not active, skipping database update'
            );
        }

        if (
            file_exists(WP_PLUGIN_DIR . $plugin_dir . '/' . $plugin_file_name)
            && file_exists(WP_PLUGIN_DIR . $plugin_dir .  '/core/upgrade/manager.php')
        ) {
            include_once WP_PLUGIN_DIR . $plugin_dir . '/' . $plugin_file_name;
            include_once WP_PLUGIN_DIR . $plugin_dir . '/core/upgrade/manager.php';
        }

        $manager_class = '\Elementor\Core\Upgrade\Manager';

        if (!class_exists($manager_class)) {
            return array(
                'success' => true,
                'needs_refactor' => true,
                'message' =>  $plugin_name . ' plugin upgrade manager class not found, check for source code updates',
            );
        }

        $manager = new $manager_class();

        if (
            !method_exists($manager, 'should_upgrade')
            || !method_exists($manager, 'get_task_runner')
            || !method_exists($manager, 'get_upgrade_callbacks')
            || !method_exists($manager, 'on_runner_complete')
        ) {
            return array(
                'success' => true,
                'needs_refactor' => true,
                'message' =>  $plugin_name . ' plugin upgrade manager methods not found, check for source code updates',
            );
        }


        if (!$manager->should_upgrade()) {
            return array(
                'success' => true,
                'message' => 'The DB is already updated. Skipping...'
            );
        }

        try {
            $updater = $manager->get_task_runner();
            $callbacks = $manager->get_upgrade_callbacks();
            $did_tasks = false;
            if (!empty($callbacks)) {
                $updater->handle_immediately($callbacks);
                $did_tasks = true;
            }
            $manager->on_runner_complete($did_tasks);
            $success = true;
            $message = $plugin_name . ' plugin database upgraded successfully';
        } catch (Exception $err) {
            $message = $err->getMessage();
        }

        return array(
            'success' => $success,
            'message' => $message
        );
    }
}