These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
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.5.1 |
||
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' ) ); |
||
21 | |||
22 | class Writing_On_GitHub { |
||
0 ignored issues
–
show
Complexity
introduced
by
![]() The class Writing_On_GitHub is not named in CamelCase.
This check marks class names that have not been written in CamelCase. In CamelCase names are written without any punctuation, the start of each new word being marked by a capital letter. The whole name starts with a capital letter as well. Thus the name database connector becomes ![]() The property $text_domain is not named in camelCase.
This check marks property names that have not been written in camelCase. In camelCase names are written without any punctuation, the start of each new word being marked
by a capital letter. Thus the name database connection string becomes ![]() |
|||
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() ) { |
||
111 | $this->admin = new Writing_On_GitHub_Admin; |
||
112 | } |
||
113 | |||
114 | $this->controller = new Writing_On_GitHub_Controller( $this ); |
||
115 | |||
116 | if ( defined( 'WP_CLI' ) && WP_CLI ) { |
||
117 | WP_CLI::add_command( 'wogh', $this->cli() ); |
||
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' ) ); |
||
126 | add_action( 'admin_notices', array( $this, 'activation_notice' ) ); |
||
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, 1 ); |
||
136 | add_filter( 'get_edit_post_link', array( $this, 'edit_post_link' ), 10, 3 ); |
||
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 ); |
||
143 | } |
||
144 | |||
145 | public function edit_post_link($link, $postID, $context) { |
||
0 ignored issues
–
show
The return type could not be reliably inferred; please add a
@return annotation.
Our type inference engine in quite powerful, but sometimes the code does not
provide enough clues to go by. In these cases we request you to add a ![]() The method edit_post_link is not named in camelCase.
This check marks method names that have not been written in camelCase. In camelCase names are written without any punctuation, the start of each new word being marked
by a capital letter. Thus the name database connection string becomes ![]() |
|||
146 | if ( ! wp_is_post_revision( $postID ) ) { |
||
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) { |
||
0 ignored issues
–
show
The return type could not be reliably inferred; please add a
@return annotation.
Our type inference engine in quite powerful, but sometimes the code does not
provide enough clues to go by. In these cases we request you to add a ![]() The method ignore_post_meta is not named in camelCase.
This check marks method names that have not been written in camelCase. In camelCase names are written without any punctuation, the start of each new word being marked
by a capital letter. Thus the name database connection string becomes ![]() The variable $ignore_meta_keys is not named in camelCase.
This check marks variable names that have not been written in camelCase. In camelCase names are written without any punctuation, the start of each new word being marked
by a capital letter. Thus the name database connection string becomes ![]() |
|||
157 | $ignore_meta_keys = get_option('wogh_ignore_metas'); |
||
0 ignored issues
–
show
|
|||
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) { |
||
0 ignored issues
–
show
The return type could not be reliably inferred; please add a
@return annotation.
Our type inference engine in quite powerful, but sometimes the code does not
provide enough clues to go by. In these cases we request you to add a ![]() The method the_content is not named in camelCase.
This check marks method names that have not been written in camelCase. In camelCase names are written without any punctuation, the start of each new word being marked
by a capital letter. Thus the name database connection string becomes ![]() |
|||
180 | $arr = wp_upload_dir(); |
||
181 | $baseurl = $arr['baseurl'] . '/writing-on-github'; |
||
182 | |||
183 | $content = preg_replace_callback( |
||
0 ignored issues
–
show
|
|||
184 | '/(<img [^>]*?src=[\'"])\s*(\/images\/[^\s#]\S+)\s*([\'"][^>]*?>)/', |
||
185 | View Code Duplication | function($matchs) use ($baseurl) { |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
186 | $url = $baseurl . $matchs[2]; |
||
187 | return "${matchs[1]}$url${matchs[3]}"; |
||
188 | }, |
||
189 | $content |
||
190 | ); |
||
191 | |||
192 | $content = preg_replace_callback( |
||
0 ignored issues
–
show
|
|||
193 | '/(<a [^>]*?href=[\'"])\s*(\/images\/[^\s#]\S+)\s*([\'"][^>]*?>)/', |
||
194 | View Code Duplication | function($matchs) use ($baseurl) { |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
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() { |
||
0 ignored issues
–
show
The variable $text_domain is not named in camelCase.
This check marks variable names that have not been written in camelCase. In camelCase names are written without any punctuation, the start of each new word being marked
by a capital letter. Thus the name database connection string becomes ![]() |
|||
207 | load_plugin_textdomain( self::$text_domain ); |
||
208 | } |
||
209 | |||
210 | /** |
||
211 | * Sets and kicks off the export cronjob |
||
212 | */ |
||
213 | public function start_export( $force = false ) { |
||
0 ignored issues
–
show
The method start_export is not named in camelCase.
This check marks method names that have not been written in camelCase. In camelCase names are written without any punctuation, the start of each new word being marked
by a capital letter. Thus the name database connection string becomes ![]() |
|||
214 | $this->start_cron( 'export', $force ); |
||
215 | } |
||
216 | |||
217 | /** |
||
218 | * Sets and kicks off the import cronjob |
||
219 | */ |
||
220 | public function start_import() { |
||
0 ignored issues
–
show
The method start_import is not named in camelCase.
This check marks method names that have not been written in camelCase. In camelCase names are written without any punctuation, the start of each new word being marked
by a capital letter. Thus the name database connection string becomes ![]() |
|||
221 | $this->start_cron( 'import' ); |
||
222 | } |
||
223 | |||
224 | /** |
||
225 | * Enables the admin notice on initial activation |
||
226 | */ |
||
227 | public function activate() { |
||
228 | if ( 'yes' !== get_option( '_wogh_fully_exported' ) ) { |
||
229 | set_transient( '_wogh_activated', 'yes' ); |
||
230 | } |
||
231 | } |
||
232 | |||
233 | /** |
||
234 | * Displays the activation admin notice |
||
235 | */ |
||
236 | public function activation_notice() { |
||
0 ignored issues
–
show
The method activation_notice is not named in camelCase.
This check marks method names that have not been written in camelCase. In camelCase names are written without any punctuation, the start of each new word being marked
by a capital letter. Thus the name database connection string becomes ![]() The variable $text_domain is not named in camelCase.
This check marks variable names that have not been written in camelCase. In camelCase names are written without any punctuation, the start of each new word being marked
by a capital letter. Thus the name database connection string becomes ![]() |
|||
237 | if ( ! get_transient( '_wogh_activated' ) ) { |
||
238 | return; |
||
239 | } |
||
240 | |||
241 | delete_transient( '_wogh_activated' ); |
||
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' ), |
||
248 | admin_url( 'options-general.php?page=' . static::$text_domain) |
||
0 ignored issues
–
show
|
|||
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' ) { |
||
0 ignored issues
–
show
The method write_log is not named in camelCase.
This check marks method names that have not been written in camelCase. In camelCase names are written without any punctuation, the start of each new word being marked
by a capital letter. Thus the name database connection string becomes ![]() |
|||
377 | if ( defined( 'WP_CLI' ) && WP_CLI ) { |
||
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 ) { |
||
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 ) { |
||
0 ignored issues
–
show
The method start_cron is not named in camelCase.
This check marks method names that have not been written in camelCase. In camelCase names are written without any punctuation, the start of each new word being marked
by a capital letter. Thus the name database connection string becomes ![]() The variable $user_id is not named in camelCase.
This check marks variable names that have not been written in camelCase. In camelCase names are written without any punctuation, the start of each new word being marked
by a capital letter. Thus the name database connection string becomes ![]() |
|||
399 | update_option( '_wogh_' . $type . '_started', 'yes' ); |
||
400 | $user_id = get_current_user_id(); |
||
401 | wp_schedule_single_event( time(), 'wogh_' . $type . '', array( $user_id, $force ) ); |
||
402 | spawn_cron(); |
||
403 | } |
||
404 | } |
||
405 |