This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | /** |
||
3 | * Update Plugin |
||
4 | * |
||
5 | * @package SimpleCalendar/Updates |
||
6 | */ |
||
7 | namespace SimpleCalendar; |
||
8 | |||
9 | if ( ! defined( 'ABSPATH' ) ) { |
||
10 | exit; |
||
11 | } |
||
12 | |||
13 | /** |
||
14 | * Update script. |
||
15 | * |
||
16 | * Updates the installed plugin to the current version. |
||
17 | * |
||
18 | * @since 3.0.0 |
||
19 | */ |
||
20 | class Update { |
||
21 | |||
22 | /** |
||
23 | * Previous version. |
||
24 | * |
||
25 | * @access protected |
||
26 | * @var string |
||
27 | */ |
||
28 | private $installed_ver = '0.0.0'; |
||
29 | |||
30 | /** |
||
31 | * Current version. |
||
32 | * |
||
33 | * @access private |
||
34 | * @var string |
||
35 | */ |
||
36 | private $new_ver = '0.0.0'; |
||
37 | |||
38 | /** |
||
39 | * Existing posts. |
||
40 | * |
||
41 | * @access private |
||
42 | * @var array |
||
43 | */ |
||
44 | private $posts = array(); |
||
45 | |||
46 | /** |
||
47 | * Update path. |
||
48 | * |
||
49 | * @access private |
||
50 | * |
||
51 | * @var array |
||
52 | */ |
||
53 | private $update_path = array( |
||
54 | '2.1.0', |
||
55 | '2.2.0', |
||
56 | '3.0.0', |
||
57 | '3.0.13', |
||
58 | ); |
||
59 | |||
60 | /** |
||
61 | * Constructor. |
||
62 | * |
||
63 | * @since 3.0.0 |
||
64 | * |
||
65 | * @param string $version (optional) Current plugin version, defaults to value in plugin constant. |
||
66 | */ |
||
67 | public function __construct( $version = SIMPLE_CALENDAR_VERSION ) { |
||
68 | // Look for previous version in current or legacy option, null for fresh install. |
||
69 | $installed = get_option( 'simple-calendar_version', null ); |
||
70 | $this->installed_ver = is_null( $installed ) ? get_option( 'gce_version', null ) : $installed; |
||
71 | $this->new_ver = $version; |
||
72 | |||
73 | if ( version_compare( $this->installed_ver, $this->new_ver, '<' ) ) { |
||
74 | $this->run_updates(); |
||
75 | } |
||
76 | } |
||
77 | |||
78 | /** |
||
79 | * Update to current version. |
||
80 | * |
||
81 | * Runs all the update scripts through version steps. |
||
82 | * |
||
83 | * @since 3.0.0 |
||
84 | */ |
||
85 | public function run_updates() { |
||
86 | |||
87 | do_action( 'simcal_before_update', $this->installed_ver ); |
||
88 | |||
89 | if ( ! is_null( $this->installed_ver ) ) { |
||
90 | |||
91 | if ( version_compare( $this->installed_ver, $this->new_ver ) === -1 ) { |
||
92 | |||
93 | $post_type = version_compare( $this->installed_ver, '3.0.0' ) === -1 ? 'gce_feed' : 'calendar'; |
||
94 | $this->posts = $this->get_posts( $post_type ); |
||
95 | |||
96 | foreach ( $this->update_path as $update_to ) { |
||
97 | if ( version_compare( $this->installed_ver, $update_to, '<' ) ) { |
||
98 | $this->update( $update_to ); |
||
99 | } |
||
100 | } |
||
101 | |||
102 | } |
||
103 | |||
104 | simcal_delete_feed_transients(); |
||
105 | |||
106 | } else { |
||
107 | |||
108 | new Post_Types(); |
||
109 | flush_rewrite_rules(); |
||
110 | |||
111 | } |
||
112 | |||
113 | do_action( 'simcal_updated', $this->new_ver ); |
||
114 | |||
115 | // Redirect to a welcome page if new install or major update. |
||
116 | if ( is_null( $this->installed_ver ) ) { |
||
117 | set_transient( '_simple-calendar_activation_redirect', 'fresh', 60 ); |
||
118 | } else { |
||
119 | $major_new = substr( $this->new_ver, 0, strrpos( $this->new_ver, '.' ) ); |
||
120 | $major_old = substr( $this->installed_ver, 0, strrpos( $this->installed_ver, '.' ) ); |
||
121 | if ( version_compare( $major_new, $major_old, '>' ) ) { |
||
122 | set_transient( '_simple-calendar_activation_redirect', 'update', 60 ); |
||
123 | } elseif ( $major_old == $major_new ) { |
||
124 | $version = explode( '.', $this->new_ver ); |
||
125 | end( $version ); |
||
126 | if ( 0 === intval( current( $version ) ) ) { |
||
127 | set_transient( '_simple-calendar_activation_redirect', 'update', 60 ); |
||
128 | } |
||
129 | } |
||
130 | } |
||
131 | |||
132 | $this->admin_redirects(); |
||
133 | |||
134 | update_option( 'simple-calendar_version', $this->new_ver ); |
||
135 | } |
||
136 | |||
137 | /** |
||
138 | * Handle redirects to welcome page after install and updates. |
||
139 | * |
||
140 | * Transient must be present, the user must have access rights, and we must ignore the network/bulk plugin updaters. |
||
141 | * |
||
142 | * @since 3.0.0 |
||
143 | */ |
||
144 | public function admin_redirects() { |
||
145 | |||
146 | $transient = get_transient( '_simple-calendar_activation_redirect' ); |
||
147 | |||
148 | if ( ! $transient || is_network_admin() || isset( $_GET['activate-multi'] ) || ! current_user_can( 'manage_options' ) ) { |
||
149 | return; |
||
150 | } |
||
151 | |||
152 | delete_transient( '_simple-calendar_activation_redirect' ); |
||
153 | |||
154 | // Do not redirect if already on welcome page screen. |
||
155 | if ( ! empty( $_GET['page'] ) && in_array( $_GET['page'], array( 'simple-calendar_about' ) ) ) { |
||
156 | return; |
||
157 | } |
||
158 | |||
159 | $url = add_query_arg( |
||
160 | 'simcal_install', |
||
161 | esc_attr( $transient ), |
||
162 | admin_url( 'index.php?page=simple-calendar_about' ) |
||
163 | ); |
||
164 | wp_safe_redirect( $url ); |
||
165 | exit; |
||
0 ignored issues
–
show
|
|||
166 | } |
||
167 | |||
168 | /** |
||
169 | * Get posts. |
||
170 | * |
||
171 | * @since 3.0.0 |
||
172 | * |
||
173 | * @param $post_type |
||
174 | * |
||
175 | * @return array |
||
176 | */ |
||
177 | private function get_posts( $post_type ) { |
||
178 | |||
179 | $posts = array(); |
||
180 | |||
181 | if ( ! empty( $post_type ) ) { |
||
182 | |||
183 | // https://core.trac.wordpress.org/ticket/18408 |
||
184 | $posts = get_posts( array( |
||
185 | 'post_type' => $post_type, |
||
186 | 'post_status' => array( |
||
187 | 'draft', |
||
188 | 'future', |
||
189 | 'publish', |
||
190 | 'pending', |
||
191 | 'private', |
||
192 | 'trash', |
||
193 | ), |
||
194 | 'nopaging' => true, |
||
195 | ) ); |
||
196 | |||
197 | wp_reset_postdata(); |
||
198 | } |
||
199 | |||
200 | return $posts; |
||
201 | } |
||
202 | |||
203 | /** |
||
204 | * Update. |
||
205 | * |
||
206 | * Runs an update script for the specified version passed in argument. |
||
207 | * |
||
208 | * @since 3.0.0 |
||
209 | * |
||
210 | * @param string $version |
||
211 | */ |
||
212 | private function update( $version ) { |
||
213 | |||
214 | $update_v = '\\' . __NAMESPACE__ . '\Updates\\Update_V' . str_replace( '.', '', $version ); |
||
215 | |||
216 | if ( class_exists( $update_v ) ) { |
||
217 | new $update_v( $this->posts ); |
||
218 | } |
||
219 | } |
||
220 | |||
221 | } |
||
222 |
An exit expression should only be used in rare cases. For example, if you write a short command line script.
In most cases however, using an
exit
expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.