WordPress.org

Make WordPress Core

Ticket #10952: update-plugins.php

File update-plugins.php, 2.0 KB (added by Denis-de-Bernardy, 4 years ago)
Line 
1<?php
2function get_plugins($checked = null) {
3        $obj = get_transient('sem_update_plugins');
4
5        if ( !is_object($obj) ) {
6                $obj = new stdClass;
7                $obj->last_checked = false;
8                $obj->checked = array();
9                $obj->response = array();
10        }
11
12        if ( in_array(current_filter(), array('load-plugins.php', 'load-tools_page_sem-tools')) ) {
13                $timeout = 3600;
14        } else {
15                $timeout = 43200;
16        }
17       
18        if ( is_array($checked) && $checked && $obj->checked && $obj->checked != $checked ) {
19                delete_transient('sem_update_plugins');
20                delete_transient('update_plugins');
21                return false;
22        }
23       
24        if ( ( $obj->last_checked >= time() - $timeout ) || $_POST )
25                return $obj->response;
26       
27        global $wp_version;
28       
29        if ( !function_exists('get_plugins') )
30                require_once ABSPATH . 'wp-admin/includes/plugin.php';
31       
32        $obj->last_checked = time();
33        set_transient('sem_update_plugins', $obj);
34       
35        $url = version_checker_server;
36       
37        $to_check = get_plugins();
38        $check = array();
39       
40        foreach ( $to_check as $file => $plugin )
41                $check[$file] = $plugin['Version'];
42       
43        $obj->checked = $check;
44        set_transient('sem_update_plugins', $obj);
45       
46        $body = array(
47                'check' => $check,
48                'locale' => apply_filters('core_version_check_locale', get_locale()),
49                );
50       
51        $options = array(
52                'timeout' => 3,
53                'body' => $body,
54                'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo('url'),
55                );
56       
57        $cache_id = md5(serialize(array($url, $options)));
58        $raw_response = wp_cache_get($cache_id, 'sem_api');
59       
60        if ( $raw_response === false ) {
61                $raw_response = wp_remote_post($url, $options);
62                wp_cache_set($cache_id, $raw_response, 'sem_api');
63        }
64       
65        if ( is_wp_error($raw_response) )
66                set_transient('sem_api_error', $raw_response->get_error_messages());
67        else
68                delete_transient('sem_api_error');
69       
70        if ( is_wp_error($raw_response) || 200 != $raw_response['response']['code'] )
71                $response = false;
72        else
73                $response = @unserialize($raw_response['body']);
74       
75        if ( $response !== false ) { // keep old response in case of error
76                $obj->response = $response;
77                set_transient('sem_update_plugins', $obj);
78        }
79       
80        return $obj;
81}
82
83?>