Passed
Branch ci (072b24)
by litefeel
03:24
created
lib/client/base.php 1 patch
Indentation   +200 added lines, -200 removed lines patch added patch discarded remove patch
@@ -9,204 +9,204 @@
 block discarded – undo
9 9
  */
10 10
 class Writing_On_GitHub_Base_Client {
11 11
 
12
-    const HOST_OPTION_KEY   = 'wogh_host';
13
-    const TOKEN_OPTION_KEY  = 'wogh_oauth_token';
14
-    const REPO_OPTION_KEY   = 'wogh_repository';
15
-    const BRANCH_OPTION_KEY = 'wogh_branch';
16
-
17
-    /**
18
-     * Application container.
19
-     *
20
-     * @var Writing_On_GitHub
21
-     */
22
-    protected $app;
23
-
24
-    /**
25
-     * Instantiates a new Api object.
26
-     *
27
-     * @param Writing_On_GitHub $app Application container.
28
-     */
29
-    public function __construct( Writing_On_GitHub $app ) {
30
-        $this->app = $app;
31
-    }
32
-
33
-    /**
34
-     * Generic GitHub API interface and response handler
35
-     *
36
-     * @param string $method HTTP method.
37
-     * @param string $endpoint API endpoint.
38
-     * @param array  $body Request body.
39
-     *
40
-     * @return stdClass|WP_Error
41
-     */
42
-    protected function call( $method, $endpoint, $body = array() ) {
43
-        if ( is_wp_error( $error = $this->can_call() ) ) {
44
-            /* @var WP_Error $error */
45
-            return $error;
46
-        }
47
-
48
-        $args = array(
49
-            'method'  => $method,
50
-            'headers' => array(
51
-                'Authorization' => 'token ' . $this->oauth_token(),
52
-            ),
53
-        );
54
-
55
-        if ( 'GET' !== $method ) {
56
-            $args['body'] = json_encode( $body );
57
-        }
58
-
59
-        // $tmpbody = isset( $args['body'] ) ? $args['body'] : '';
60
-        // error_log( "writing-on-github-call $method $endpoint $tmpbody" );
61
-
62
-        $response = wp_remote_request( $endpoint, $args );
63
-        $status   = wp_remote_retrieve_header( $response, 'status' );
64
-        $body     = json_decode( wp_remote_retrieve_body( $response ) );
65
-
66
-        if ( '2' !== substr( $status, 0, 1 ) && '3' !== substr( $status, 0, 1 ) ) {
67
-            return new WP_Error(
68
-                strtolower( str_replace( ' ', '_', $status ) ),
69
-                sprintf(
70
-                    __( 'Method %s to endpoint %s failed with error: %s', 'writing-on-github' ),
71
-                    $method,
72
-                    $endpoint,
73
-                    ( $body && $body->message ) ? $body->message : 'Unknown error'
74
-                )
75
-            );
76
-        }
77
-
78
-        return $body;
79
-    }
80
-
81
-    /**
82
-     * Validates whether the Api object can make a call.
83
-     *
84
-     * @return true|WP_Error
85
-     */
86
-    protected function can_call() {
87
-        if ( ! $this->oauth_token() ) {
88
-            return new WP_Error(
89
-                'missing_token',
90
-                __( 'Writing On GitHub needs an auth token. Please update your settings.', 'writing-on-github' )
91
-            );
92
-        }
93
-
94
-        $repo = $this->repository();
95
-
96
-        if ( ! $repo ) {
97
-            return new WP_Error(
98
-                'missing_repository',
99
-                __( 'Writing On GitHub needs a repository. Please update your settings.', 'writing-on-github' )
100
-            );
101
-        }
102
-
103
-        $parts = explode( '/', $repo );
104
-
105
-        if ( 2 !== count( $parts ) ) {
106
-            return new WP_Error(
107
-                'malformed_repository',
108
-                __( 'Writing On GitHub needs a properly formed repository. Please update your settings.', 'writing-on-github' )
109
-            );
110
-        }
111
-
112
-        return true;
113
-    }
114
-
115
-    /**
116
-     * Returns the repository to sync with
117
-     *
118
-     * @return string
119
-     */
120
-    public function repository() {
121
-        return (string) get_option( self::REPO_OPTION_KEY );
122
-    }
123
-
124
-    /**
125
-     * Returns the user's oauth token
126
-     *
127
-     * @return string
128
-     */
129
-    public function oauth_token() {
130
-        return (string) get_option( self::TOKEN_OPTION_KEY );
131
-    }
132
-
133
-    /**
134
-     * Returns the GitHub host to sync with (for GitHub Enterprise support)
135
-     */
136
-    public function api_base() {
137
-        return get_option( self::HOST_OPTION_KEY );
138
-    }
139
-
140
-    public function branch() {
141
-        $branch = get_option( self::BRANCH_OPTION_KEY );
142
-        return $branch ? $branch : 'master';
143
-    }
144
-
145
-    /**
146
-     * API endpoint for the master branch reference
147
-     */
148
-    public function reference_endpoint() {
149
-        $url = $this->api_base() . '/repos/';
150
-        $url = $url . $this->repository() . '/git/refs/heads/' . $this->branch();
151
-
152
-        return $url;
153
-    }
154
-
155
-    /**
156
-     * Api to get and create commits
157
-     */
158
-    public function commit_endpoint() {
159
-        $url = $this->api_base() . '/repos/';
160
-        $url = $url . $this->repository() . '/git/commits';
161
-
162
-        return $url;
163
-    }
164
-
165
-    /**
166
-     * Api to compare commits
167
-     */
168
-    public function compare_endpoint() {
169
-        $url = $this->api_base() . '/repos/';
170
-        $url = $url . $this->repository() . '/compare';
171
-
172
-        return $url;
173
-    }
174
-
175
-    /**
176
-     * Api to get and create trees
177
-     */
178
-    public function tree_endpoint() {
179
-        $url = $this->api_base() . '/repos/';
180
-        $url = $url . $this->repository() . '/git/trees';
181
-
182
-        return $url;
183
-    }
184
-
185
-    /**
186
-     * Builds the proper blob API endpoint for a given post
187
-     *
188
-     * Returns String the relative API call path
189
-     */
190
-    public function blob_endpoint() {
191
-        $url = $this->api_base() . '/repos/';
192
-        $url = $url . $this->repository() . '/git/blobs';
193
-
194
-        return $url;
195
-    }
196
-
197
-    /**
198
-     * Builds the proper content API endpoint for a given post
199
-     *
200
-     * Returns String the relative API call path
201
-     */
202
-    public function content_endpoint( $path = false ) {
203
-        $url = $this->api_base() . '/repos/';
204
-        $url = $url . $this->repository() . '/contents';
205
-
206
-        if ( ! empty($path) ) {
207
-            $url .= '/' . $path;
208
-        }
209
-
210
-        return $url;
211
-    }
12
+	const HOST_OPTION_KEY   = 'wogh_host';
13
+	const TOKEN_OPTION_KEY  = 'wogh_oauth_token';
14
+	const REPO_OPTION_KEY   = 'wogh_repository';
15
+	const BRANCH_OPTION_KEY = 'wogh_branch';
16
+
17
+	/**
18
+	 * Application container.
19
+	 *
20
+	 * @var Writing_On_GitHub
21
+	 */
22
+	protected $app;
23
+
24
+	/**
25
+	 * Instantiates a new Api object.
26
+	 *
27
+	 * @param Writing_On_GitHub $app Application container.
28
+	 */
29
+	public function __construct( Writing_On_GitHub $app ) {
30
+		$this->app = $app;
31
+	}
32
+
33
+	/**
34
+	 * Generic GitHub API interface and response handler
35
+	 *
36
+	 * @param string $method HTTP method.
37
+	 * @param string $endpoint API endpoint.
38
+	 * @param array  $body Request body.
39
+	 *
40
+	 * @return stdClass|WP_Error
41
+	 */
42
+	protected function call( $method, $endpoint, $body = array() ) {
43
+		if ( is_wp_error( $error = $this->can_call() ) ) {
44
+			/* @var WP_Error $error */
45
+			return $error;
46
+		}
47
+
48
+		$args = array(
49
+			'method'  => $method,
50
+			'headers' => array(
51
+				'Authorization' => 'token ' . $this->oauth_token(),
52
+			),
53
+		);
54
+
55
+		if ( 'GET' !== $method ) {
56
+			$args['body'] = json_encode( $body );
57
+		}
58
+
59
+		// $tmpbody = isset( $args['body'] ) ? $args['body'] : '';
60
+		// error_log( "writing-on-github-call $method $endpoint $tmpbody" );
61
+
62
+		$response = wp_remote_request( $endpoint, $args );
63
+		$status   = wp_remote_retrieve_header( $response, 'status' );
64
+		$body     = json_decode( wp_remote_retrieve_body( $response ) );
65
+
66
+		if ( '2' !== substr( $status, 0, 1 ) && '3' !== substr( $status, 0, 1 ) ) {
67
+			return new WP_Error(
68
+				strtolower( str_replace( ' ', '_', $status ) ),
69
+				sprintf(
70
+					__( 'Method %s to endpoint %s failed with error: %s', 'writing-on-github' ),
71
+					$method,
72
+					$endpoint,
73
+					( $body && $body->message ) ? $body->message : 'Unknown error'
74
+				)
75
+			);
76
+		}
77
+
78
+		return $body;
79
+	}
80
+
81
+	/**
82
+	 * Validates whether the Api object can make a call.
83
+	 *
84
+	 * @return true|WP_Error
85
+	 */
86
+	protected function can_call() {
87
+		if ( ! $this->oauth_token() ) {
88
+			return new WP_Error(
89
+				'missing_token',
90
+				__( 'Writing On GitHub needs an auth token. Please update your settings.', 'writing-on-github' )
91
+			);
92
+		}
93
+
94
+		$repo = $this->repository();
95
+
96
+		if ( ! $repo ) {
97
+			return new WP_Error(
98
+				'missing_repository',
99
+				__( 'Writing On GitHub needs a repository. Please update your settings.', 'writing-on-github' )
100
+			);
101
+		}
102
+
103
+		$parts = explode( '/', $repo );
104
+
105
+		if ( 2 !== count( $parts ) ) {
106
+			return new WP_Error(
107
+				'malformed_repository',
108
+				__( 'Writing On GitHub needs a properly formed repository. Please update your settings.', 'writing-on-github' )
109
+			);
110
+		}
111
+
112
+		return true;
113
+	}
114
+
115
+	/**
116
+	 * Returns the repository to sync with
117
+	 *
118
+	 * @return string
119
+	 */
120
+	public function repository() {
121
+		return (string) get_option( self::REPO_OPTION_KEY );
122
+	}
123
+
124
+	/**
125
+	 * Returns the user's oauth token
126
+	 *
127
+	 * @return string
128
+	 */
129
+	public function oauth_token() {
130
+		return (string) get_option( self::TOKEN_OPTION_KEY );
131
+	}
132
+
133
+	/**
134
+	 * Returns the GitHub host to sync with (for GitHub Enterprise support)
135
+	 */
136
+	public function api_base() {
137
+		return get_option( self::HOST_OPTION_KEY );
138
+	}
139
+
140
+	public function branch() {
141
+		$branch = get_option( self::BRANCH_OPTION_KEY );
142
+		return $branch ? $branch : 'master';
143
+	}
144
+
145
+	/**
146
+	 * API endpoint for the master branch reference
147
+	 */
148
+	public function reference_endpoint() {
149
+		$url = $this->api_base() . '/repos/';
150
+		$url = $url . $this->repository() . '/git/refs/heads/' . $this->branch();
151
+
152
+		return $url;
153
+	}
154
+
155
+	/**
156
+	 * Api to get and create commits
157
+	 */
158
+	public function commit_endpoint() {
159
+		$url = $this->api_base() . '/repos/';
160
+		$url = $url . $this->repository() . '/git/commits';
161
+
162
+		return $url;
163
+	}
164
+
165
+	/**
166
+	 * Api to compare commits
167
+	 */
168
+	public function compare_endpoint() {
169
+		$url = $this->api_base() . '/repos/';
170
+		$url = $url . $this->repository() . '/compare';
171
+
172
+		return $url;
173
+	}
174
+
175
+	/**
176
+	 * Api to get and create trees
177
+	 */
178
+	public function tree_endpoint() {
179
+		$url = $this->api_base() . '/repos/';
180
+		$url = $url . $this->repository() . '/git/trees';
181
+
182
+		return $url;
183
+	}
184
+
185
+	/**
186
+	 * Builds the proper blob API endpoint for a given post
187
+	 *
188
+	 * Returns String the relative API call path
189
+	 */
190
+	public function blob_endpoint() {
191
+		$url = $this->api_base() . '/repos/';
192
+		$url = $url . $this->repository() . '/git/blobs';
193
+
194
+		return $url;
195
+	}
196
+
197
+	/**
198
+	 * Builds the proper content API endpoint for a given post
199
+	 *
200
+	 * Returns String the relative API call path
201
+	 */
202
+	public function content_endpoint( $path = false ) {
203
+		$url = $this->api_base() . '/repos/';
204
+		$url = $url . $this->repository() . '/contents';
205
+
206
+		if ( ! empty($path) ) {
207
+			$url .= '/' . $path;
208
+		}
209
+
210
+		return $url;
211
+	}
212 212
 }
Please login to merge, or discard this patch.
lib/client/persist.php 1 patch
Indentation   +60 added lines, -60 removed lines patch added patch discarded remove patch
@@ -9,75 +9,75 @@
 block discarded – undo
9 9
  */
10 10
 class Writing_On_GitHub_Persist_Client extends Writing_On_GitHub_Base_Client {
11 11
 
12
-    /**
13
-     * Get the data for the current user.
14
-     *
15
-     * @return array
16
-     */
17
-    protected function export_user() {
18
-        $user_id = get_current_user_id();
19
-        $user = get_userdata( $user_id );
12
+	/**
13
+	 * Get the data for the current user.
14
+	 *
15
+	 * @return array
16
+	 */
17
+	protected function export_user() {
18
+		$user_id = get_current_user_id();
19
+		$user = get_userdata( $user_id );
20 20
 
21
-        if ( $user ) {
22
-            return array(
23
-                'name'  => $user->display_name,
24
-                'email' => $user->user_email,
25
-            );
26
-        }
21
+		if ( $user ) {
22
+			return array(
23
+				'name'  => $user->display_name,
24
+				'email' => $user->user_email,
25
+			);
26
+		}
27 27
 
28
-        return false;
29
-    }
28
+		return false;
29
+	}
30 30
 
31
-    /**
32
-     * Delete the file.
33
-     *
34
-     * @return array
35
-     */
36
-    public function delete_file( $path, $sha, $message ) {
37
-        $body = new stdClass();
38
-        $body->message = $message;
39
-        $body->sha = $sha;
40
-        $body->branch = $this->branch();
31
+	/**
32
+	 * Delete the file.
33
+	 *
34
+	 * @return array
35
+	 */
36
+	public function delete_file( $path, $sha, $message ) {
37
+		$body = new stdClass();
38
+		$body->message = $message;
39
+		$body->sha = $sha;
40
+		$body->branch = $this->branch();
41 41
 
42
-        if ( $author = $this->export_user() ) {
43
-            $body->author = $author;
44
-        }
42
+		if ( $author = $this->export_user() ) {
43
+			$body->author = $author;
44
+		}
45 45
 
46
-        return $this->call( 'DELETE', $this->content_endpoint( $path ), $body );
47
-    }
46
+		return $this->call( 'DELETE', $this->content_endpoint( $path ), $body );
47
+	}
48 48
 
49
-    /**
50
-     * Create the file.
51
-     *
52
-     * @return array
53
-     */
54
-    public function create_file( $blob, $message ) {
55
-        $body = $blob->to_body();
56
-        $body->message = $message;
57
-        $body->branch = $this->branch();
58
-        unset($body->sha);
49
+	/**
50
+	 * Create the file.
51
+	 *
52
+	 * @return array
53
+	 */
54
+	public function create_file( $blob, $message ) {
55
+		$body = $blob->to_body();
56
+		$body->message = $message;
57
+		$body->branch = $this->branch();
58
+		unset($body->sha);
59 59
 
60
-        if ( $author = $this->export_user() ) {
61
-            $body->author = $author;
62
-        }
60
+		if ( $author = $this->export_user() ) {
61
+			$body->author = $author;
62
+		}
63 63
 
64
-        return $this->call( 'PUT', $this->content_endpoint( $blob->path() ), $body );
65
-    }
64
+		return $this->call( 'PUT', $this->content_endpoint( $blob->path() ), $body );
65
+	}
66 66
 
67
-    /**
68
-     * Update the file.
69
-     *
70
-     * @return array
71
-     */
72
-    public function update_file( $blob, $message ) {
73
-        $body = $blob->to_body();
74
-        $body->message = $message;
75
-        $body->branch = $this->branch();
67
+	/**
68
+	 * Update the file.
69
+	 *
70
+	 * @return array
71
+	 */
72
+	public function update_file( $blob, $message ) {
73
+		$body = $blob->to_body();
74
+		$body->message = $message;
75
+		$body->branch = $this->branch();
76 76
 
77
-        if ( $author = $this->export_user() ) {
78
-            $body->author = $author;
79
-        }
77
+		if ( $author = $this->export_user() ) {
78
+			$body->author = $author;
79
+		}
80 80
 
81
-        return $this->call( 'PUT', $this->content_endpoint( $blob->path() ), $body );
82
-    }
81
+		return $this->call( 'PUT', $this->content_endpoint( $blob->path() ), $body );
82
+	}
83 83
 }
Please login to merge, or discard this patch.
lib/response.php 1 patch
Indentation   +70 added lines, -70 removed lines patch added patch discarded remove patch
@@ -9,87 +9,87 @@
 block discarded – undo
9 9
  */
10 10
 class Writing_On_GitHub_Response {
11 11
 
12
-    /**
13
-     * Application container.
14
-     *
15
-     * @var Writing_On_GitHub
16
-     */
17
-    protected $app;
12
+	/**
13
+	 * Application container.
14
+	 *
15
+	 * @var Writing_On_GitHub
16
+	 */
17
+	protected $app;
18 18
 
19
-    /**
20
-     * Writing_On_GitHub_Response constructor.
21
-     *
22
-     * @param Writing_On_GitHub $app Application container.
23
-     */
24
-    public function __construct( Writing_On_GitHub $app ) {
25
-        $this->app = $app;
26
-    }
19
+	/**
20
+	 * Writing_On_GitHub_Response constructor.
21
+	 *
22
+	 * @param Writing_On_GitHub $app Application container.
23
+	 */
24
+	public function __construct( Writing_On_GitHub $app ) {
25
+		$this->app = $app;
26
+	}
27 27
 
28
-    /**
29
-     * Writes to the log and returns the error response.
30
-     *
31
-     * @param WP_Error $error Error to respond with.
32
-     *
33
-     * @return false
34
-     */
35
-    public function error( WP_Error $error ) {
36
-        global $wp_version;
28
+	/**
29
+	 * Writes to the log and returns the error response.
30
+	 *
31
+	 * @param WP_Error $error Error to respond with.
32
+	 *
33
+	 * @return false
34
+	 */
35
+	public function error( WP_Error $error ) {
36
+		global $wp_version;
37 37
 
38
-        $this->log( $error );
38
+		$this->log( $error );
39 39
 
40
-        if ( defined( 'DOING_AJAX' ) && DOING_AJAX && defined( 'WOGH_AJAX' ) && WOGH_AJAX ) {
41
-            /**
42
-             * WordPress 4.1.0 introduced allowing WP_Error objects to be
43
-             * passed directly into `wp_send_json_error`. This shims in
44
-             * compatibility for older versions. We're currently supporting 3.9+.
45
-             */
46
-            if ( version_compare( $wp_version, '4.1.0', '<' ) ) {
47
-                $result = array();
40
+		if ( defined( 'DOING_AJAX' ) && DOING_AJAX && defined( 'WOGH_AJAX' ) && WOGH_AJAX ) {
41
+			/**
42
+			 * WordPress 4.1.0 introduced allowing WP_Error objects to be
43
+			 * passed directly into `wp_send_json_error`. This shims in
44
+			 * compatibility for older versions. We're currently supporting 3.9+.
45
+			 */
46
+			if ( version_compare( $wp_version, '4.1.0', '<' ) ) {
47
+				$result = array();
48 48
 
49
-                foreach ( $error->errors as $code => $messages ) {
50
-                    foreach ( $messages as $message ) {
51
-                        $result[] = array( 'code' => $code, 'message' => $message );
52
-                    }
53
-                }
49
+				foreach ( $error->errors as $code => $messages ) {
50
+					foreach ( $messages as $message ) {
51
+						$result[] = array( 'code' => $code, 'message' => $message );
52
+					}
53
+				}
54 54
 
55
-                $error = $result;
56
-            }
55
+				$error = $result;
56
+			}
57 57
 
58
-            wp_send_json_error( $error );
59
-        }
58
+			wp_send_json_error( $error );
59
+		}
60 60
 
61
-        return false;
62
-    }
61
+		return false;
62
+	}
63 63
 
64
-    /**
65
-     * Writes to the log and returns the success response.
66
-     *
67
-     * @param string $success Success message to respond with.
68
-     *
69
-     * @return true
70
-     */
71
-    public function success( $success ) {
72
-        $this->log( $success );
64
+	/**
65
+	 * Writes to the log and returns the success response.
66
+	 *
67
+	 * @param string $success Success message to respond with.
68
+	 *
69
+	 * @return true
70
+	 */
71
+	public function success( $success ) {
72
+		$this->log( $success );
73 73
 
74
-        if ( defined( 'DOING_AJAX' ) && DOING_AJAX && defined( 'WOGH_AJAX' ) && WOGH_AJAX ) {
75
-            wp_send_json_success( $success );
76
-        }
74
+		if ( defined( 'DOING_AJAX' ) && DOING_AJAX && defined( 'WOGH_AJAX' ) && WOGH_AJAX ) {
75
+			wp_send_json_success( $success );
76
+		}
77 77
 
78
-        return true;
79
-    }
78
+		return true;
79
+	}
80 80
 
81
-    /**
82
-     * Writes a log message.
83
-     *
84
-     * Can extract a message from WP_Error object.
85
-     *
86
-     * @param string|WP_Error $msg Message to log.
87
-     */
88
-    protected function log( $msg ) {
89
-        if ( is_wp_error( $msg ) ) {
90
-            $msg = $msg->get_error_message();
91
-        }
81
+	/**
82
+	 * Writes a log message.
83
+	 *
84
+	 * Can extract a message from WP_Error object.
85
+	 *
86
+	 * @param string|WP_Error $msg Message to log.
87
+	 */
88
+	protected function log( $msg ) {
89
+		if ( is_wp_error( $msg ) ) {
90
+			$msg = $msg->get_error_message();
91
+		}
92 92
 
93
-        Writing_On_GitHub::write_log( $msg );
94
-    }
93
+		Writing_On_GitHub::write_log( $msg );
94
+	}
95 95
 }
Please login to merge, or discard this patch.
lib/cli.php 1 patch
Indentation   +146 added lines, -146 removed lines patch added patch discarded remove patch
@@ -9,150 +9,150 @@
 block discarded – undo
9 9
  */
10 10
 class Writing_On_GitHub_CLI extends WP_CLI_Command {
11 11
 
12
-    /**
13
-     * Application container.
14
-     *
15
-     * @var Writing_On_GitHub
16
-     */
17
-    protected $app;
18
-
19
-    /**
20
-     * Grab the Application container on instantiation.
21
-     */
22
-    public function __construct() {
23
-        $this->app = Writing_On_GitHub::$instance;
24
-    }
25
-
26
-    /**
27
-     * Exports an individual post
28
-     * all your posts to GitHub
29
-     *
30
-     * ## OPTIONS
31
-     *
32
-     * <post_id|all>
33
-     * : The post ID to export or 'all' for full site
34
-     *
35
-     * <user_id>
36
-     * : The user ID you'd like to save the commit as
37
-     *
38
-     * ## EXAMPLES
39
-     *
40
-     *     wp wogh export all 1
41
-     *     wp wogh export 1 1
42
-     *
43
-     * @synopsis <post_id|all> <user_id>
44
-     *
45
-     * @param array $args Command arguments.
46
-     */
47
-    public function export( $args ) {
48
-        list( $post_id, $user_id ) = $args;
49
-
50
-        if ( ! is_numeric( $user_id ) ) {
51
-            WP_CLI::error( __( 'Invalid user ID', 'writing-on-github' ) );
52
-        }
53
-
54
-        $this->app->export()->set_user( $user_id );
55
-
56
-        if ( 'all' === $post_id ) {
57
-            WP_CLI::line( __( 'Starting full export to GitHub.', 'writing-on-github' ) );
58
-            $this->app->controller()->export_all();
59
-        } elseif ( is_numeric( $post_id ) ) {
60
-            WP_CLI::line(
61
-                sprintf(
62
-                    __( 'Exporting post ID to GitHub: %d', 'writing-on-github' ),
63
-                    $post_id
64
-                )
65
-            );
66
-            $this->app->controller()->export_post( (int) $post_id );
67
-        } else {
68
-            WP_CLI::error( __( 'Invalid post ID', 'writing-on-github' ) );
69
-        }
70
-    }
71
-
72
-    /**
73
-     * Imports the post in your GitHub repo
74
-     * into your WordPress blog
75
-     *
76
-     * ## OPTIONS
77
-     *
78
-     * <user_id>
79
-     * : The user ID you'd like to save the commit as
80
-     *
81
-     * ## EXAMPLES
82
-     *
83
-     *     wp wogh import 1
84
-     *
85
-     * @synopsis <user_id>
86
-     *
87
-     * @param array $args Command arguments.
88
-     */
89
-    public function import( $args ) {
90
-        list( $user_id ) = $args;
91
-
92
-        if ( ! is_numeric( $user_id ) ) {
93
-            WP_CLI::error( __( 'Invalid user ID', 'writing-on-github' ) );
94
-        }
95
-
96
-        update_option( '_wogh_export_user_id', (int) $user_id );
97
-
98
-        WP_CLI::line( __( 'Starting import from GitHub.', 'writing-on-github' ) );
99
-
100
-        $this->app->controller()->import_master();
101
-    }
102
-
103
-    /**
104
-     * Fetches the provided sha or the repository's
105
-     * master branch and caches it.
106
-     *
107
-     * ## OPTIONS
108
-     *
109
-     * <user_id>
110
-     * : The user ID you'd like to save the commit as
111
-     *
112
-     * ## EXAMPLES
113
-     *
114
-     *     wp wogh prime --branch=master
115
-     *     wp wogh prime --sha=<commit_sha>
116
-     *
117
-     * @synopsis [--sha=<commit_sha>] [--branch]
118
-     *
119
-     * @param array $args Command arguments.
120
-     * @param array $assoc_args Command associated arguments.
121
-     */
122
-    public function prime( $args, $assoc_args ) {
123
-        if ( isset( $assoc_args['branch'] ) ) {
124
-            WP_CLI::line( __( 'Starting branch import.', 'writing-on-github' ) );
125
-
126
-            $commit = $this->app->api()->fetch()->master();
127
-
128
-            if ( is_wp_error( $commit ) ) {
129
-                WP_CLI::error(
130
-                    sprintf(
131
-                        __( 'Failed to import and cache branch with error: %s', 'writing-on-github' ),
132
-                        $commit->get_error_message()
133
-                    )
134
-                );
135
-            } else {
136
-                WP_CLI::success(
137
-                    sprintf(
138
-                        __( 'Successfully imported and cached commit %s from branch.', 'writing-on-github' ),
139
-                        $commit->sha()
140
-                    )
141
-                );
142
-            }
143
-        } else if ( isset( $assoc_args['sha'] ) ) {
144
-            WP_CLI::line( 'Starting sha import.' );
145
-
146
-            $commit = $this->app->api()->fetch()->commit( $assoc_args['sha'] );
147
-
148
-            WP_CLI::success(
149
-                sprintf(
150
-                    __( 'Successfully imported and cached commit %s.', 'writing-on-github' ),
151
-                    $commit->sha()
152
-                )
153
-            );
154
-        } else {
155
-            WP_CLI::error( 'Invalid fetch.' );
156
-        }
157
-    }
12
+	/**
13
+	 * Application container.
14
+	 *
15
+	 * @var Writing_On_GitHub
16
+	 */
17
+	protected $app;
18
+
19
+	/**
20
+	 * Grab the Application container on instantiation.
21
+	 */
22
+	public function __construct() {
23
+		$this->app = Writing_On_GitHub::$instance;
24
+	}
25
+
26
+	/**
27
+	 * Exports an individual post
28
+	 * all your posts to GitHub
29
+	 *
30
+	 * ## OPTIONS
31
+	 *
32
+	 * <post_id|all>
33
+	 * : The post ID to export or 'all' for full site
34
+	 *
35
+	 * <user_id>
36
+	 * : The user ID you'd like to save the commit as
37
+	 *
38
+	 * ## EXAMPLES
39
+	 *
40
+	 *     wp wogh export all 1
41
+	 *     wp wogh export 1 1
42
+	 *
43
+	 * @synopsis <post_id|all> <user_id>
44
+	 *
45
+	 * @param array $args Command arguments.
46
+	 */
47
+	public function export( $args ) {
48
+		list( $post_id, $user_id ) = $args;
49
+
50
+		if ( ! is_numeric( $user_id ) ) {
51
+			WP_CLI::error( __( 'Invalid user ID', 'writing-on-github' ) );
52
+		}
53
+
54
+		$this->app->export()->set_user( $user_id );
55
+
56
+		if ( 'all' === $post_id ) {
57
+			WP_CLI::line( __( 'Starting full export to GitHub.', 'writing-on-github' ) );
58
+			$this->app->controller()->export_all();
59
+		} elseif ( is_numeric( $post_id ) ) {
60
+			WP_CLI::line(
61
+				sprintf(
62
+					__( 'Exporting post ID to GitHub: %d', 'writing-on-github' ),
63
+					$post_id
64
+				)
65
+			);
66
+			$this->app->controller()->export_post( (int) $post_id );
67
+		} else {
68
+			WP_CLI::error( __( 'Invalid post ID', 'writing-on-github' ) );
69
+		}
70
+	}
71
+
72
+	/**
73
+	 * Imports the post in your GitHub repo
74
+	 * into your WordPress blog
75
+	 *
76
+	 * ## OPTIONS
77
+	 *
78
+	 * <user_id>
79
+	 * : The user ID you'd like to save the commit as
80
+	 *
81
+	 * ## EXAMPLES
82
+	 *
83
+	 *     wp wogh import 1
84
+	 *
85
+	 * @synopsis <user_id>
86
+	 *
87
+	 * @param array $args Command arguments.
88
+	 */
89
+	public function import( $args ) {
90
+		list( $user_id ) = $args;
91
+
92
+		if ( ! is_numeric( $user_id ) ) {
93
+			WP_CLI::error( __( 'Invalid user ID', 'writing-on-github' ) );
94
+		}
95
+
96
+		update_option( '_wogh_export_user_id', (int) $user_id );
97
+
98
+		WP_CLI::line( __( 'Starting import from GitHub.', 'writing-on-github' ) );
99
+
100
+		$this->app->controller()->import_master();
101
+	}
102
+
103
+	/**
104
+	 * Fetches the provided sha or the repository's
105
+	 * master branch and caches it.
106
+	 *
107
+	 * ## OPTIONS
108
+	 *
109
+	 * <user_id>
110
+	 * : The user ID you'd like to save the commit as
111
+	 *
112
+	 * ## EXAMPLES
113
+	 *
114
+	 *     wp wogh prime --branch=master
115
+	 *     wp wogh prime --sha=<commit_sha>
116
+	 *
117
+	 * @synopsis [--sha=<commit_sha>] [--branch]
118
+	 *
119
+	 * @param array $args Command arguments.
120
+	 * @param array $assoc_args Command associated arguments.
121
+	 */
122
+	public function prime( $args, $assoc_args ) {
123
+		if ( isset( $assoc_args['branch'] ) ) {
124
+			WP_CLI::line( __( 'Starting branch import.', 'writing-on-github' ) );
125
+
126
+			$commit = $this->app->api()->fetch()->master();
127
+
128
+			if ( is_wp_error( $commit ) ) {
129
+				WP_CLI::error(
130
+					sprintf(
131
+						__( 'Failed to import and cache branch with error: %s', 'writing-on-github' ),
132
+						$commit->get_error_message()
133
+					)
134
+				);
135
+			} else {
136
+				WP_CLI::success(
137
+					sprintf(
138
+						__( 'Successfully imported and cached commit %s from branch.', 'writing-on-github' ),
139
+						$commit->sha()
140
+					)
141
+				);
142
+			}
143
+		} else if ( isset( $assoc_args['sha'] ) ) {
144
+			WP_CLI::line( 'Starting sha import.' );
145
+
146
+			$commit = $this->app->api()->fetch()->commit( $assoc_args['sha'] );
147
+
148
+			WP_CLI::success(
149
+				sprintf(
150
+					__( 'Successfully imported and cached commit %s.', 'writing-on-github' ),
151
+					$commit->sha()
152
+				)
153
+			);
154
+		} else {
155
+			WP_CLI::error( 'Invalid fetch.' );
156
+		}
157
+	}
158 158
 }
Please login to merge, or discard this patch.
lib/api.php 1 patch
Indentation   +48 added lines, -48 removed lines patch added patch discarded remove patch
@@ -9,59 +9,59 @@
 block discarded – undo
9 9
  */
10 10
 class Writing_On_GitHub_Api {
11 11
 
12
-    /**
13
-     * Application container.
14
-     *
15
-     * @var Writing_On_GitHub
16
-     */
17
-    protected $app;
12
+	/**
13
+	 * Application container.
14
+	 *
15
+	 * @var Writing_On_GitHub
16
+	 */
17
+	protected $app;
18 18
 
19
-    /**
20
-     * GitHub fetch client.
21
-     *
22
-     * @var Writing_On_GitHub_Fetch_Client
23
-     */
24
-    protected $fetch;
19
+	/**
20
+	 * GitHub fetch client.
21
+	 *
22
+	 * @var Writing_On_GitHub_Fetch_Client
23
+	 */
24
+	protected $fetch;
25 25
 
26
-    /**
27
-     * Github persist client.
28
-     *
29
-     * @var Writing_On_GitHub_Persist_Client
30
-     */
31
-    protected $persist;
26
+	/**
27
+	 * Github persist client.
28
+	 *
29
+	 * @var Writing_On_GitHub_Persist_Client
30
+	 */
31
+	protected $persist;
32 32
 
33
-    /**
34
-     * Instantiates a new Api object.
35
-     *
36
-     * @param Writing_On_GitHub $app Application container.
37
-     */
38
-    public function __construct( Writing_On_GitHub $app ) {
39
-        $this->app = $app;
40
-    }
33
+	/**
34
+	 * Instantiates a new Api object.
35
+	 *
36
+	 * @param Writing_On_GitHub $app Application container.
37
+	 */
38
+	public function __construct( Writing_On_GitHub $app ) {
39
+		$this->app = $app;
40
+	}
41 41
 
42
-    /**
43
-     * Lazy-load fetch client.
44
-     *
45
-     * @return Writing_On_GitHub_Fetch_Client
46
-     */
47
-    public function fetch() {
48
-        if ( ! $this->fetch ) {
49
-            $this->fetch = new Writing_On_GitHub_Fetch_Client( $this->app );
50
-        }
42
+	/**
43
+	 * Lazy-load fetch client.
44
+	 *
45
+	 * @return Writing_On_GitHub_Fetch_Client
46
+	 */
47
+	public function fetch() {
48
+		if ( ! $this->fetch ) {
49
+			$this->fetch = new Writing_On_GitHub_Fetch_Client( $this->app );
50
+		}
51 51
 
52
-        return $this->fetch;
53
-    }
52
+		return $this->fetch;
53
+	}
54 54
 
55
-    /**
56
-     * Lazy-load persist client.
57
-     *
58
-     * @return Writing_On_GitHub_Persist_Client
59
-     */
60
-    public function persist() {
61
-        if ( ! $this->persist ) {
62
-            $this->persist = new Writing_On_GitHub_Persist_Client( $this->app );
63
-        }
55
+	/**
56
+	 * Lazy-load persist client.
57
+	 *
58
+	 * @return Writing_On_GitHub_Persist_Client
59
+	 */
60
+	public function persist() {
61
+		if ( ! $this->persist ) {
62
+			$this->persist = new Writing_On_GitHub_Persist_Client( $this->app );
63
+		}
64 64
 
65
-        return $this->persist;
66
-    }
65
+		return $this->persist;
66
+	}
67 67
 }
Please login to merge, or discard this patch.
lib/fileinfo.php 1 patch
Indentation   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -6,13 +6,13 @@
 block discarded – undo
6 6
  */
7 7
 class Writing_On_GitHub_File_Info {
8 8
 
9
-    public function __construct( stdClass $data ) {
10
-        $this->sha          = $data->sha;
11
-        $this->path         = $data->path;
12
-        $this->status       = $data->status;
13
-    }
9
+	public function __construct( stdClass $data ) {
10
+		$this->sha          = $data->sha;
11
+		$this->path         = $data->path;
12
+		$this->status       = $data->status;
13
+	}
14 14
 
15
-    public $sha;
16
-    public $path;
17
-    public $status;  // added removed modified
15
+	public $sha;
16
+	public $path;
17
+	public $status;  // added removed modified
18 18
 }
Please login to merge, or discard this patch.
lib/semaphore.php 1 patch
Indentation   +51 added lines, -51 removed lines patch added patch discarded remove patch
@@ -9,55 +9,55 @@
 block discarded – undo
9 9
  */
10 10
 class Writing_On_GitHub_Semaphore {
11 11
 
12
-    /**
13
-     * Sempahore's option key.
14
-     */
15
-    const KEY = 'wogh_semaphore_lock';
16
-
17
-    /**
18
-     * Option key when semaphore is locked.
19
-     */
20
-    const VALUE_LOCKED = 'yes';
21
-
22
-    /**
23
-     * Option key when semaphore is unlocked.
24
-     */
25
-    const VALUE_UNLOCKED = 'no';
26
-
27
-    /**
28
-     * Clean up the old values on instantiation.
29
-     */
30
-    public function __construct() {
31
-        delete_option( self::KEY );
32
-    }
33
-
34
-    /**
35
-     * Checks if the Semaphore is open.
36
-     *
37
-     * Fails to report it's open if the the Api class can't make a call
38
-     * or the push lock has been enabled.
39
-     *
40
-     * @return bool
41
-     */
42
-    public function is_open() {
43
-        if ( self::VALUE_LOCKED === get_transient( self::KEY ) ) {
44
-            return false;
45
-        }
46
-
47
-        return true;
48
-    }
49
-
50
-    /**
51
-     * Enables the push lock.
52
-     */
53
-    public function lock() {
54
-        set_transient( self::KEY, self::VALUE_LOCKED, MINUTE_IN_SECONDS );
55
-    }
56
-
57
-    /**
58
-     * Disables the push lock.
59
-     */
60
-    public function unlock() {
61
-        set_transient( self::KEY, self::VALUE_UNLOCKED, MINUTE_IN_SECONDS );
62
-    }
12
+	/**
13
+	 * Sempahore's option key.
14
+	 */
15
+	const KEY = 'wogh_semaphore_lock';
16
+
17
+	/**
18
+	 * Option key when semaphore is locked.
19
+	 */
20
+	const VALUE_LOCKED = 'yes';
21
+
22
+	/**
23
+	 * Option key when semaphore is unlocked.
24
+	 */
25
+	const VALUE_UNLOCKED = 'no';
26
+
27
+	/**
28
+	 * Clean up the old values on instantiation.
29
+	 */
30
+	public function __construct() {
31
+		delete_option( self::KEY );
32
+	}
33
+
34
+	/**
35
+	 * Checks if the Semaphore is open.
36
+	 *
37
+	 * Fails to report it's open if the the Api class can't make a call
38
+	 * or the push lock has been enabled.
39
+	 *
40
+	 * @return bool
41
+	 */
42
+	public function is_open() {
43
+		if ( self::VALUE_LOCKED === get_transient( self::KEY ) ) {
44
+			return false;
45
+		}
46
+
47
+		return true;
48
+	}
49
+
50
+	/**
51
+	 * Enables the push lock.
52
+	 */
53
+	public function lock() {
54
+		set_transient( self::KEY, self::VALUE_LOCKED, MINUTE_IN_SECONDS );
55
+	}
56
+
57
+	/**
58
+	 * Disables the push lock.
59
+	 */
60
+	public function unlock() {
61
+		set_transient( self::KEY, self::VALUE_UNLOCKED, MINUTE_IN_SECONDS );
62
+	}
63 63
 }
Please login to merge, or discard this patch.
lib/database.php 1 patch
Indentation   +508 added lines, -508 removed lines patch added patch discarded remove patch
@@ -9,512 +9,512 @@
 block discarded – undo
9 9
  */
10 10
 class Writing_On_GitHub_Database {
11 11
 
12
-    /**
13
-     * Application container.
14
-     *
15
-     * @var Writing_On_GitHub
16
-     */
17
-    protected $app;
18
-
19
-    /**
20
-     * Currently whitelisted post types.
21
-     *
22
-     * @var array
23
-     */
24
-    protected $whitelisted_post_types = array( 'post', 'page' );
25
-
26
-    /**
27
-     * Currently whitelisted post statuses.
28
-     *
29
-     * @var array
30
-     */
31
-    protected $whitelisted_post_statuses = array( 'publish' );
32
-
33
-    /**
34
-     * Instantiates a new Database object.
35
-     *
36
-     * @param Writing_On_GitHub $app Application container.
37
-     */
38
-    public function __construct( Writing_On_GitHub $app ) {
39
-        $this->app = $app;
40
-    }
41
-
42
-    /**
43
-     * Queries the database for all of the supported posts.
44
-     *
45
-     * @param  bool $force
46
-     *
47
-     * @return Writing_On_GitHub_Post[]|WP_Error
48
-     */
49
-    public function fetch_all_supported( $force = false ) {
50
-        $args  = array(
51
-            'post_type'   => $this->get_whitelisted_post_types(),
52
-            'post_status' => $this->get_whitelisted_post_statuses(),
53
-            'nopaging'    => true,
54
-            'fields'      => 'ids',
55
-        );
56
-
57
-        $query = new WP_Query( apply_filters( 'wogh_pre_fetch_all_supported', $args ) );
58
-
59
-        $post_ids = $query->get_posts();
60
-
61
-        if ( ! $post_ids ) {
62
-            return new WP_Error(
63
-                'no_results',
64
-                __( 'Querying for supported posts returned no results.', 'writing-on-github' )
65
-            );
66
-        }
67
-
68
-        /* @var Writing_On_GitHub_Post[] $results */
69
-        $results = array();
70
-        foreach ( $post_ids as $post_id ) {
71
-            // Do not export posts that have already been exported
72
-            if ( $force || ! get_post_meta( $post_id, '_wogh_sha', true ) ||
73
-                 ! get_post_meta( $post_id, '_wogh_github_path', true ) ) {
74
-
75
-                $results[] = new Writing_On_GitHub_Post( $post_id, $this->app->api() );
76
-            }
77
-        }
78
-
79
-        return $results;
80
-    }
81
-
82
-    /**
83
-     * Queries a post and returns it if it's supported.
84
-     *
85
-     * @param int $post_id Post ID to fetch.
86
-     *
87
-     * @return WP_Error|Writing_On_GitHub_Post
88
-     */
89
-    public function fetch_by_id( $post_id ) {
90
-        $post = new Writing_On_GitHub_Post( $post_id, $this->app->api() );
91
-
92
-        if ( ! $this->is_post_supported( $post ) ) {
93
-            return new WP_Error(
94
-                'unsupported_post',
95
-                sprintf(
96
-                    __(
97
-                        'Post ID %s is not supported by WOGH. See wiki to find out how to add support.',
98
-                        'writing-on-github'
99
-                    ),
100
-                    $post_id
101
-                )
102
-            );
103
-        }
104
-
105
-        return $post;
106
-    }
107
-
108
-    /**
109
-     * Save an post to database
110
-     * and associates their author as well as their latest
111
-     *
112
-     * @param  Writing_On_GitHub_Post $post [description]
113
-     * @return WP_Error|true
114
-     */
115
-    public function save_post( Writing_On_GitHub_Post $post ) {
116
-        $args = apply_filters( 'wogh_pre_import_args', $this->post_args( $post ), $post );
117
-
118
-        remove_filter( 'content_save_pre', 'wp_filter_post_kses' );
119
-        $post_id = $post->is_new() ?
120
-            wp_insert_post( $args, true ) :
121
-            wp_update_post( $args, true );
122
-        add_filter( 'content_save_pre', 'wp_filter_post_kses' );
123
-
124
-        if ( is_wp_error( $post_id ) ) {
125
-            /* @var WP_Error $post_id */
126
-            return $post_id;
127
-        }
128
-
129
-        if ( $post->is_new() ) {
130
-            $author = false;
131
-            $meta = $post->get_meta();
132
-            if ( ! empty( $meta ) && ! empty( $meta['author'] ) ) {
133
-                $author = $meta['author'];
134
-            }
135
-            $user    = $this->fetch_commit_user( $author );
136
-            $user_id = is_wp_error( $user ) ? 0 : $user->ID;
137
-            $this->set_post_author( $post_id, $user_id );
138
-        }
139
-
140
-        $post->set_post( get_post( $post_id ) );
141
-
142
-        $meta = apply_filters( 'wogh_pre_import_meta', $post->get_meta(), $post );
143
-
144
-        update_post_meta( $post_id, '_wogh_sha', $meta['_wogh_sha'] );
145
-
146
-        // unset( $meta['tags'] );
147
-        // unset( $meta['categories'] );
148
-        // unset( $meta['author'] );
149
-        // unset( $meta['post_date'] );
150
-        // unset( $meta['post_excerpt'] );
151
-        // unset( $meta['permalink'] );
152
-        // unset( $meta['link'] );
153
-
154
-        // foreach ( $meta as $key => $value ) {
155
-        //  update_post_meta( $post_id, $key, $value );
156
-        // }
157
-        return true;
158
-    }
159
-
160
-    protected function post_args( $post ) {
161
-        $args = $post->get_args();
162
-        $meta = $post->get_meta();
163
-
164
-        // prevent backslash loss
165
-        $args['post_content'] = addslashes( $args['post_content'] );
166
-
167
-        // update tags
168
-        if ( ! empty( $meta['tags'] ) ) {
169
-            $args['tags_input'] = $meta['tags'];
170
-        }
171
-
172
-        // update categories
173
-        if ( ! empty( $meta['categories'] ) ) {
174
-            $categories = $meta['categories'];
175
-            if ( ! is_array( $categories ) ) {
176
-                $categories = array( $categories );
177
-            }
178
-            $terms = get_terms( array(
179
-                'taxonomy' => 'category',
180
-                'fields' => 'id=>name',
181
-                'hide_empty' => 0,
182
-                'name' => $categories
183
-                )
184
-            );
185
-            $map = array();
186
-            foreach ( $categories as $name ) {
187
-                $map[$name] = 1;
188
-            }
189
-
190
-            $ids = array();
191
-            if ( ! empty( $terms ) ) {
192
-                foreach ( $terms as $id => $name ) {
193
-                    $ids[] = $id;
194
-                    unset( $map[$name] );
195
-                }
196
-            }
197
-
198
-            // create new terms
199
-            if ( ! empty( $map ) ) {
200
-                foreach ( $map as $name => $value ) {
201
-                    $term = wp_insert_term( $name, 'category', array( 'parent' => 0 ) );
202
-                    // array('term_id' => $term_id, 'term_taxonomy_id' => $tt_id);
203
-                    $ids[] = $term['term_id'];
204
-                }
205
-            }
206
-
207
-            $args['post_category'] = $ids;
208
-        }
209
-
210
-        return $args;
211
-    }
212
-
213
-    private function get_post_id_by_filename( $filename, $pattern  ) {
214
-        preg_match( $pattern , $filename, $matches );
215
-        $title = $matches[4];
216
-
217
-        $query = new WP_Query( array(
218
-            'name'     => $title,
219
-            'posts_per_page' => 1,
220
-            'post_type' => $this->get_whitelisted_post_types(),
221
-            'fields'         => 'ids',
222
-        ) );
223
-
224
-        $post_id = $query->get_posts();
225
-        $post_id = array_pop( $post_id );
226
-        return $post_id;
227
-    }
228
-
229
-    /**
230
-     * Deletes a post from the database based on its GitHub path.
231
-     *
232
-     * @param string $path Path of Post to delete.
233
-     *
234
-     * @return string|WP_Error
235
-     */
236
-    public function delete_post_by_path( $path ) {
237
-        $query = new WP_Query( array(
238
-            'meta_key'       => '_wogh_github_path',
239
-            'meta_value'     => $path,
240
-            'meta_compare'   => '=',
241
-            'posts_per_page' => 1,
242
-            'fields'         => 'ids',
243
-        ) );
244
-
245
-        $post_id = $query->get_posts();
246
-        $post_id = array_pop( $post_id );
247
-
248
-        if ( ! $post_id ) {
249
-            $parts     = explode( '/', $path );
250
-            $filename  = array_pop( $parts );
251
-            $directory = $parts ? array_shift( $parts ) : '';
252
-
253
-            if ( false !== strpos( $directory, 'post' ) ) {
254
-                $post_id = get_post_id_by_filename( $filename, '/([0-9]{4})-([0-9]{2})-([0-9]{2})-(.*)\.md/' );
255
-            }
256
-
257
-            if ( ! $post_id ) {
258
-                $post_id = get_post_id_by_filename( $filename, '/(.*)\.md/' );
259
-            }
260
-        }
261
-
262
-        if ( ! $post_id ) {
263
-            return new WP_Error(
264
-                'path_not_found',
265
-                sprintf(
266
-                    __( 'Post not found for path %s.', 'writing-on-github' ),
267
-                    $path
268
-                )
269
-            );
270
-        }
271
-
272
-        $result = wp_delete_post( $post_id );
273
-
274
-        // If deleting fails...
275
-        if ( false === $result ) {
276
-            $post = get_post( $post_id );
277
-
278
-            // ...and the post both exists and isn't in the trash...
279
-            if ( $post && 'trash' !== $post->post_status ) {
280
-                // ... then something went wrong.
281
-                return new WP_Error(
282
-                    'db_error',
283
-                    sprintf(
284
-                        __( 'Failed to delete post ID %d.', 'writing-on-github' ),
285
-                        $post_id
286
-                    )
287
-                );
288
-            }
289
-        }
290
-
291
-        return sprintf(
292
-            __( 'Successfully deleted post ID %d.', 'writing-on-github' ),
293
-            $post_id
294
-        );
295
-    }
296
-
297
-    public function delete_post( $post_id ) {
298
-        $result = wp_delete_post( $post_id );
299
-
300
-        // If deleting fails...
301
-        if ( false === $result ) {
302
-            $post = get_post( $post_id );
303
-
304
-            // ...and the post both exists and isn't in the trash...
305
-            if ( $post && 'trash' !== $post->post_status ) {
306
-                // ... then something went wrong.
307
-                return new WP_Error(
308
-                    'db_error',
309
-                    sprintf(
310
-                        __( 'Failed to delete post ID %d.', 'writing-on-github' ),
311
-                        $post_id
312
-                    )
313
-                );
314
-            }
315
-        }
316
-
317
-        return sprintf(
318
-            __( 'Successfully deleted post ID %d.', 'writing-on-github' ),
319
-            $post_id
320
-        );
321
-    }
322
-
323
-    /**
324
-     * Returns the list of post type permitted.
325
-     *
326
-     * @return array
327
-     */
328
-    protected function get_whitelisted_post_types() {
329
-        return apply_filters( 'wogh_whitelisted_post_types', $this->whitelisted_post_types );
330
-    }
331
-
332
-    /**
333
-     * Returns the list of post status permitted.
334
-     *
335
-     * @return array
336
-     */
337
-    protected function get_whitelisted_post_statuses() {
338
-        return apply_filters( 'wogh_whitelisted_post_statuses', $this->whitelisted_post_statuses );
339
-    }
340
-
341
-    /**
342
-     * Formats a whitelist array for a query.
343
-     *
344
-     * @param array $whitelist Whitelisted posts to format into query.
345
-     *
346
-     * @return string Whitelist formatted for query
347
-     */
348
-    protected function format_for_query( $whitelist ) {
349
-        foreach ( $whitelist as $key => $value ) {
350
-            $whitelist[ $key ] = "'$value'";
351
-        }
352
-
353
-        return implode( ', ', $whitelist );
354
-    }
355
-
356
-    /**
357
-     * Verifies that both the post's status & type
358
-     * are currently whitelisted
359
-     *
360
-     * @param  Writing_On_GitHub_Post $post Post to verify.
361
-     *
362
-     * @return boolean                          True if supported, false if not.
363
-     */
364
-    protected function is_post_supported( Writing_On_GitHub_Post $post ) {
365
-        if ( wp_is_post_revision( $post->id ) ) {
366
-            return false;
367
-        }
368
-
369
-        // We need to allow trashed posts to be queried, but they are not whitelisted for export.
370
-        if ( ! in_array( $post->status(), $this->get_whitelisted_post_statuses() ) && 'trash' !== $post->status() ) {
371
-            return false;
372
-        }
373
-
374
-        if ( ! in_array( $post->type(), $this->get_whitelisted_post_types() ) ) {
375
-            return false;
376
-        }
377
-
378
-        if ( $post->has_password() ) {
379
-            return false;
380
-        }
381
-
382
-        return apply_filters( 'wogh_is_post_supported', true, $post );
383
-    }
384
-
385
-    /**
386
-     * Retrieves the commit user for a provided display name
387
-     *
388
-     * Searches for a user with provided display name or returns
389
-     * the default user saved in the database.
390
-     *
391
-     * @param string $display_name User display name to search for.
392
-     *
393
-     * @return WP_Error|WP_User
394
-     */
395
-    protected function fetch_commit_user( $display_name ) {
396
-        // If we can't find a user and a default hasn't been set,
397
-        // we're just going to set the revision author to 0.
398
-        $user = false;
399
-
400
-        if ( ! empty( $display_name ) ) {
401
-            $search_string = esc_attr( $display_name );
402
-            $query = new WP_User_Query( array(
403
-                'search'         => "{$search_string}",
404
-                'search_columns' => array(
405
-                    'display_name',
406
-                    'user_nicename',
407
-                    'user_login',
408
-                )
409
-            ) );
410
-            $users = $query->get_results();
411
-            $user = empty($users) ? false : $users[0];
412
-        }
413
-
414
-        if ( ! $user ) {
415
-            // Use the default user.
416
-            $user = get_user_by( 'id', (int) get_option( 'wogh_default_user' ) );
417
-        }
418
-
419
-        if ( ! $user ) {
420
-            return new WP_Error(
421
-                'user_not_found',
422
-                sprintf(
423
-                    __( 'Commit user not found for email %s', 'writing-on-github' ),
424
-                    $email
425
-                )
426
-            );
427
-        }
428
-
429
-        return $user;
430
-    }
431
-
432
-    // /**
433
-    //  * Sets the author latest revision
434
-    //  * of the provided post ID to the provided user.
435
-    //  *
436
-    //  * @param int $post_id Post ID to update revision author.
437
-    //  * @param int $user_id User ID for revision author.
438
-    //  *
439
-    //  * @return string|WP_Error
440
-    //  */
441
-    // protected function set_revision_author( $post_id, $user_id ) {
442
-    //  $revision = wp_get_post_revisions( $post_id );
443
-
444
-    //  if ( ! $revision ) {
445
-    //      $new_revision = wp_save_post_revision( $post_id );
446
-
447
-    //      if ( ! $new_revision || is_wp_error( $new_revision ) ) {
448
-    //          return new WP_Error( 'db_error', 'There was a problem saving a new revision.' );
449
-    //      }
450
-
451
-    //      // `wp_save_post_revision` returns the ID, whereas `get_post_revision` returns the whole object
452
-    //      // in order to be consistent, let's make sure we have the whole object before continuing.
453
-    //      $revision = get_post( $new_revision );
454
-
455
-    //      if ( ! $revision ) {
456
-    //          return new WP_Error( 'db_error', 'There was a problem retrieving the newly recreated revision.' );
457
-    //      }
458
-    //  } else {
459
-    //      $revision = array_shift( $revision );
460
-    //  }
461
-
462
-    //  return $this->set_post_author( $revision->ID, $user_id );
463
-    // }
464
-
465
-    /**
466
-     * Updates the user ID for the provided post ID.
467
-     *
468
-     * Bypassing triggering any hooks, including creating new revisions.
469
-     *
470
-     * @param int $post_id Post ID to update.
471
-     * @param int $user_id User ID to update to.
472
-     *
473
-     * @return string|WP_Error
474
-     */
475
-    protected function set_post_author( $post_id, $user_id ) {
476
-        global $wpdb;
477
-
478
-        $result = $wpdb->update(
479
-            $wpdb->posts,
480
-            array(
481
-                'post_author' => (int) $user_id,
482
-            ),
483
-            array(
484
-                'ID' => (int) $post_id,
485
-            ),
486
-            array( '%d' ),
487
-            array( '%d' )
488
-        );
489
-
490
-        if ( false === $result ) {
491
-            return new WP_Error( 'db_error', $wpdb->last_error );
492
-        }
493
-
494
-        if ( 0 === $result ) {
495
-            return sprintf(
496
-                __( 'No change for post ID %d.', 'writing-on-github' ),
497
-                $post_id
498
-            );
499
-        }
500
-
501
-        clean_post_cache( $post_id );
502
-
503
-        return sprintf(
504
-            __( 'Successfully updated post ID %d.', 'writing-on-github' ),
505
-            $post_id
506
-        );
507
-    }
508
-
509
-    // *
510
-    //  * Update the provided post's blob sha.
511
-    //  *
512
-    //  * @param Writing_On_GitHub_Post $post Post to update.
513
-    //  * @param string                     $sha Sha to update to.
514
-    //  *
515
-    //  * @return bool|int
516
-
517
-    // public function set_post_sha( $post, $sha ) {
518
-    //  return update_post_meta( $post->id, '_wogh_sha', $sha );
519
-    // }
12
+	/**
13
+	 * Application container.
14
+	 *
15
+	 * @var Writing_On_GitHub
16
+	 */
17
+	protected $app;
18
+
19
+	/**
20
+	 * Currently whitelisted post types.
21
+	 *
22
+	 * @var array
23
+	 */
24
+	protected $whitelisted_post_types = array( 'post', 'page' );
25
+
26
+	/**
27
+	 * Currently whitelisted post statuses.
28
+	 *
29
+	 * @var array
30
+	 */
31
+	protected $whitelisted_post_statuses = array( 'publish' );
32
+
33
+	/**
34
+	 * Instantiates a new Database object.
35
+	 *
36
+	 * @param Writing_On_GitHub $app Application container.
37
+	 */
38
+	public function __construct( Writing_On_GitHub $app ) {
39
+		$this->app = $app;
40
+	}
41
+
42
+	/**
43
+	 * Queries the database for all of the supported posts.
44
+	 *
45
+	 * @param  bool $force
46
+	 *
47
+	 * @return Writing_On_GitHub_Post[]|WP_Error
48
+	 */
49
+	public function fetch_all_supported( $force = false ) {
50
+		$args  = array(
51
+			'post_type'   => $this->get_whitelisted_post_types(),
52
+			'post_status' => $this->get_whitelisted_post_statuses(),
53
+			'nopaging'    => true,
54
+			'fields'      => 'ids',
55
+		);
56
+
57
+		$query = new WP_Query( apply_filters( 'wogh_pre_fetch_all_supported', $args ) );
58
+
59
+		$post_ids = $query->get_posts();
60
+
61
+		if ( ! $post_ids ) {
62
+			return new WP_Error(
63
+				'no_results',
64
+				__( 'Querying for supported posts returned no results.', 'writing-on-github' )
65
+			);
66
+		}
67
+
68
+		/* @var Writing_On_GitHub_Post[] $results */
69
+		$results = array();
70
+		foreach ( $post_ids as $post_id ) {
71
+			// Do not export posts that have already been exported
72
+			if ( $force || ! get_post_meta( $post_id, '_wogh_sha', true ) ||
73
+				 ! get_post_meta( $post_id, '_wogh_github_path', true ) ) {
74
+
75
+				$results[] = new Writing_On_GitHub_Post( $post_id, $this->app->api() );
76
+			}
77
+		}
78
+
79
+		return $results;
80
+	}
81
+
82
+	/**
83
+	 * Queries a post and returns it if it's supported.
84
+	 *
85
+	 * @param int $post_id Post ID to fetch.
86
+	 *
87
+	 * @return WP_Error|Writing_On_GitHub_Post
88
+	 */
89
+	public function fetch_by_id( $post_id ) {
90
+		$post = new Writing_On_GitHub_Post( $post_id, $this->app->api() );
91
+
92
+		if ( ! $this->is_post_supported( $post ) ) {
93
+			return new WP_Error(
94
+				'unsupported_post',
95
+				sprintf(
96
+					__(
97
+						'Post ID %s is not supported by WOGH. See wiki to find out how to add support.',
98
+						'writing-on-github'
99
+					),
100
+					$post_id
101
+				)
102
+			);
103
+		}
104
+
105
+		return $post;
106
+	}
107
+
108
+	/**
109
+	 * Save an post to database
110
+	 * and associates their author as well as their latest
111
+	 *
112
+	 * @param  Writing_On_GitHub_Post $post [description]
113
+	 * @return WP_Error|true
114
+	 */
115
+	public function save_post( Writing_On_GitHub_Post $post ) {
116
+		$args = apply_filters( 'wogh_pre_import_args', $this->post_args( $post ), $post );
117
+
118
+		remove_filter( 'content_save_pre', 'wp_filter_post_kses' );
119
+		$post_id = $post->is_new() ?
120
+			wp_insert_post( $args, true ) :
121
+			wp_update_post( $args, true );
122
+		add_filter( 'content_save_pre', 'wp_filter_post_kses' );
123
+
124
+		if ( is_wp_error( $post_id ) ) {
125
+			/* @var WP_Error $post_id */
126
+			return $post_id;
127
+		}
128
+
129
+		if ( $post->is_new() ) {
130
+			$author = false;
131
+			$meta = $post->get_meta();
132
+			if ( ! empty( $meta ) && ! empty( $meta['author'] ) ) {
133
+				$author = $meta['author'];
134
+			}
135
+			$user    = $this->fetch_commit_user( $author );
136
+			$user_id = is_wp_error( $user ) ? 0 : $user->ID;
137
+			$this->set_post_author( $post_id, $user_id );
138
+		}
139
+
140
+		$post->set_post( get_post( $post_id ) );
141
+
142
+		$meta = apply_filters( 'wogh_pre_import_meta', $post->get_meta(), $post );
143
+
144
+		update_post_meta( $post_id, '_wogh_sha', $meta['_wogh_sha'] );
145
+
146
+		// unset( $meta['tags'] );
147
+		// unset( $meta['categories'] );
148
+		// unset( $meta['author'] );
149
+		// unset( $meta['post_date'] );
150
+		// unset( $meta['post_excerpt'] );
151
+		// unset( $meta['permalink'] );
152
+		// unset( $meta['link'] );
153
+
154
+		// foreach ( $meta as $key => $value ) {
155
+		//  update_post_meta( $post_id, $key, $value );
156
+		// }
157
+		return true;
158
+	}
159
+
160
+	protected function post_args( $post ) {
161
+		$args = $post->get_args();
162
+		$meta = $post->get_meta();
163
+
164
+		// prevent backslash loss
165
+		$args['post_content'] = addslashes( $args['post_content'] );
166
+
167
+		// update tags
168
+		if ( ! empty( $meta['tags'] ) ) {
169
+			$args['tags_input'] = $meta['tags'];
170
+		}
171
+
172
+		// update categories
173
+		if ( ! empty( $meta['categories'] ) ) {
174
+			$categories = $meta['categories'];
175
+			if ( ! is_array( $categories ) ) {
176
+				$categories = array( $categories );
177
+			}
178
+			$terms = get_terms( array(
179
+				'taxonomy' => 'category',
180
+				'fields' => 'id=>name',
181
+				'hide_empty' => 0,
182
+				'name' => $categories
183
+				)
184
+			);
185
+			$map = array();
186
+			foreach ( $categories as $name ) {
187
+				$map[$name] = 1;
188
+			}
189
+
190
+			$ids = array();
191
+			if ( ! empty( $terms ) ) {
192
+				foreach ( $terms as $id => $name ) {
193
+					$ids[] = $id;
194
+					unset( $map[$name] );
195
+				}
196
+			}
197
+
198
+			// create new terms
199
+			if ( ! empty( $map ) ) {
200
+				foreach ( $map as $name => $value ) {
201
+					$term = wp_insert_term( $name, 'category', array( 'parent' => 0 ) );
202
+					// array('term_id' => $term_id, 'term_taxonomy_id' => $tt_id);
203
+					$ids[] = $term['term_id'];
204
+				}
205
+			}
206
+
207
+			$args['post_category'] = $ids;
208
+		}
209
+
210
+		return $args;
211
+	}
212
+
213
+	private function get_post_id_by_filename( $filename, $pattern  ) {
214
+		preg_match( $pattern , $filename, $matches );
215
+		$title = $matches[4];
216
+
217
+		$query = new WP_Query( array(
218
+			'name'     => $title,
219
+			'posts_per_page' => 1,
220
+			'post_type' => $this->get_whitelisted_post_types(),
221
+			'fields'         => 'ids',
222
+		) );
223
+
224
+		$post_id = $query->get_posts();
225
+		$post_id = array_pop( $post_id );
226
+		return $post_id;
227
+	}
228
+
229
+	/**
230
+	 * Deletes a post from the database based on its GitHub path.
231
+	 *
232
+	 * @param string $path Path of Post to delete.
233
+	 *
234
+	 * @return string|WP_Error
235
+	 */
236
+	public function delete_post_by_path( $path ) {
237
+		$query = new WP_Query( array(
238
+			'meta_key'       => '_wogh_github_path',
239
+			'meta_value'     => $path,
240
+			'meta_compare'   => '=',
241
+			'posts_per_page' => 1,
242
+			'fields'         => 'ids',
243
+		) );
244
+
245
+		$post_id = $query->get_posts();
246
+		$post_id = array_pop( $post_id );
247
+
248
+		if ( ! $post_id ) {
249
+			$parts     = explode( '/', $path );
250
+			$filename  = array_pop( $parts );
251
+			$directory = $parts ? array_shift( $parts ) : '';
252
+
253
+			if ( false !== strpos( $directory, 'post' ) ) {
254
+				$post_id = get_post_id_by_filename( $filename, '/([0-9]{4})-([0-9]{2})-([0-9]{2})-(.*)\.md/' );
255
+			}
256
+
257
+			if ( ! $post_id ) {
258
+				$post_id = get_post_id_by_filename( $filename, '/(.*)\.md/' );
259
+			}
260
+		}
261
+
262
+		if ( ! $post_id ) {
263
+			return new WP_Error(
264
+				'path_not_found',
265
+				sprintf(
266
+					__( 'Post not found for path %s.', 'writing-on-github' ),
267
+					$path
268
+				)
269
+			);
270
+		}
271
+
272
+		$result = wp_delete_post( $post_id );
273
+
274
+		// If deleting fails...
275
+		if ( false === $result ) {
276
+			$post = get_post( $post_id );
277
+
278
+			// ...and the post both exists and isn't in the trash...
279
+			if ( $post && 'trash' !== $post->post_status ) {
280
+				// ... then something went wrong.
281
+				return new WP_Error(
282
+					'db_error',
283
+					sprintf(
284
+						__( 'Failed to delete post ID %d.', 'writing-on-github' ),
285
+						$post_id
286
+					)
287
+				);
288
+			}
289
+		}
290
+
291
+		return sprintf(
292
+			__( 'Successfully deleted post ID %d.', 'writing-on-github' ),
293
+			$post_id
294
+		);
295
+	}
296
+
297
+	public function delete_post( $post_id ) {
298
+		$result = wp_delete_post( $post_id );
299
+
300
+		// If deleting fails...
301
+		if ( false === $result ) {
302
+			$post = get_post( $post_id );
303
+
304
+			// ...and the post both exists and isn't in the trash...
305
+			if ( $post && 'trash' !== $post->post_status ) {
306
+				// ... then something went wrong.
307
+				return new WP_Error(
308
+					'db_error',
309
+					sprintf(
310
+						__( 'Failed to delete post ID %d.', 'writing-on-github' ),
311
+						$post_id
312
+					)
313
+				);
314
+			}
315
+		}
316
+
317
+		return sprintf(
318
+			__( 'Successfully deleted post ID %d.', 'writing-on-github' ),
319
+			$post_id
320
+		);
321
+	}
322
+
323
+	/**
324
+	 * Returns the list of post type permitted.
325
+	 *
326
+	 * @return array
327
+	 */
328
+	protected function get_whitelisted_post_types() {
329
+		return apply_filters( 'wogh_whitelisted_post_types', $this->whitelisted_post_types );
330
+	}
331
+
332
+	/**
333
+	 * Returns the list of post status permitted.
334
+	 *
335
+	 * @return array
336
+	 */
337
+	protected function get_whitelisted_post_statuses() {
338
+		return apply_filters( 'wogh_whitelisted_post_statuses', $this->whitelisted_post_statuses );
339
+	}
340
+
341
+	/**
342
+	 * Formats a whitelist array for a query.
343
+	 *
344
+	 * @param array $whitelist Whitelisted posts to format into query.
345
+	 *
346
+	 * @return string Whitelist formatted for query
347
+	 */
348
+	protected function format_for_query( $whitelist ) {
349
+		foreach ( $whitelist as $key => $value ) {
350
+			$whitelist[ $key ] = "'$value'";
351
+		}
352
+
353
+		return implode( ', ', $whitelist );
354
+	}
355
+
356
+	/**
357
+	 * Verifies that both the post's status & type
358
+	 * are currently whitelisted
359
+	 *
360
+	 * @param  Writing_On_GitHub_Post $post Post to verify.
361
+	 *
362
+	 * @return boolean                          True if supported, false if not.
363
+	 */
364
+	protected function is_post_supported( Writing_On_GitHub_Post $post ) {
365
+		if ( wp_is_post_revision( $post->id ) ) {
366
+			return false;
367
+		}
368
+
369
+		// We need to allow trashed posts to be queried, but they are not whitelisted for export.
370
+		if ( ! in_array( $post->status(), $this->get_whitelisted_post_statuses() ) && 'trash' !== $post->status() ) {
371
+			return false;
372
+		}
373
+
374
+		if ( ! in_array( $post->type(), $this->get_whitelisted_post_types() ) ) {
375
+			return false;
376
+		}
377
+
378
+		if ( $post->has_password() ) {
379
+			return false;
380
+		}
381
+
382
+		return apply_filters( 'wogh_is_post_supported', true, $post );
383
+	}
384
+
385
+	/**
386
+	 * Retrieves the commit user for a provided display name
387
+	 *
388
+	 * Searches for a user with provided display name or returns
389
+	 * the default user saved in the database.
390
+	 *
391
+	 * @param string $display_name User display name to search for.
392
+	 *
393
+	 * @return WP_Error|WP_User
394
+	 */
395
+	protected function fetch_commit_user( $display_name ) {
396
+		// If we can't find a user and a default hasn't been set,
397
+		// we're just going to set the revision author to 0.
398
+		$user = false;
399
+
400
+		if ( ! empty( $display_name ) ) {
401
+			$search_string = esc_attr( $display_name );
402
+			$query = new WP_User_Query( array(
403
+				'search'         => "{$search_string}",
404
+				'search_columns' => array(
405
+					'display_name',
406
+					'user_nicename',
407
+					'user_login',
408
+				)
409
+			) );
410
+			$users = $query->get_results();
411
+			$user = empty($users) ? false : $users[0];
412
+		}
413
+
414
+		if ( ! $user ) {
415
+			// Use the default user.
416
+			$user = get_user_by( 'id', (int) get_option( 'wogh_default_user' ) );
417
+		}
418
+
419
+		if ( ! $user ) {
420
+			return new WP_Error(
421
+				'user_not_found',
422
+				sprintf(
423
+					__( 'Commit user not found for email %s', 'writing-on-github' ),
424
+					$email
425
+				)
426
+			);
427
+		}
428
+
429
+		return $user;
430
+	}
431
+
432
+	// /**
433
+	//  * Sets the author latest revision
434
+	//  * of the provided post ID to the provided user.
435
+	//  *
436
+	//  * @param int $post_id Post ID to update revision author.
437
+	//  * @param int $user_id User ID for revision author.
438
+	//  *
439
+	//  * @return string|WP_Error
440
+	//  */
441
+	// protected function set_revision_author( $post_id, $user_id ) {
442
+	//  $revision = wp_get_post_revisions( $post_id );
443
+
444
+	//  if ( ! $revision ) {
445
+	//      $new_revision = wp_save_post_revision( $post_id );
446
+
447
+	//      if ( ! $new_revision || is_wp_error( $new_revision ) ) {
448
+	//          return new WP_Error( 'db_error', 'There was a problem saving a new revision.' );
449
+	//      }
450
+
451
+	//      // `wp_save_post_revision` returns the ID, whereas `get_post_revision` returns the whole object
452
+	//      // in order to be consistent, let's make sure we have the whole object before continuing.
453
+	//      $revision = get_post( $new_revision );
454
+
455
+	//      if ( ! $revision ) {
456
+	//          return new WP_Error( 'db_error', 'There was a problem retrieving the newly recreated revision.' );
457
+	//      }
458
+	//  } else {
459
+	//      $revision = array_shift( $revision );
460
+	//  }
461
+
462
+	//  return $this->set_post_author( $revision->ID, $user_id );
463
+	// }
464
+
465
+	/**
466
+	 * Updates the user ID for the provided post ID.
467
+	 *
468
+	 * Bypassing triggering any hooks, including creating new revisions.
469
+	 *
470
+	 * @param int $post_id Post ID to update.
471
+	 * @param int $user_id User ID to update to.
472
+	 *
473
+	 * @return string|WP_Error
474
+	 */
475
+	protected function set_post_author( $post_id, $user_id ) {
476
+		global $wpdb;
477
+
478
+		$result = $wpdb->update(
479
+			$wpdb->posts,
480
+			array(
481
+				'post_author' => (int) $user_id,
482
+			),
483
+			array(
484
+				'ID' => (int) $post_id,
485
+			),
486
+			array( '%d' ),
487
+			array( '%d' )
488
+		);
489
+
490
+		if ( false === $result ) {
491
+			return new WP_Error( 'db_error', $wpdb->last_error );
492
+		}
493
+
494
+		if ( 0 === $result ) {
495
+			return sprintf(
496
+				__( 'No change for post ID %d.', 'writing-on-github' ),
497
+				$post_id
498
+			);
499
+		}
500
+
501
+		clean_post_cache( $post_id );
502
+
503
+		return sprintf(
504
+			__( 'Successfully updated post ID %d.', 'writing-on-github' ),
505
+			$post_id
506
+		);
507
+	}
508
+
509
+	// *
510
+	//  * Update the provided post's blob sha.
511
+	//  *
512
+	//  * @param Writing_On_GitHub_Post $post Post to update.
513
+	//  * @param string                     $sha Sha to update to.
514
+	//  *
515
+	//  * @return bool|int
516
+
517
+	// public function set_post_sha( $post, $sha ) {
518
+	//  return update_post_meta( $post->id, '_wogh_sha', $sha );
519
+	// }
520 520
 }
Please login to merge, or discard this patch.
lib/client/fetch.php 1 patch
Indentation   +114 added lines, -114 removed lines patch added patch discarded remove patch
@@ -9,118 +9,118 @@
 block discarded – undo
9 9
  */
10 10
 class Writing_On_GitHub_Fetch_Client extends Writing_On_GitHub_Base_Client {
11 11
 
12
-    /**
13
-     * Compare a commit by sha with master from the GitHub API
14
-     *
15
-     * @param string $sha Sha for commit to retrieve.
16
-     *
17
-     * @return Writing_On_GitHub_File_Info[]|WP_Error
18
-     */
19
-    public function compare( $sha ) {
20
-        // https://api.github.com/repos/litefeel/testwpsync/compare/861f87e8851b8debb78db548269d29f8da4d94ac...master
21
-        $endpoint = $this->compare_endpoint();
22
-        $branch = $this->branch();
23
-        $data = $this->call( 'GET', "$endpoint/$sha...$branch" );
24
-
25
-        if ( is_wp_error( $data ) ) {
26
-            return $data;
27
-        }
28
-
29
-        $files = array();
30
-        foreach ($data->files as $file) {
31
-            $file->path = $file->filename;
32
-            $files[] = new Writing_On_GitHub_File_Info($file);
33
-        }
34
-
35
-        return $files;
36
-    }
37
-
38
-    /**
39
-     * Calls the content API to get the post's contents and metadata
40
-     *
41
-     * Returns Object the response from the API
42
-     *
43
-     * @param Writing_On_GitHub_Post $post Post to retrieve remote contents for.
44
-     *
45
-     * @return mixed
46
-     */
47
-    public function remote_contents( $post ) {
48
-        return $this->call( 'GET', $this->content_endpoint( $post->github_path() ) );
49
-    }
50
-
51
-
52
-
53
-    public function exists( $path ) {
54
-        $result = $this->call( 'GET', $this->content_endpoint( $path ) );
55
-        if ( is_wp_error( $result ) ) {
56
-            return false;
57
-        }
58
-        return true;
59
-    }
60
-
61
-    /**
62
-     * Retrieves a tree by sha recursively from the GitHub API
63
-     *
64
-     * @param string $sha Commit sha to retrieve tree from.
65
-     *
66
-     * @return Writing_On_GitHub_File_Info[]|WP_Error
67
-     */
68
-    public function tree_recursive( $sha = '_default' ) {
69
-
70
-        if ( '_default' === $sha ) {
71
-            $sha = $this->branch();
72
-        }
73
-
74
-        $data = $this->call( 'GET', $this->tree_endpoint() . '/' . $sha . '?recursive=1' );
75
-
76
-        if ( is_wp_error( $data ) ) {
77
-            return $data;
78
-        }
79
-
80
-        $files = array();
81
-
82
-        foreach ( $data->tree as $index => $thing ) {
83
-            // We need to remove the trees because
84
-            // the recursive tree includes both
85
-            // the subtrees as well the subtrees' blobs.
86
-            if ( 'blob' === $thing->type ) {
87
-                $thing->status = '';
88
-                $files[] = new Writing_On_GitHub_File_Info( $thing );
89
-            }
90
-        }
91
-
92
-        return $files;
93
-    }
94
-
95
-    /**
96
-     * Retrieves the blob data for a given sha
97
-     *
98
-     * @param Writing_On_GitHub_File_Info $fileinfo
99
-     *
100
-     * @return Writing_On_GitHub_Blob|WP_Error
101
-     */
102
-    public function blob( Writing_On_GitHub_File_Info $fileinfo ) {
103
-        $data = $this->call( 'GET', $this->blob_endpoint() . '/' . $fileinfo->sha );
104
-
105
-        if ( is_wp_error( $data ) ) {
106
-            return $data;
107
-        }
108
-
109
-        $data->path = $fileinfo->path;
110
-        return new Writing_On_GitHub_Blob( $data );
111
-    }
112
-
113
-    /**
114
-     * Get blob by path
115
-     * @param  string $path
116
-     * @return Writing_On_GitHub_Blob|WP_Error
117
-     */
118
-    public function blob_by_path( $path ) {
119
-        $result = $this->call( 'GET', $this->content_endpoint( $path ) );
120
-        if ( is_wp_error( $result ) ) {
121
-            return $result;
122
-        }
123
-
124
-        return new Writing_On_GitHub_Blob( $result );
125
-    }
12
+	/**
13
+	 * Compare a commit by sha with master from the GitHub API
14
+	 *
15
+	 * @param string $sha Sha for commit to retrieve.
16
+	 *
17
+	 * @return Writing_On_GitHub_File_Info[]|WP_Error
18
+	 */
19
+	public function compare( $sha ) {
20
+		// https://api.github.com/repos/litefeel/testwpsync/compare/861f87e8851b8debb78db548269d29f8da4d94ac...master
21
+		$endpoint = $this->compare_endpoint();
22
+		$branch = $this->branch();
23
+		$data = $this->call( 'GET', "$endpoint/$sha...$branch" );
24
+
25
+		if ( is_wp_error( $data ) ) {
26
+			return $data;
27
+		}
28
+
29
+		$files = array();
30
+		foreach ($data->files as $file) {
31
+			$file->path = $file->filename;
32
+			$files[] = new Writing_On_GitHub_File_Info($file);
33
+		}
34
+
35
+		return $files;
36
+	}
37
+
38
+	/**
39
+	 * Calls the content API to get the post's contents and metadata
40
+	 *
41
+	 * Returns Object the response from the API
42
+	 *
43
+	 * @param Writing_On_GitHub_Post $post Post to retrieve remote contents for.
44
+	 *
45
+	 * @return mixed
46
+	 */
47
+	public function remote_contents( $post ) {
48
+		return $this->call( 'GET', $this->content_endpoint( $post->github_path() ) );
49
+	}
50
+
51
+
52
+
53
+	public function exists( $path ) {
54
+		$result = $this->call( 'GET', $this->content_endpoint( $path ) );
55
+		if ( is_wp_error( $result ) ) {
56
+			return false;
57
+		}
58
+		return true;
59
+	}
60
+
61
+	/**
62
+	 * Retrieves a tree by sha recursively from the GitHub API
63
+	 *
64
+	 * @param string $sha Commit sha to retrieve tree from.
65
+	 *
66
+	 * @return Writing_On_GitHub_File_Info[]|WP_Error
67
+	 */
68
+	public function tree_recursive( $sha = '_default' ) {
69
+
70
+		if ( '_default' === $sha ) {
71
+			$sha = $this->branch();
72
+		}
73
+
74
+		$data = $this->call( 'GET', $this->tree_endpoint() . '/' . $sha . '?recursive=1' );
75
+
76
+		if ( is_wp_error( $data ) ) {
77
+			return $data;
78
+		}
79
+
80
+		$files = array();
81
+
82
+		foreach ( $data->tree as $index => $thing ) {
83
+			// We need to remove the trees because
84
+			// the recursive tree includes both
85
+			// the subtrees as well the subtrees' blobs.
86
+			if ( 'blob' === $thing->type ) {
87
+				$thing->status = '';
88
+				$files[] = new Writing_On_GitHub_File_Info( $thing );
89
+			}
90
+		}
91
+
92
+		return $files;
93
+	}
94
+
95
+	/**
96
+	 * Retrieves the blob data for a given sha
97
+	 *
98
+	 * @param Writing_On_GitHub_File_Info $fileinfo
99
+	 *
100
+	 * @return Writing_On_GitHub_Blob|WP_Error
101
+	 */
102
+	public function blob( Writing_On_GitHub_File_Info $fileinfo ) {
103
+		$data = $this->call( 'GET', $this->blob_endpoint() . '/' . $fileinfo->sha );
104
+
105
+		if ( is_wp_error( $data ) ) {
106
+			return $data;
107
+		}
108
+
109
+		$data->path = $fileinfo->path;
110
+		return new Writing_On_GitHub_Blob( $data );
111
+	}
112
+
113
+	/**
114
+	 * Get blob by path
115
+	 * @param  string $path
116
+	 * @return Writing_On_GitHub_Blob|WP_Error
117
+	 */
118
+	public function blob_by_path( $path ) {
119
+		$result = $this->call( 'GET', $this->content_endpoint( $path ) );
120
+		if ( is_wp_error( $result ) ) {
121
+			return $result;
122
+		}
123
+
124
+		return new Writing_On_GitHub_Blob( $result );
125
+	}
126 126
 }
Please login to merge, or discard this patch.