1 | <?php |
||||||
2 | /** |
||||||
3 | * Plugin Name: Writing on GitHub |
||||||
4 | * Plugin URI: https://github.com/litefeel/writing-on-github |
||||||
5 | * Description: A WordPress plugin to allow you writing on GitHub (or Jekyll site). |
||||||
6 | * Version: 1.7 |
||||||
7 | * Author: litefeel |
||||||
8 | * Author URI: https://www.litefeel.com |
||||||
9 | * License: GPLv2 |
||||||
10 | * Text Domain: writing-on-github |
||||||
11 | */ |
||||||
12 | |||||||
13 | // If the functions have already been autoloaded, don't reload. |
||||||
14 | // This fixes function duplication during unit testing. |
||||||
15 | $path = dirname( __FILE__ ) . '/vendor/autoload.php'; |
||||||
16 | if ( file_exists( $path ) ) { |
||||||
17 | require_once( $path ); |
||||||
18 | } |
||||||
19 | |||||||
20 | add_action( 'plugins_loaded', array( new Writing_On_GitHub, 'boot' ) ); |
||||||
0 ignored issues
–
show
Bug
introduced
by
![]() |
|||||||
21 | |||||||
22 | class Writing_On_GitHub { |
||||||
23 | |||||||
24 | /** |
||||||
25 | * Object instance |
||||||
26 | * @var self |
||||||
27 | */ |
||||||
28 | public static $instance; |
||||||
29 | |||||||
30 | /** |
||||||
31 | * Language text domain |
||||||
32 | * @var string |
||||||
33 | */ |
||||||
34 | public static $text_domain = 'writing-on-github'; |
||||||
35 | |||||||
36 | /** |
||||||
37 | * Controller object |
||||||
38 | * @var Writing_On_GitHub_Controller |
||||||
39 | */ |
||||||
40 | public $controller; |
||||||
41 | |||||||
42 | /** |
||||||
43 | * Controller object |
||||||
44 | * @var Writing_On_GitHub_Admin |
||||||
45 | */ |
||||||
46 | public $admin; |
||||||
47 | |||||||
48 | /** |
||||||
49 | * CLI object. |
||||||
50 | * |
||||||
51 | * @var Writing_On_GitHub_CLI |
||||||
52 | */ |
||||||
53 | protected $cli; |
||||||
54 | |||||||
55 | /** |
||||||
56 | * Request object. |
||||||
57 | * |
||||||
58 | * @var Writing_On_GitHub_Request |
||||||
59 | */ |
||||||
60 | protected $request; |
||||||
61 | |||||||
62 | /** |
||||||
63 | * Response object. |
||||||
64 | * |
||||||
65 | * @var Writing_On_GitHub_Response |
||||||
66 | */ |
||||||
67 | protected $response; |
||||||
68 | |||||||
69 | /** |
||||||
70 | * Api object. |
||||||
71 | * |
||||||
72 | * @var Writing_On_GitHub_Api |
||||||
73 | */ |
||||||
74 | protected $api; |
||||||
75 | |||||||
76 | /** |
||||||
77 | * Import object. |
||||||
78 | * |
||||||
79 | * @var Writing_On_GitHub_Import |
||||||
80 | */ |
||||||
81 | protected $import; |
||||||
82 | |||||||
83 | /** |
||||||
84 | * Export object. |
||||||
85 | * |
||||||
86 | * @var Writing_On_GitHub_Export |
||||||
87 | */ |
||||||
88 | protected $export; |
||||||
89 | |||||||
90 | /** |
||||||
91 | * Semaphore object. |
||||||
92 | * |
||||||
93 | * @var Writing_On_GitHub_Semaphore |
||||||
94 | */ |
||||||
95 | protected $semaphore; |
||||||
96 | |||||||
97 | /** |
||||||
98 | * Database object. |
||||||
99 | * |
||||||
100 | * @var Writing_On_GitHub_Database |
||||||
101 | */ |
||||||
102 | protected $database; |
||||||
103 | |||||||
104 | /** |
||||||
105 | * Called at load time, hooks into WP core |
||||||
106 | */ |
||||||
107 | public function __construct() { |
||||||
108 | self::$instance = $this; |
||||||
109 | |||||||
110 | if ( is_admin() ) { |
||||||
0 ignored issues
–
show
The function
is_admin was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
111 | $this->admin = new Writing_On_GitHub_Admin( plugin_basename( __FILE__ ) ); |
||||||
0 ignored issues
–
show
The function
plugin_basename was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
112 | } |
||||||
113 | |||||||
114 | $this->controller = new Writing_On_GitHub_Controller( $this ); |
||||||
115 | |||||||
116 | if ( defined( 'WP_CLI' ) && WP_CLI ) { |
||||||
0 ignored issues
–
show
|
|||||||
117 | WP_CLI::add_command( 'wogh', $this->cli() ); |
||||||
0 ignored issues
–
show
The type
WP_CLI was not found. Maybe you did not declare it correctly or list all dependencies?
The issue could also be caused by a filter entry in the build configuration.
If the path has been excluded in your configuration, e.g. filter:
dependency_paths: ["lib/*"]
For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths ![]() |
|||||||
118 | } |
||||||
119 | } |
||||||
120 | |||||||
121 | /** |
||||||
122 | * Attaches the plugin's hooks into WordPress. |
||||||
123 | */ |
||||||
124 | public function boot() { |
||||||
125 | register_activation_hook( __FILE__, array( $this, 'activate' ) ); |
||||||
0 ignored issues
–
show
The function
register_activation_hook was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
126 | add_action( 'admin_notices', array( $this, 'activation_notice' ) ); |
||||||
0 ignored issues
–
show
The function
add_action was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
127 | |||||||
128 | add_action( 'init', array( $this, 'l10n' ) ); |
||||||
129 | |||||||
130 | // Controller actions. |
||||||
131 | add_action( 'save_post', array( $this->controller, 'export_post' ) ); |
||||||
132 | add_action( 'delete_post', array( $this->controller, 'delete_post' ) ); |
||||||
133 | add_action( 'wp_ajax_nopriv_wogh_push_request', array( $this->controller, 'pull_posts' ) ); |
||||||
134 | add_action( 'wogh_export', array( $this->controller, 'export_all' ), 10, 2 ); |
||||||
135 | add_action( 'wogh_import', array( $this->controller, 'import_master' ), 10, 2 ); |
||||||
136 | add_filter( 'get_edit_post_link', array( $this, 'edit_post_link' ), 10, 3 ); |
||||||
0 ignored issues
–
show
The function
add_filter was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
137 | |||||||
138 | // add_filter( 'wogh_post_meta', array( $this, 'ignore_post_meta' ), 10, 1 ); |
||||||
139 | // add_filter( 'wogh_pre_import_meta', array( $this, 'ignore_post_meta' ), 10, 1 ); |
||||||
140 | add_filter( 'the_content', array( $this, 'the_content' ) ); |
||||||
141 | |||||||
142 | do_action( 'wogh_boot', $this ); |
||||||
0 ignored issues
–
show
The function
do_action was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
143 | } |
||||||
144 | |||||||
145 | public function edit_post_link($link, $postID, $context) { |
||||||
146 | if ( ! wp_is_post_revision( $postID ) ) { |
||||||
0 ignored issues
–
show
The function
wp_is_post_revision was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
147 | $post = new Writing_On_GitHub_Post( $postID, Writing_On_GitHub::$instance->api() ); |
||||||
148 | if ( $post->is_on_github() ) { |
||||||
149 | return $post->github_edit_url(); |
||||||
150 | } |
||||||
151 | } |
||||||
152 | |||||||
153 | return $link; |
||||||
154 | } |
||||||
155 | |||||||
156 | public function ignore_post_meta($meta) { |
||||||
157 | $ignore_meta_keys = get_option('wogh_ignore_metas'); |
||||||
0 ignored issues
–
show
The function
get_option was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
158 | if (empty($ignore_meta_keys)) { |
||||||
0 ignored issues
–
show
|
|||||||
159 | return $meta; |
||||||
160 | } |
||||||
161 | |||||||
162 | $keys = preg_split("/\\r\\n|\\r|\\n/", $ignore_meta_keys); |
||||||
0 ignored issues
–
show
|
|||||||
163 | if (empty($keys)) { |
||||||
0 ignored issues
–
show
|
|||||||
164 | return $meta; |
||||||
165 | } |
||||||
166 | foreach ($keys as $key => $value) { |
||||||
0 ignored issues
–
show
|
|||||||
167 | $keys[$key] = trim($value); |
||||||
0 ignored issues
–
show
|
|||||||
168 | } |
||||||
169 | |||||||
170 | foreach ($meta as $key => $value) { |
||||||
0 ignored issues
–
show
|
|||||||
171 | if (in_array($key, $keys)) { |
||||||
0 ignored issues
–
show
|
|||||||
172 | unset($meta[$key]); |
||||||
0 ignored issues
–
show
|
|||||||
173 | } |
||||||
174 | } |
||||||
175 | |||||||
176 | return $meta; |
||||||
177 | } |
||||||
178 | |||||||
179 | public function the_content($content) { |
||||||
180 | $arr = wp_upload_dir(); |
||||||
0 ignored issues
–
show
The function
wp_upload_dir was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
181 | $baseurl = $arr['baseurl'] . '/writing-on-github'; |
||||||
182 | |||||||
183 | $content = preg_replace_callback( |
||||||
184 | '/(<img [^>]*?src=[\'"])\s*(\/images\/[^\s#]\S+)\s*([\'"][^>]*?>)/', |
||||||
185 | function($matchs) use ($baseurl) { |
||||||
186 | $url = $baseurl . $matchs[2]; |
||||||
187 | return "${matchs[1]}$url${matchs[3]}"; |
||||||
188 | }, |
||||||
189 | $content |
||||||
190 | ); |
||||||
191 | |||||||
192 | $content = preg_replace_callback( |
||||||
193 | '/(<a [^>]*?href=[\'"])\s*(\/images\/[^\s#]\S+)\s*([\'"][^>]*?>)/', |
||||||
194 | function($matchs) use ($baseurl) { |
||||||
195 | $url = $baseurl . $matchs[2]; |
||||||
196 | return "${matchs[1]}$url${matchs[3]}"; |
||||||
197 | }, |
||||||
198 | $content |
||||||
199 | ); |
||||||
200 | return $content; |
||||||
201 | } |
||||||
202 | |||||||
203 | /** |
||||||
204 | * Init i18n files |
||||||
205 | */ |
||||||
206 | public function l10n() { |
||||||
207 | load_plugin_textdomain( self::$text_domain ); |
||||||
0 ignored issues
–
show
The function
load_plugin_textdomain was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
208 | } |
||||||
209 | |||||||
210 | /** |
||||||
211 | * Sets and kicks off the export cronjob |
||||||
212 | */ |
||||||
213 | public function start_export( $force = false ) { |
||||||
214 | $this->start_cron( 'export', $force ); |
||||||
215 | } |
||||||
216 | |||||||
217 | /** |
||||||
218 | * Sets and kicks off the import cronjob |
||||||
219 | */ |
||||||
220 | public function start_import( $force = false ) { |
||||||
221 | $this->start_cron( 'import', $force ); |
||||||
222 | } |
||||||
223 | |||||||
224 | /** |
||||||
225 | * Enables the admin notice on initial activation |
||||||
226 | */ |
||||||
227 | public function activate() { |
||||||
228 | if ( 'yes' !== get_option( '_wogh_fully_exported' ) ) { |
||||||
0 ignored issues
–
show
The function
get_option was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
229 | set_transient( '_wogh_activated', 'yes' ); |
||||||
0 ignored issues
–
show
The function
set_transient was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
230 | } |
||||||
231 | } |
||||||
232 | |||||||
233 | /** |
||||||
234 | * Displays the activation admin notice |
||||||
235 | */ |
||||||
236 | public function activation_notice() { |
||||||
237 | if ( ! get_transient( '_wogh_activated' ) ) { |
||||||
0 ignored issues
–
show
The function
get_transient was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
238 | return; |
||||||
239 | } |
||||||
240 | |||||||
241 | delete_transient( '_wogh_activated' ); |
||||||
0 ignored issues
–
show
The function
delete_transient was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
242 | |||||||
243 | ?><div class="updated"> |
||||||
244 | <p> |
||||||
245 | <?php |
||||||
246 | printf( |
||||||
247 | __( 'To set up your site to sync with GitHub, update your <a href="%s">settings</a> and click "Export to GitHub."', 'writing-on-github' ), |
||||||
0 ignored issues
–
show
The function
__ was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
248 | admin_url( 'options-general.php?page=' . static::$text_domain) |
||||||
0 ignored issues
–
show
The function
admin_url was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
249 | ); |
||||||
250 | ?> |
||||||
251 | </p> |
||||||
252 | </div><?php |
||||||
253 | } |
||||||
254 | |||||||
255 | /** |
||||||
256 | * Get the Controller object. |
||||||
257 | * |
||||||
258 | * @return Writing_On_GitHub_Controller |
||||||
259 | */ |
||||||
260 | public function controller() { |
||||||
261 | return $this->controller; |
||||||
262 | } |
||||||
263 | |||||||
264 | /** |
||||||
265 | * Lazy-load the CLI object. |
||||||
266 | * |
||||||
267 | * @return Writing_On_GitHub_CLI |
||||||
268 | */ |
||||||
269 | public function cli() { |
||||||
270 | if ( ! $this->cli ) { |
||||||
271 | $this->cli = new Writing_On_GitHub_CLI; |
||||||
272 | } |
||||||
273 | |||||||
274 | return $this->cli; |
||||||
275 | } |
||||||
276 | |||||||
277 | /** |
||||||
278 | * Lazy-load the Request object. |
||||||
279 | * |
||||||
280 | * @return Writing_On_GitHub_Request |
||||||
281 | */ |
||||||
282 | public function request() { |
||||||
283 | if ( ! $this->request ) { |
||||||
284 | $this->request = new Writing_On_GitHub_Request( $this ); |
||||||
285 | } |
||||||
286 | |||||||
287 | return $this->request; |
||||||
288 | } |
||||||
289 | |||||||
290 | /** |
||||||
291 | * Lazy-load the Response object. |
||||||
292 | * |
||||||
293 | * @return Writing_On_GitHub_Response |
||||||
294 | */ |
||||||
295 | public function response() { |
||||||
296 | if ( ! $this->response ) { |
||||||
297 | $this->response = new Writing_On_GitHub_Response( $this ); |
||||||
298 | } |
||||||
299 | |||||||
300 | return $this->response; |
||||||
301 | } |
||||||
302 | |||||||
303 | /** |
||||||
304 | * Lazy-load the Api object. |
||||||
305 | * |
||||||
306 | * @return Writing_On_GitHub_Api |
||||||
307 | */ |
||||||
308 | public function api() { |
||||||
309 | if ( ! $this->api ) { |
||||||
310 | $this->api = new Writing_On_GitHub_Api( $this ); |
||||||
311 | } |
||||||
312 | |||||||
313 | return $this->api; |
||||||
314 | } |
||||||
315 | |||||||
316 | /** |
||||||
317 | * Lazy-load the Import object. |
||||||
318 | * |
||||||
319 | * @return Writing_On_GitHub_Import |
||||||
320 | */ |
||||||
321 | public function import() { |
||||||
322 | if ( ! $this->import ) { |
||||||
323 | $this->import = new Writing_On_GitHub_Import( $this ); |
||||||
324 | } |
||||||
325 | |||||||
326 | return $this->import; |
||||||
327 | } |
||||||
328 | |||||||
329 | /** |
||||||
330 | * Lazy-load the Export object. |
||||||
331 | * |
||||||
332 | * @return Writing_On_GitHub_Export |
||||||
333 | */ |
||||||
334 | public function export() { |
||||||
335 | if ( ! $this->export ) { |
||||||
336 | $this->export = new Writing_On_GitHub_Export( $this ); |
||||||
337 | } |
||||||
338 | |||||||
339 | return $this->export; |
||||||
340 | } |
||||||
341 | |||||||
342 | /** |
||||||
343 | * Lazy-load the Semaphore object. |
||||||
344 | * |
||||||
345 | * @return Writing_On_GitHub_Semaphore |
||||||
346 | */ |
||||||
347 | public function semaphore() { |
||||||
348 | if ( ! $this->semaphore ) { |
||||||
349 | $this->semaphore = new Writing_On_GitHub_Semaphore; |
||||||
350 | } |
||||||
351 | |||||||
352 | return $this->semaphore; |
||||||
353 | } |
||||||
354 | |||||||
355 | /** |
||||||
356 | * Lazy-load the Database object. |
||||||
357 | * |
||||||
358 | * @return Writing_On_GitHub_Database |
||||||
359 | */ |
||||||
360 | public function database() { |
||||||
361 | if ( ! $this->database ) { |
||||||
362 | $this->database = new Writing_On_GitHub_Database( $this ); |
||||||
363 | } |
||||||
364 | |||||||
365 | return $this->database; |
||||||
366 | } |
||||||
367 | |||||||
368 | /** |
||||||
369 | * Print to WP_CLI if in CLI environment or |
||||||
370 | * write to debug.log if WP_DEBUG is enabled |
||||||
371 | * @source http://www.stumiller.me/sending-output-to-the-wordpress-debug-log/ |
||||||
372 | * |
||||||
373 | * @param mixed $msg |
||||||
374 | * @param string $write |
||||||
375 | */ |
||||||
376 | public static function write_log( $msg, $write = 'line' ) { |
||||||
377 | if ( defined( 'WP_CLI' ) && WP_CLI ) { |
||||||
0 ignored issues
–
show
|
|||||||
378 | if ( is_array( $msg ) || is_object( $msg ) ) { |
||||||
379 | WP_CLI::print_value( $msg ); |
||||||
380 | } else { |
||||||
381 | WP_CLI::$write( $msg ); |
||||||
382 | } |
||||||
383 | } elseif ( true === WP_DEBUG ) { |
||||||
0 ignored issues
–
show
|
|||||||
384 | if ( is_array( $msg ) || is_object( $msg ) ) { |
||||||
385 | error_log( print_r( $msg, true ) ); |
||||||
0 ignored issues
–
show
|
|||||||
386 | } else { |
||||||
387 | error_log( $msg ); |
||||||
388 | } |
||||||
389 | } |
||||||
390 | } |
||||||
391 | |||||||
392 | /** |
||||||
393 | * Kicks of an import or export cronjob. |
||||||
394 | * |
||||||
395 | * @param bool $force |
||||||
396 | * @param string $type |
||||||
397 | */ |
||||||
398 | protected function start_cron( $type, $force = false ) { |
||||||
399 | update_option( '_wogh_' . $type . '_started', 'yes' ); |
||||||
0 ignored issues
–
show
The function
update_option was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
400 | $user_id = get_current_user_id(); |
||||||
0 ignored issues
–
show
The function
get_current_user_id was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
401 | wp_schedule_single_event( time(), 'wogh_' . $type . '', array( $user_id, $force ) ); |
||||||
0 ignored issues
–
show
The function
wp_schedule_single_event was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
402 | spawn_cron(); |
||||||
0 ignored issues
–
show
The function
spawn_cron was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
403 | } |
||||||
404 | } |
||||||
405 |