Files
roi-theme/wp-content/plugins/sociallocker-next-premium/bizpanda/libs/onepress/updates/updates.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

439 lines
17 KiB
PHP
Executable File

<?php
/**
* The file contains a class and a set of helper methods to manage updates.
*
* @author Paul Kashtanoff <paul@byonepress.com>
* @copyright (c) 2013, OnePress Ltd
*
* @package onepress-updates
* @since 1.0.0
*/
add_action('onp_updates_325_plugin_created', 'onp_updates_325_plugin_created');
function onp_updates_325_plugin_created( $plugin ) {
$manager = new OnpUpdates325_Manager( $plugin );
$plugin->updates = $manager;
}
/**
* The Updates Manager class.
*
* @since 1.0.0
*/
class OnpUpdates325_Manager {
/**
* Current factory plugin.
*
* @since 1.0.0
* @var Factory325_Plugin
*/
public $plugin;
/**
* Data about the last version check.
*
* @since 1.0.0
* @var array
*/
public $lastCheck;
/**
* Creates an instance of the update manager.
* @param type $plugin
*/
public function __construct( $plugin ) {
$this->plugin = $plugin;
$this->lastCheck = get_option('onp_version_check_' . $this->plugin->pluginName, null);
$this->word = $this->lastCheck ? $this->lastCheck : 'never';
// if a plugin is not licensed, or a user has a license key
if ( $this->needCheckUpdates() ) {
// an action that is called by the cron to check updates
add_action('onp_check_upadates_' . $this->plugin->pluginName, array($this, 'checkUpdatesAuto'));
// if a special constant set, then forced to check updates
if ( defined('ONP_DEBUG_CHECK_UPDATES') && ONP_DEBUG_CHECK_UPDATES ) $this->checkUpdates();
}
if ( is_admin() ) {
// if the license build and the plugin build are not equal
if ( $this->needChangeAssembly() ) {
$this->updatePluginTransient();
add_filter('factory_plugin_row_' . $this->plugin->pluginName, array($this, 'showChangeAssemblyPluginRow' ), 10, 3);
add_filter('factory_notices_' . $this->plugin->pluginName, array( $this, 'addNotices'), 10, 2);
}
add_action('admin_notices', array($this, 'clearTransient'));
if ( $this->needCheckUpdates() || $this->needChangeAssembly() ) {
// the method that responses for changin plugin transient when it's saved
add_filter('pre_set_site_transient_update_plugins', array($this, 'changePluginTransient'));
// filter that returns info about available updates
add_filter('plugins_api', array($this, 'getUpdateInfo'), 10, 3);
}
// activation and deactivation hooks
add_action('factory_plugin_activation_or_update_' . $plugin->pluginName, array($this, 'activationOrUpdateHook'));
add_action('factory_plugin_deactivation_' . $plugin->pluginName, array($this, 'deactivationHook'));
}
}
/**
* Need to check updates?
* @return bool
*/
public function needCheckUpdates() {
return !isset( $this->plugin->options['host'] ) || $this->plugin->options['host'] == 'onepress';
}
/**
* Need to change a current assembly?
* @return bool
*/
public function needChangeAssembly() {
if ( $this->plugin->build === 'offline' ) return false;
return isset( $this->plugin->license ) && ( $this->plugin->build !== $this->plugin->license->build );
}
/**
* Returns true if a plugin version has been checked up to the moment.
* @return boolean
*/
public function isVersionChecked() {
return !( empty($this->lastCheck) ) && isset( $this->lastCheck['Version'] );
}
/**
* Returns true if a plugin version is actual.
* @return boolean
*/
public function isActualVersion() {
if ( $this->needChangeAssembly() ) return false;
if ( !$this->needCheckUpdates() ) return true;
if ( !isset($this->lastCheck['Version']) ) return true;
$currentVersion = $this->plugin->version;
$serverVersion = $this->lastCheck['Version'];
if ( empty($serverVersion) || empty($serverVersion) ) return true;
return (version_compare($currentVersion, $serverVersion, '>='));
}
// -------------------------------------------------------------------------------------
// Activation and deactivation
// -------------------------------------------------------------------------------------
/**
* Calls on plugin activation or updating.
*/
public function activationOrUpdateHook() {
// set cron tasks and clear last version check data
if ( !wp_next_scheduled( 'onp_check_upadates_' . $this->plugin->pluginName ) ) {
wp_schedule_event( time(), 'twicedaily', 'onp_check_upadates_' . $this->plugin->pluginName );
}
$this->clearUpdates();
}
/**
* Calls on plugin deactivation .
*/
public function deactivationHook() {
// clear cron tasks and license data
if ( wp_next_scheduled( 'onp_check_upadates_' . $this->plugin->pluginName ) ) {
$timestamp = wp_next_scheduled( 'onp_check_upadates_' . $this->plugin->pluginName );
wp_unschedule_event( $timestamp, 'onp_check_upadates_' . $this->plugin->pluginName );
}
$this->clearUpdates();
}
// -------------------------------------------------------------------------------------
// Checking updates
// -------------------------------------------------------------------------------------
public function checkUpdatesAuto() {
$lastTime = intval( get_option( 'onp_last_check_' . $this->plugin->pluginName ) );
if ( !$lastTime ) $lastTime = 0;
if ( time() > $lastTime + 10800 ) {
$this->checkUpdates();
update_option( 'onp_last_check_' . $this->plugin->pluginName, time() );
}
}
public function checkUpdates() {
$data = $this->sendRequest( 'GetCurrentVersion' );
if ( is_wp_error( $data ) ) {
$result = array();
$result['Checked'] = time();
$result['Error'] = $data->get_error_message();
update_option('onp_version_check_' . $this->plugin->pluginName, $result);
$this->lastCheck = $result;
} else {
$data['Checked'] = time();
update_option('onp_version_check_' . $this->plugin->pluginName, $data);
$this->lastCheck = $data;
do_action('onp_api_ping_' . $this->plugin->pluginName, $data);
}
$this->updatePluginTransient();
return $data;
}
/**
* Clears info about updates for the plugin.
*/
public function clearUpdates() {
delete_option('onp_version_check_' . $this->plugin->pluginName);
$this->lastCheck = null;
$transient = $this->changePluginTransient( get_site_transient('update_plugins') );
if ( !empty( $transient) ) {
unset($transient->response[$this->plugin->relativePath]);
onp_updates_325_set_site_transient('update_plugins', $transient);
}
}
/**
* Fix a bug when the message offering to change assembly appears even if the assemble is correct.
* @return type
*/
public function clearTransient() {
$screen = get_current_screen();
if ( empty($screen) ) return;
if ( in_array( $screen->base, array('plugins', 'update-core') ) ) {
$this->updatePluginTransient();
}
}
/**
* Calls a basic method to get info about updates and saves it into updates transient.
*/
public function updatePluginTransient() {
$transient = $this->changePluginTransient( get_site_transient('update_plugins') );
onp_updates_325_set_site_transient('update_plugins', $transient);
}
/**
* Updates a given transient to add info about updates of a current plugin.
*/
public function changePluginTransient( $transient ) {
if ( empty( $transient ) ) $transient = new stdClass();
// migrating from one assembly to another one
if ( $this->needChangeAssembly() ) {
$obj = new stdClass();
$obj->slug = $this->plugin->pluginSlug;
$obj->new_version = '[ migrate-to-' . $this->plugin->license->build . ' ]';
$obj->plugin = $this->plugin->relativePath;
$queryArgs = array(
'plugin' => $this->plugin->pluginName,
'assembly' => $this->plugin->license->build,
'site' => site_url(),
'secret' => get_option('onp_site_secret', null),
'tracker' => $this->plugin->tracker
);
if ( defined('FACTORY_BETA') && FACTORY_BETA ) $queryArgs['beta'] = true;
$obj->package = $this->plugin->options['api'] . 'GetPackage?' . http_build_query($queryArgs);
$obj->changeAssembly = true;
$transient->response[$this->plugin->relativePath] = $obj;
return $transient;
} else {
if ( isset($transient->response[$this->plugin->relativePath]) ) {
$r = $transient->response[$this->plugin->relativePath];
if ( property_exists($r, 'changeAssembly') ) {
unset($transient->response[$this->plugin->relativePath]);
return $transient;
}
}
}
// if we don't need to check update, return original transient data,
// for example if we use a free version of the plugin that is updated from wordpress.org
if ( !$this->needCheckUpdates() ) return $transient;
// if we have data about the last version check
if ( isset( $this->lastCheck['Version'] ) ) {
// nothing to do if the plugin version is the last one
if (version_compare($this->plugin->version, $this->lastCheck['Version'], '>=')) {
unset($transient->response[$this->plugin->relativePath]);
return $transient;
}
// if the plugin version is less then the remote one
$obj = new stdClass();
$obj->slug = $this->plugin->pluginSlug;
$obj->new_version = $this->lastCheck['Version'];
$obj->url = $this->plugin->options['api'] . 'GetDetails?' . http_build_query(array(
'version' => $this->lastCheck['Id']
));
$queryArgs = array(
'versionId' => $this->lastCheck['Id'],
'site' => site_url(),
'secret' => get_option('onp_site_secret', null),
'tracker' => $this->plugin->tracker
);
if ( defined('FACTORY_BETA') && FACTORY_BETA ) $queryArgs['beta'] = true;
$obj->package = $this->plugin->options['api'] . 'GetPackage?' . http_build_query($queryArgs);
$transient->response[$this->plugin->relativePath] = $obj;
return $transient;
}
unset($transient->response[$this->plugin->relativePath]);
return $transient;
}
/**
* Gets info about update.
*/
public function getUpdateInfo($false, $action, $arg) {
if (!empty($arg) && isset($arg->slug) && $arg->slug === $this->plugin->pluginSlug) {
// if we need to change a current assembly, then nothing to say about the update
if ( $this->needChangeAssembly() ) {
?>
<strong>Migration to another plugin assenbly.</strong>
<?php
return $false;
}
$package = $this->plugin->options['api'] . 'GetPackage?' . http_build_query(array(
'versionId' => $this->lastCheck['Id'],
'site' => site_url(),
'secret' => get_option('onp_site_secret', null)
));
$data = $this->sendRequest( 'GetDetails?' . http_build_query(array(
'version' => $this->lastCheck['Id']
)), array(
'skipBody' => true,
'method' => 'GET'
));
if ( is_wp_error( $data ) ) {
?>
<strong><?php echo $data->get_error_message() ?></strong>
<?php
return $false;
}
$obj = new stdClass();
$obj->slug = $this->plugin->pluginSlug;
$obj->homepage = $data['Homepage'];
$obj->name = $this->plugin->pluginTitle;
$obj->plugin_name = $this->plugin->pluginSlug;
$obj->new_version = $data['Version'];
$obj->requires = $data['Requires'];
$obj->tested = $data['Tested'];
$obj->downloaded = $data['Downloads'];
$obj->last_updated = date('Y-m-d H:i:s', $data['Registered']);
$obj->download_link = $package;
$obj->sections = array(
'Changes' => $data['VersionDescription']
);
return $obj;
}
return $false;
}
public function showChangeAssemblyPluginRow( $messages, $file, $plugin_data ) {
if ( !$this->needChangeAssembly() ) return $messages;
$current = get_site_transient( 'update_plugins' );
if ( !isset( $current->response[ $file ] ) ) return $messages;
$r = $current->response[ $file ];
if ( ! current_user_can('update_plugins') ) {
$message = sprintf(
__('You changed the license type. Please download "%1$s" assembly', 'onepress_updates_000'),
$this->plugin->license->build
);
} else if ( empty($r->package) ) {
$message = sprintf(
__('You changed the license type. Please download "%1$s" assembly. <em>Automatic update is unavailable for this plugin.</em>', 'onepress_updates_000'),
$this->plugin->license->build
);
} else {
$message = sprintf(
__('You successfully changed the license type. Please install another plugin assembly (%1$s). <a href="%2$s">Update it now</a>.', 'onepress_updates_000'),
$this->plugin->license->build,
wp_nonce_url( self_admin_url('update.php?action=upgrade-plugin&plugin=') . $file, 'upgrade-plugin_' . $file)
);
}
return array($message);
}
public function addNotices( $notices ) {
if ( $this->needChangeAssembly() ) {
$notices[] = array(
'id' => $this->plugin->pluginName . '-change-assembly',
'where' => array('dashboard', 'edit', 'post'),
// content and color
'class' => 'alert alert-danger onp-need-change-assembly',
'header' => __('Please update the plugin', 'onepress_updates_000'),
'message' => sprintf(__('You changed a license type for <strong>%s</strong>. But the license you use\'re currently requires another plugin assembly.<br />The plugin won\'t work fully until you download the proper assembly. Don\'t worry it takes only 5 seconds and all your data will be saved.', 'onepress_updates_000'), $this->plugin->pluginTitle),
// buttons and links
'buttons' => array(
array(
'title' => __('Visit the Plugins page', 'onepress_updates_000'),
'class' => 'btn btn-danger',
'action' => "plugins.php"
)
)
);
}
return $notices;
}
// -------------------------------------------------------------------------------------
// Tools
// -------------------------------------------------------------------------------------
/**
* Sends request to the update server.
*/
protected function sendRequest($action, $args = array()) {
$args['timeout'] = 8;
return $this->plugin->api->request( $action, $args );
}
}
?>