Passed
Push — ci ( 3d0aed...c9c5cb )
by litefeel
02:33
created
lib/request.php 2 patches
Indentation   +132 added lines, -132 removed lines patch added patch discarded remove patch
@@ -9,136 +9,136 @@
 block discarded – undo
9 9
  */
10 10
 class Writing_On_GitHub_Request {
11 11
 
12
-    /**
13
-     * Application container.
14
-     *
15
-     * @var Writing_On_GitHub
16
-     */
17
-    protected $app;
18
-
19
-    /**
20
-     * Raw request data.
21
-     *
22
-     * @var string
23
-     */
24
-    protected $raw_data;
25
-
26
-    /**
27
-     * Headers
28
-     * @var array
29
-     */
30
-    protected $headers;
31
-
32
-    /**
33
-     * Writing_On_GitHub_Request constructor.
34
-     *
35
-     * @param Writing_On_GitHub $app Application container.
36
-     */
37
-    public function __construct( Writing_On_GitHub $app ) {
38
-        $this->app = $app;
39
-    }
40
-
41
-    /**
42
-     * Validates the header's secret.
43
-     *
44
-     * @return true|WP_Error
45
-     */
46
-    public function is_secret_valid() {
47
-        $headers = $this->headers();
48
-
49
-        $this->raw_data = $this->read_raw_data();
50
-
51
-        // Validate request secret.
52
-        $hash = hash_hmac( 'sha1', $this->raw_data, $this->secret() );
53
-        if ( 'sha1=' . $hash !== $headers['X-Hub-Signature'] ) {
54
-            return false;
55
-        }
56
-
57
-        //      [X-Hub-Signature] => sha1=3cf3da70de401f7dfff053392f60cc534efed3b4
58
-        //     [Content-Type] => application/json
59
-        //     [X-Github-Delivery] => b2102500-0acf-11e7-8acb-fd86a3497c2f
60
-        //     [X-Github-Event] => ping
61
-
62
-        return true;
63
-    }
64
-
65
-    /**
66
-     * Validates the ping event.
67
-     * @return boolean
68
-     */
69
-    public function is_ping() {
70
-        $headers = $this->headers();
71
-
72
-        $event = $headers['X-Github-Event'];
73
-        return 'ping' == $event;
74
-    }
75
-
76
-    /**
77
-     * Validates the push event.
78
-     * @return boolean
79
-     */
80
-    public function is_push() {
81
-        $headers = $this->headers();
82
-
83
-        $event = $headers['X-Github-Event'];
84
-        return 'push' == $event;
85
-    }
86
-
87
-    /**
88
-     * Returns a payload object for the given request.
89
-     *
90
-     * @return Writing_On_GitHub_Payload
91
-     */
92
-    public function payload() {
93
-        return new Writing_On_GitHub_Payload( $this->app, $this->raw_data );
94
-    }
95
-
96
-    /**
97
-     * Cross-server header support.
98
-     *
99
-     * Returns an array of the request's headers.
100
-     *
101
-     * @return array
102
-     */
103
-    protected function headers() {
104
-        if ( ! empty( $this->headers ) ) {
105
-            return $this->headers;
106
-        }
107
-
108
-        if ( function_exists( 'getallheaders' ) ) {
109
-
110
-            $this->headers = getallheaders();
111
-            return $this->headers;
112
-        }
113
-        /**
114
-         * Nginx and pre 5.4 workaround.
115
-         * @see http://www.php.net/manual/en/function.getallheaders.php
116
-         */
117
-        $this->headers = array();
118
-        foreach ( $_SERVER as $name => $value ) {
119
-            if ( 'HTTP_' === substr( $name, 0, 5 ) ) {
120
-                $this->headers[ str_replace( ' ', '-', ucwords( strtolower( str_replace( '_', ' ', substr( $name, 5 ) ) ) ) ) ] = $value;
121
-            }
122
-        }
123
-
124
-        return $this->headers;
125
-    }
126
-
127
-    /**
128
-     * Reads the raw data from STDIN.
129
-     *
130
-     * @return string
131
-     */
132
-    protected function read_raw_data() {
133
-        return file_get_contents( 'php://input' );
134
-    }
135
-
136
-    /**
137
-     * Returns the Webhook secret
138
-     *
139
-     * @return string
140
-     */
141
-    protected function secret() {
142
-        return get_option( 'wogh_secret' );
143
-    }
12
+	/**
13
+	 * Application container.
14
+	 *
15
+	 * @var Writing_On_GitHub
16
+	 */
17
+	protected $app;
18
+
19
+	/**
20
+	 * Raw request data.
21
+	 *
22
+	 * @var string
23
+	 */
24
+	protected $raw_data;
25
+
26
+	/**
27
+	 * Headers
28
+	 * @var array
29
+	 */
30
+	protected $headers;
31
+
32
+	/**
33
+	 * Writing_On_GitHub_Request constructor.
34
+	 *
35
+	 * @param Writing_On_GitHub $app Application container.
36
+	 */
37
+	public function __construct( Writing_On_GitHub $app ) {
38
+		$this->app = $app;
39
+	}
40
+
41
+	/**
42
+	 * Validates the header's secret.
43
+	 *
44
+	 * @return true|WP_Error
45
+	 */
46
+	public function is_secret_valid() {
47
+		$headers = $this->headers();
48
+
49
+		$this->raw_data = $this->read_raw_data();
50
+
51
+		// Validate request secret.
52
+		$hash = hash_hmac( 'sha1', $this->raw_data, $this->secret() );
53
+		if ( 'sha1=' . $hash !== $headers['X-Hub-Signature'] ) {
54
+			return false;
55
+		}
56
+
57
+		//      [X-Hub-Signature] => sha1=3cf3da70de401f7dfff053392f60cc534efed3b4
58
+		//     [Content-Type] => application/json
59
+		//     [X-Github-Delivery] => b2102500-0acf-11e7-8acb-fd86a3497c2f
60
+		//     [X-Github-Event] => ping
61
+
62
+		return true;
63
+	}
64
+
65
+	/**
66
+	 * Validates the ping event.
67
+	 * @return boolean
68
+	 */
69
+	public function is_ping() {
70
+		$headers = $this->headers();
71
+
72
+		$event = $headers['X-Github-Event'];
73
+		return 'ping' == $event;
74
+	}
75
+
76
+	/**
77
+	 * Validates the push event.
78
+	 * @return boolean
79
+	 */
80
+	public function is_push() {
81
+		$headers = $this->headers();
82
+
83
+		$event = $headers['X-Github-Event'];
84
+		return 'push' == $event;
85
+	}
86
+
87
+	/**
88
+	 * Returns a payload object for the given request.
89
+	 *
90
+	 * @return Writing_On_GitHub_Payload
91
+	 */
92
+	public function payload() {
93
+		return new Writing_On_GitHub_Payload( $this->app, $this->raw_data );
94
+	}
95
+
96
+	/**
97
+	 * Cross-server header support.
98
+	 *
99
+	 * Returns an array of the request's headers.
100
+	 *
101
+	 * @return array
102
+	 */
103
+	protected function headers() {
104
+		if ( ! empty( $this->headers ) ) {
105
+			return $this->headers;
106
+		}
107
+
108
+		if ( function_exists( 'getallheaders' ) ) {
109
+
110
+			$this->headers = getallheaders();
111
+			return $this->headers;
112
+		}
113
+		/**
114
+		 * Nginx and pre 5.4 workaround.
115
+		 * @see http://www.php.net/manual/en/function.getallheaders.php
116
+		 */
117
+		$this->headers = array();
118
+		foreach ( $_SERVER as $name => $value ) {
119
+			if ( 'HTTP_' === substr( $name, 0, 5 ) ) {
120
+				$this->headers[ str_replace( ' ', '-', ucwords( strtolower( str_replace( '_', ' ', substr( $name, 5 ) ) ) ) ) ] = $value;
121
+			}
122
+		}
123
+
124
+		return $this->headers;
125
+	}
126
+
127
+	/**
128
+	 * Reads the raw data from STDIN.
129
+	 *
130
+	 * @return string
131
+	 */
132
+	protected function read_raw_data() {
133
+		return file_get_contents( 'php://input' );
134
+	}
135
+
136
+	/**
137
+	 * Returns the Webhook secret
138
+	 *
139
+	 * @return string
140
+	 */
141
+	protected function secret() {
142
+		return get_option( 'wogh_secret' );
143
+	}
144 144
 }
Please login to merge, or discard this patch.
Spacing   +11 added lines, -11 removed lines patch added patch discarded remove patch
@@ -34,7 +34,7 @@  discard block
 block discarded – undo
34 34
      *
35 35
      * @param Writing_On_GitHub $app Application container.
36 36
      */
37
-    public function __construct( Writing_On_GitHub $app ) {
37
+    public function __construct(Writing_On_GitHub $app) {
38 38
         $this->app = $app;
39 39
     }
40 40
 
@@ -49,8 +49,8 @@  discard block
 block discarded – undo
49 49
         $this->raw_data = $this->read_raw_data();
50 50
 
51 51
         // Validate request secret.
52
-        $hash = hash_hmac( 'sha1', $this->raw_data, $this->secret() );
53
-        if ( 'sha1=' . $hash !== $headers['X-Hub-Signature'] ) {
52
+        $hash = hash_hmac('sha1', $this->raw_data, $this->secret());
53
+        if ('sha1=' . $hash !== $headers['X-Hub-Signature']) {
54 54
             return false;
55 55
         }
56 56
 
@@ -90,7 +90,7 @@  discard block
 block discarded – undo
90 90
      * @return Writing_On_GitHub_Payload
91 91
      */
92 92
     public function payload() {
93
-        return new Writing_On_GitHub_Payload( $this->app, $this->raw_data );
93
+        return new Writing_On_GitHub_Payload($this->app, $this->raw_data);
94 94
     }
95 95
 
96 96
     /**
@@ -101,11 +101,11 @@  discard block
 block discarded – undo
101 101
      * @return array
102 102
      */
103 103
     protected function headers() {
104
-        if ( ! empty( $this->headers ) ) {
104
+        if ( ! empty($this->headers)) {
105 105
             return $this->headers;
106 106
         }
107 107
 
108
-        if ( function_exists( 'getallheaders' ) ) {
108
+        if (function_exists('getallheaders')) {
109 109
 
110 110
             $this->headers = getallheaders();
111 111
             return $this->headers;
@@ -115,9 +115,9 @@  discard block
 block discarded – undo
115 115
          * @see http://www.php.net/manual/en/function.getallheaders.php
116 116
          */
117 117
         $this->headers = array();
118
-        foreach ( $_SERVER as $name => $value ) {
119
-            if ( 'HTTP_' === substr( $name, 0, 5 ) ) {
120
-                $this->headers[ str_replace( ' ', '-', ucwords( strtolower( str_replace( '_', ' ', substr( $name, 5 ) ) ) ) ) ] = $value;
118
+        foreach ($_SERVER as $name => $value) {
119
+            if ('HTTP_' === substr($name, 0, 5)) {
120
+                $this->headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
121 121
             }
122 122
         }
123 123
 
@@ -130,7 +130,7 @@  discard block
 block discarded – undo
130 130
      * @return string
131 131
      */
132 132
     protected function read_raw_data() {
133
-        return file_get_contents( 'php://input' );
133
+        return file_get_contents('php://input');
134 134
     }
135 135
 
136 136
     /**
@@ -139,6 +139,6 @@  discard block
 block discarded – undo
139 139
      * @return string
140 140
      */
141 141
     protected function secret() {
142
-        return get_option( 'wogh_secret' );
142
+        return get_option('wogh_secret');
143 143
     }
144 144
 }
Please login to merge, or discard this patch.
lib/blob.php 2 patches
Indentation   +207 added lines, -207 removed lines patch added patch discarded remove patch
@@ -9,211 +9,211 @@
 block discarded – undo
9 9
  */
10 10
 class Writing_On_GitHub_Blob {
11 11
 
12
-    /**
13
-     * Complete blob content.
14
-     *
15
-     * @var string
16
-     */
17
-    protected $content;
18
-
19
-    /**
20
-     * Blob sha.
21
-     *
22
-     * @var string
23
-     */
24
-    protected $sha;
25
-
26
-    /**
27
-     * Blob path.
28
-     *
29
-     * @var string
30
-     */
31
-    protected $path;
32
-
33
-    /**
34
-     * Post id.
35
-     *
36
-     * @var int
37
-     */
38
-    protected $id;
39
-
40
-    /**
41
-     * Whether the blob has frontmatter.
42
-     *
43
-     * @var boolean
44
-     */
45
-    protected $frontmatter = false;
46
-
47
-    /**
48
-     * Instantiates a new Blob object.
49
-     *
50
-     * @param stdClass $data Raw blob data.
51
-     */
52
-    public function __construct( stdClass $data ) {
53
-        $this->interpret_data( $data );
54
-    }
55
-
56
-    public function id() {
57
-        return $this->id;
58
-    }
59
-
60
-    public function set_id($id) {
61
-        $this->id = $id;
62
-    }
63
-
64
-    /**
65
-     * Returns the raw blob content.
66
-     *
67
-     * @return string
68
-     */
69
-    public function content() {
70
-        return $this->content;
71
-    }
72
-
73
-    /**
74
-     * Set's the blob's content.
75
-     *
76
-     * @param string $content Raw blob content.
77
-     * @param bool   $base64 Whether the content is base64 encoded.
78
-     *
79
-     * @return $this
80
-     */
81
-    public function set_content( $content, $base64 = false ) {
82
-        if ( $base64 ) {
83
-            $content = base64_decode( $content );
84
-        }
85
-
86
-        $this->frontmatter = '---' === substr( $this->content = $content, 0, 3 ) ? true : false;
87
-
88
-        return $this;
89
-    }
90
-    /**
91
-     * Returns the blob sha.
92
-     *
93
-     * @return string
94
-     */
95
-    public function sha() {
96
-        return $this->sha;
97
-    }
98
-
99
-    /**
100
-     * Return's the blob path.
101
-     *
102
-     * @return string
103
-     */
104
-    public function path() {
105
-        return $this->path;
106
-    }
107
-
108
-    /**
109
-     * Whether the blob has frontmatter.
110
-     *
111
-     * @return bool
112
-     */
113
-    public function has_frontmatter() {
114
-        return $this->frontmatter;
115
-    }
116
-
117
-    /**
118
-     * Returns the formatted/filtered blob content used for import.
119
-     *
120
-     * @return string
121
-     */
122
-    public function content_import() {
123
-        $content = $this->content();
124
-
125
-        if ( $this->has_frontmatter() ) {
126
-            // Break out content.
127
-            preg_match( '/(^---(.*?)---$)?(.*)/ms', $content, $matches );
128
-            $content = array_pop( $matches );
129
-        }
130
-
131
-        if ( function_exists( 'wpmarkdown_markdown_to_html' ) ) {
132
-            $content = wpmarkdown_markdown_to_html( $content );
133
-        }
134
-
135
-        /**
136
-         * Filters the content for import.
137
-         */
138
-        return apply_filters( 'wogh_content_import', trim( $content ) );
139
-    }
140
-
141
-    /**
142
-     * Returns the blob meta.
143
-     *
144
-     * @return array
145
-     */
146
-    public function meta() {
147
-        $meta = array();
148
-
149
-        if ( $this->has_frontmatter() ) {
150
-            // Break out meta, if present.
151
-            preg_match( '/(^---(.*?)---$)?(.*)/ms', $this->content(), $matches );
152
-            array_pop( $matches );
153
-
154
-            $meta = spyc_load( $matches[2] );
155
-            if ( 'yes' == get_option('wogh_ignore_author') ) {
156
-                unset($meta['author']);
157
-            }
158
-            // if ( isset( $meta['link'] ) ) {
159
-            //  $meta['link'] = str_replace( home_url(), '', $meta['link'] );
160
-            // }
161
-        }
162
-
163
-        return $meta;
164
-    }
165
-
166
-    /**
167
-     * Formats the blob into an API call body.
168
-     *
169
-     * @return stdClass
170
-     */
171
-    // public function to_body() {
172
-    //  $data = new stdClass;
173
-
174
-    //  $data->mode = '100644';
175
-    //  $data->type = 'blob';
176
-
177
-    //  $data->path = $this->path();
178
-
179
-    //  if ( $this->sha() ) {
180
-    //      $data->sha = $this->sha();
181
-    //  } else {
182
-    //      $data->content = $this->content();
183
-    //  }
184
-
185
-    //  return $data;
186
-    // }
187
-
188
-
189
-    /**
190
-     * Formats the blob into an API call body.
191
-     *
192
-     * @return stdClass
193
-     */
194
-    public function to_body() {
195
-        $data = new stdClass;
196
-
197
-        // $data->mode = '100644';
198
-        // $data->type = 'blob';
199
-
200
-        $data->path = $this->path();
201
-        $data->content = base64_encode( $this->content() );
202
-        $data->sha = $this->sha;
203
-
204
-        return $data;
205
-    }
206
-
207
-    /**
208
-     * Interprets the blob's data into properties.
209
-     */
210
-    protected function interpret_data( $data ) {
211
-        $this->sha  = isset( $data->sha  ) ? $data->sha  : '';
212
-        $this->path = isset( $data->path ) ? $data->path : '';
213
-
214
-        $this->set_content(
215
-            isset( $data->content ) ? trim( $data->content ) : '',
216
-            isset( $data->encoding ) && 'base64' === $data->encoding ? true : false
217
-        );
218
-    }
12
+	/**
13
+	 * Complete blob content.
14
+	 *
15
+	 * @var string
16
+	 */
17
+	protected $content;
18
+
19
+	/**
20
+	 * Blob sha.
21
+	 *
22
+	 * @var string
23
+	 */
24
+	protected $sha;
25
+
26
+	/**
27
+	 * Blob path.
28
+	 *
29
+	 * @var string
30
+	 */
31
+	protected $path;
32
+
33
+	/**
34
+	 * Post id.
35
+	 *
36
+	 * @var int
37
+	 */
38
+	protected $id;
39
+
40
+	/**
41
+	 * Whether the blob has frontmatter.
42
+	 *
43
+	 * @var boolean
44
+	 */
45
+	protected $frontmatter = false;
46
+
47
+	/**
48
+	 * Instantiates a new Blob object.
49
+	 *
50
+	 * @param stdClass $data Raw blob data.
51
+	 */
52
+	public function __construct( stdClass $data ) {
53
+		$this->interpret_data( $data );
54
+	}
55
+
56
+	public function id() {
57
+		return $this->id;
58
+	}
59
+
60
+	public function set_id($id) {
61
+		$this->id = $id;
62
+	}
63
+
64
+	/**
65
+	 * Returns the raw blob content.
66
+	 *
67
+	 * @return string
68
+	 */
69
+	public function content() {
70
+		return $this->content;
71
+	}
72
+
73
+	/**
74
+	 * Set's the blob's content.
75
+	 *
76
+	 * @param string $content Raw blob content.
77
+	 * @param bool   $base64 Whether the content is base64 encoded.
78
+	 *
79
+	 * @return $this
80
+	 */
81
+	public function set_content( $content, $base64 = false ) {
82
+		if ( $base64 ) {
83
+			$content = base64_decode( $content );
84
+		}
85
+
86
+		$this->frontmatter = '---' === substr( $this->content = $content, 0, 3 ) ? true : false;
87
+
88
+		return $this;
89
+	}
90
+	/**
91
+	 * Returns the blob sha.
92
+	 *
93
+	 * @return string
94
+	 */
95
+	public function sha() {
96
+		return $this->sha;
97
+	}
98
+
99
+	/**
100
+	 * Return's the blob path.
101
+	 *
102
+	 * @return string
103
+	 */
104
+	public function path() {
105
+		return $this->path;
106
+	}
107
+
108
+	/**
109
+	 * Whether the blob has frontmatter.
110
+	 *
111
+	 * @return bool
112
+	 */
113
+	public function has_frontmatter() {
114
+		return $this->frontmatter;
115
+	}
116
+
117
+	/**
118
+	 * Returns the formatted/filtered blob content used for import.
119
+	 *
120
+	 * @return string
121
+	 */
122
+	public function content_import() {
123
+		$content = $this->content();
124
+
125
+		if ( $this->has_frontmatter() ) {
126
+			// Break out content.
127
+			preg_match( '/(^---(.*?)---$)?(.*)/ms', $content, $matches );
128
+			$content = array_pop( $matches );
129
+		}
130
+
131
+		if ( function_exists( 'wpmarkdown_markdown_to_html' ) ) {
132
+			$content = wpmarkdown_markdown_to_html( $content );
133
+		}
134
+
135
+		/**
136
+		 * Filters the content for import.
137
+		 */
138
+		return apply_filters( 'wogh_content_import', trim( $content ) );
139
+	}
140
+
141
+	/**
142
+	 * Returns the blob meta.
143
+	 *
144
+	 * @return array
145
+	 */
146
+	public function meta() {
147
+		$meta = array();
148
+
149
+		if ( $this->has_frontmatter() ) {
150
+			// Break out meta, if present.
151
+			preg_match( '/(^---(.*?)---$)?(.*)/ms', $this->content(), $matches );
152
+			array_pop( $matches );
153
+
154
+			$meta = spyc_load( $matches[2] );
155
+			if ( 'yes' == get_option('wogh_ignore_author') ) {
156
+				unset($meta['author']);
157
+			}
158
+			// if ( isset( $meta['link'] ) ) {
159
+			//  $meta['link'] = str_replace( home_url(), '', $meta['link'] );
160
+			// }
161
+		}
162
+
163
+		return $meta;
164
+	}
165
+
166
+	/**
167
+	 * Formats the blob into an API call body.
168
+	 *
169
+	 * @return stdClass
170
+	 */
171
+	// public function to_body() {
172
+	//  $data = new stdClass;
173
+
174
+	//  $data->mode = '100644';
175
+	//  $data->type = 'blob';
176
+
177
+	//  $data->path = $this->path();
178
+
179
+	//  if ( $this->sha() ) {
180
+	//      $data->sha = $this->sha();
181
+	//  } else {
182
+	//      $data->content = $this->content();
183
+	//  }
184
+
185
+	//  return $data;
186
+	// }
187
+
188
+
189
+	/**
190
+	 * Formats the blob into an API call body.
191
+	 *
192
+	 * @return stdClass
193
+	 */
194
+	public function to_body() {
195
+		$data = new stdClass;
196
+
197
+		// $data->mode = '100644';
198
+		// $data->type = 'blob';
199
+
200
+		$data->path = $this->path();
201
+		$data->content = base64_encode( $this->content() );
202
+		$data->sha = $this->sha;
203
+
204
+		return $data;
205
+	}
206
+
207
+	/**
208
+	 * Interprets the blob's data into properties.
209
+	 */
210
+	protected function interpret_data( $data ) {
211
+		$this->sha  = isset( $data->sha  ) ? $data->sha  : '';
212
+		$this->path = isset( $data->path ) ? $data->path : '';
213
+
214
+		$this->set_content(
215
+			isset( $data->content ) ? trim( $data->content ) : '',
216
+			isset( $data->encoding ) && 'base64' === $data->encoding ? true : false
217
+		);
218
+	}
219 219
 }
Please login to merge, or discard this patch.
Spacing   +23 added lines, -23 removed lines patch added patch discarded remove patch
@@ -49,8 +49,8 @@  discard block
 block discarded – undo
49 49
      *
50 50
      * @param stdClass $data Raw blob data.
51 51
      */
52
-    public function __construct( stdClass $data ) {
53
-        $this->interpret_data( $data );
52
+    public function __construct(stdClass $data) {
53
+        $this->interpret_data($data);
54 54
     }
55 55
 
56 56
     public function id() {
@@ -78,12 +78,12 @@  discard block
 block discarded – undo
78 78
      *
79 79
      * @return $this
80 80
      */
81
-    public function set_content( $content, $base64 = false ) {
82
-        if ( $base64 ) {
83
-            $content = base64_decode( $content );
81
+    public function set_content($content, $base64 = false) {
82
+        if ($base64) {
83
+            $content = base64_decode($content);
84 84
         }
85 85
 
86
-        $this->frontmatter = '---' === substr( $this->content = $content, 0, 3 ) ? true : false;
86
+        $this->frontmatter = '---' === substr($this->content = $content, 0, 3) ? true : false;
87 87
 
88 88
         return $this;
89 89
     }
@@ -122,20 +122,20 @@  discard block
 block discarded – undo
122 122
     public function content_import() {
123 123
         $content = $this->content();
124 124
 
125
-        if ( $this->has_frontmatter() ) {
125
+        if ($this->has_frontmatter()) {
126 126
             // Break out content.
127
-            preg_match( '/(^---(.*?)---$)?(.*)/ms', $content, $matches );
128
-            $content = array_pop( $matches );
127
+            preg_match('/(^---(.*?)---$)?(.*)/ms', $content, $matches);
128
+            $content = array_pop($matches);
129 129
         }
130 130
 
131
-        if ( function_exists( 'wpmarkdown_markdown_to_html' ) ) {
132
-            $content = wpmarkdown_markdown_to_html( $content );
131
+        if (function_exists('wpmarkdown_markdown_to_html')) {
132
+            $content = wpmarkdown_markdown_to_html($content);
133 133
         }
134 134
 
135 135
         /**
136 136
          * Filters the content for import.
137 137
          */
138
-        return apply_filters( 'wogh_content_import', trim( $content ) );
138
+        return apply_filters('wogh_content_import', trim($content));
139 139
     }
140 140
 
141 141
     /**
@@ -146,13 +146,13 @@  discard block
 block discarded – undo
146 146
     public function meta() {
147 147
         $meta = array();
148 148
 
149
-        if ( $this->has_frontmatter() ) {
149
+        if ($this->has_frontmatter()) {
150 150
             // Break out meta, if present.
151
-            preg_match( '/(^---(.*?)---$)?(.*)/ms', $this->content(), $matches );
152
-            array_pop( $matches );
151
+            preg_match('/(^---(.*?)---$)?(.*)/ms', $this->content(), $matches);
152
+            array_pop($matches);
153 153
 
154
-            $meta = spyc_load( $matches[2] );
155
-            if ( 'yes' == get_option('wogh_ignore_author') ) {
154
+            $meta = spyc_load($matches[2]);
155
+            if ('yes' == get_option('wogh_ignore_author')) {
156 156
                 unset($meta['author']);
157 157
             }
158 158
             // if ( isset( $meta['link'] ) ) {
@@ -198,7 +198,7 @@  discard block
 block discarded – undo
198 198
         // $data->type = 'blob';
199 199
 
200 200
         $data->path = $this->path();
201
-        $data->content = base64_encode( $this->content() );
201
+        $data->content = base64_encode($this->content());
202 202
         $data->sha = $this->sha;
203 203
 
204 204
         return $data;
@@ -207,13 +207,13 @@  discard block
 block discarded – undo
207 207
     /**
208 208
      * Interprets the blob's data into properties.
209 209
      */
210
-    protected function interpret_data( $data ) {
211
-        $this->sha  = isset( $data->sha  ) ? $data->sha  : '';
212
-        $this->path = isset( $data->path ) ? $data->path : '';
210
+    protected function interpret_data($data) {
211
+        $this->sha  = isset($data->sha) ? $data->sha : '';
212
+        $this->path = isset($data->path) ? $data->path : '';
213 213
 
214 214
         $this->set_content(
215
-            isset( $data->content ) ? trim( $data->content ) : '',
216
-            isset( $data->encoding ) && 'base64' === $data->encoding ? true : false
215
+            isset($data->content) ? trim($data->content) : '',
216
+            isset($data->encoding) && 'base64' === $data->encoding ? true : false
217 217
         );
218 218
     }
219 219
 }
Please login to merge, or discard this patch.
lib/database.php 2 patches
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.
Spacing   +105 added lines, -106 removed lines patch added patch discarded remove patch
@@ -21,21 +21,21 @@  discard block
 block discarded – undo
21 21
      *
22 22
      * @var array
23 23
      */
24
-    protected $whitelisted_post_types = array( 'post', 'page' );
24
+    protected $whitelisted_post_types = array('post', 'page');
25 25
 
26 26
     /**
27 27
      * Currently whitelisted post statuses.
28 28
      *
29 29
      * @var array
30 30
      */
31
-    protected $whitelisted_post_statuses = array( 'publish' );
31
+    protected $whitelisted_post_statuses = array('publish');
32 32
 
33 33
     /**
34 34
      * Instantiates a new Database object.
35 35
      *
36 36
      * @param Writing_On_GitHub $app Application container.
37 37
      */
38
-    public function __construct( Writing_On_GitHub $app ) {
38
+    public function __construct(Writing_On_GitHub $app) {
39 39
         $this->app = $app;
40 40
     }
41 41
 
@@ -46,33 +46,33 @@  discard block
 block discarded – undo
46 46
      *
47 47
      * @return Writing_On_GitHub_Post[]|WP_Error
48 48
      */
49
-    public function fetch_all_supported( $force = false ) {
50
-        $args  = array(
49
+    public function fetch_all_supported($force = false) {
50
+        $args = array(
51 51
             'post_type'   => $this->get_whitelisted_post_types(),
52 52
             'post_status' => $this->get_whitelisted_post_statuses(),
53 53
             'nopaging'    => true,
54 54
             'fields'      => 'ids',
55 55
         );
56 56
 
57
-        $query = new WP_Query( apply_filters( 'wogh_pre_fetch_all_supported', $args ) );
57
+        $query = new WP_Query(apply_filters('wogh_pre_fetch_all_supported', $args));
58 58
 
59 59
         $post_ids = $query->get_posts();
60 60
 
61
-        if ( ! $post_ids ) {
61
+        if ( ! $post_ids) {
62 62
             return new WP_Error(
63 63
                 'no_results',
64
-                __( 'Querying for supported posts returned no results.', 'writing-on-github' )
64
+                __('Querying for supported posts returned no results.', 'writing-on-github')
65 65
             );
66 66
         }
67 67
 
68 68
         /* @var Writing_On_GitHub_Post[] $results */
69 69
         $results = array();
70
-        foreach ( $post_ids as $post_id ) {
70
+        foreach ($post_ids as $post_id) {
71 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 ) ) {
72
+            if ($force || ! get_post_meta($post_id, '_wogh_sha', true) ||
73
+                 ! get_post_meta($post_id, '_wogh_github_path', true)) {
74 74
 
75
-                $results[] = new Writing_On_GitHub_Post( $post_id, $this->app->api() );
75
+                $results[] = new Writing_On_GitHub_Post($post_id, $this->app->api());
76 76
             }
77 77
         }
78 78
 
@@ -86,10 +86,10 @@  discard block
 block discarded – undo
86 86
      *
87 87
      * @return WP_Error|Writing_On_GitHub_Post
88 88
      */
89
-    public function fetch_by_id( $post_id ) {
90
-        $post = new Writing_On_GitHub_Post( $post_id, $this->app->api() );
89
+    public function fetch_by_id($post_id) {
90
+        $post = new Writing_On_GitHub_Post($post_id, $this->app->api());
91 91
 
92
-        if ( ! $this->is_post_supported( $post ) ) {
92
+        if ( ! $this->is_post_supported($post)) {
93 93
             return new WP_Error(
94 94
                 'unsupported_post',
95 95
                 sprintf(
@@ -112,36 +112,35 @@  discard block
 block discarded – undo
112 112
      * @param  Writing_On_GitHub_Post $post [description]
113 113
      * @return WP_Error|true
114 114
      */
115
-    public function save_post( Writing_On_GitHub_Post $post ) {
116
-        $args = apply_filters( 'wogh_pre_import_args', $this->post_args( $post ), $post );
115
+    public function save_post(Writing_On_GitHub_Post $post) {
116
+        $args = apply_filters('wogh_pre_import_args', $this->post_args($post), $post);
117 117
 
118
-        remove_filter( 'content_save_pre', 'wp_filter_post_kses' );
118
+        remove_filter('content_save_pre', 'wp_filter_post_kses');
119 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' );
120
+            wp_insert_post($args, true) : wp_update_post($args, true);
121
+        add_filter('content_save_pre', 'wp_filter_post_kses');
123 122
 
124
-        if ( is_wp_error( $post_id ) ) {
123
+        if (is_wp_error($post_id)) {
125 124
             /* @var WP_Error $post_id */
126 125
             return $post_id;
127 126
         }
128 127
 
129
-        if ( $post->is_new() ) {
128
+        if ($post->is_new()) {
130 129
             $author = false;
131 130
             $meta = $post->get_meta();
132
-            if ( ! empty( $meta ) && ! empty( $meta['author'] ) ) {
131
+            if ( ! empty($meta) && ! empty($meta['author'])) {
133 132
                 $author = $meta['author'];
134 133
             }
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 );
134
+            $user    = $this->fetch_commit_user($author);
135
+            $user_id = is_wp_error($user) ? 0 : $user->ID;
136
+            $this->set_post_author($post_id, $user_id);
138 137
         }
139 138
 
140
-        $post->set_post( get_post( $post_id ) );
139
+        $post->set_post(get_post($post_id));
141 140
 
142
-        $meta = apply_filters( 'wogh_pre_import_meta', $post->get_meta(), $post );
141
+        $meta = apply_filters('wogh_pre_import_meta', $post->get_meta(), $post);
143 142
 
144
-        update_post_meta( $post_id, '_wogh_sha', $meta['_wogh_sha'] );
143
+        update_post_meta($post_id, '_wogh_sha', $meta['_wogh_sha']);
145 144
 
146 145
         // unset( $meta['tags'] );
147 146
         // unset( $meta['categories'] );
@@ -157,25 +156,25 @@  discard block
 block discarded – undo
157 156
         return true;
158 157
     }
159 158
 
160
-    protected function post_args( $post ) {
159
+    protected function post_args($post) {
161 160
         $args = $post->get_args();
162 161
         $meta = $post->get_meta();
163 162
 
164 163
         // prevent backslash loss
165
-        $args['post_content'] = addslashes( $args['post_content'] );
164
+        $args['post_content'] = addslashes($args['post_content']);
166 165
 
167 166
         // update tags
168
-        if ( ! empty( $meta['tags'] ) ) {
167
+        if ( ! empty($meta['tags'])) {
169 168
             $args['tags_input'] = $meta['tags'];
170 169
         }
171 170
 
172 171
         // update categories
173
-        if ( ! empty( $meta['categories'] ) ) {
172
+        if ( ! empty($meta['categories'])) {
174 173
             $categories = $meta['categories'];
175
-            if ( ! is_array( $categories ) ) {
176
-                $categories = array( $categories );
174
+            if ( ! is_array($categories)) {
175
+                $categories = array($categories);
177 176
             }
178
-            $terms = get_terms( array(
177
+            $terms = get_terms(array(
179 178
                 'taxonomy' => 'category',
180 179
                 'fields' => 'id=>name',
181 180
                 'hide_empty' => 0,
@@ -183,22 +182,22 @@  discard block
 block discarded – undo
183 182
                 )
184 183
             );
185 184
             $map = array();
186
-            foreach ( $categories as $name ) {
185
+            foreach ($categories as $name) {
187 186
                 $map[$name] = 1;
188 187
             }
189 188
 
190 189
             $ids = array();
191
-            if ( ! empty( $terms ) ) {
192
-                foreach ( $terms as $id => $name ) {
190
+            if ( ! empty($terms)) {
191
+                foreach ($terms as $id => $name) {
193 192
                     $ids[] = $id;
194
-                    unset( $map[$name] );
193
+                    unset($map[$name]);
195 194
                 }
196 195
             }
197 196
 
198 197
             // create new terms
199
-            if ( ! empty( $map ) ) {
200
-                foreach ( $map as $name => $value ) {
201
-                    $term = wp_insert_term( $name, 'category', array( 'parent' => 0 ) );
198
+            if ( ! empty($map)) {
199
+                foreach ($map as $name => $value) {
200
+                    $term = wp_insert_term($name, 'category', array('parent' => 0));
202 201
                     // array('term_id' => $term_id, 'term_taxonomy_id' => $tt_id);
203 202
                     $ids[] = $term['term_id'];
204 203
                 }
@@ -210,19 +209,19 @@  discard block
 block discarded – undo
210 209
         return $args;
211 210
     }
212 211
 
213
-    private function get_post_id_by_filename( $filename, $pattern  ) {
214
-        preg_match( $pattern , $filename, $matches );
212
+    private function get_post_id_by_filename($filename, $pattern) {
213
+        preg_match($pattern, $filename, $matches);
215 214
         $title = $matches[4];
216 215
 
217
-        $query = new WP_Query( array(
216
+        $query = new WP_Query(array(
218 217
             'name'     => $title,
219 218
             'posts_per_page' => 1,
220 219
             'post_type' => $this->get_whitelisted_post_types(),
221 220
             'fields'         => 'ids',
222
-        ) );
221
+        ));
223 222
 
224 223
         $post_id = $query->get_posts();
225
-        $post_id = array_pop( $post_id );
224
+        $post_id = array_pop($post_id);
226 225
         return $post_id;
227 226
     }
228 227
 
@@ -233,55 +232,55 @@  discard block
 block discarded – undo
233 232
      *
234 233
      * @return string|WP_Error
235 234
      */
236
-    public function delete_post_by_path( $path ) {
237
-        $query = new WP_Query( array(
235
+    public function delete_post_by_path($path) {
236
+        $query = new WP_Query(array(
238 237
             'meta_key'       => '_wogh_github_path',
239 238
             'meta_value'     => $path,
240 239
             'meta_compare'   => '=',
241 240
             'posts_per_page' => 1,
242 241
             'fields'         => 'ids',
243
-        ) );
242
+        ));
244 243
 
245 244
         $post_id = $query->get_posts();
246
-        $post_id = array_pop( $post_id );
245
+        $post_id = array_pop($post_id);
247 246
 
248
-        if ( ! $post_id ) {
249
-            $parts     = explode( '/', $path );
250
-            $filename  = array_pop( $parts );
251
-            $directory = $parts ? array_shift( $parts ) : '';
247
+        if ( ! $post_id) {
248
+            $parts     = explode('/', $path);
249
+            $filename  = array_pop($parts);
250
+            $directory = $parts ? array_shift($parts) : '';
252 251
 
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/' );
252
+            if (false !== strpos($directory, 'post')) {
253
+                $post_id = get_post_id_by_filename($filename, '/([0-9]{4})-([0-9]{2})-([0-9]{2})-(.*)\.md/');
255 254
             }
256 255
 
257
-            if ( ! $post_id ) {
258
-                $post_id = get_post_id_by_filename( $filename, '/(.*)\.md/' );
256
+            if ( ! $post_id) {
257
+                $post_id = get_post_id_by_filename($filename, '/(.*)\.md/');
259 258
             }
260 259
         }
261 260
 
262
-        if ( ! $post_id ) {
261
+        if ( ! $post_id) {
263 262
             return new WP_Error(
264 263
                 'path_not_found',
265 264
                 sprintf(
266
-                    __( 'Post not found for path %s.', 'writing-on-github' ),
265
+                    __('Post not found for path %s.', 'writing-on-github'),
267 266
                     $path
268 267
                 )
269 268
             );
270 269
         }
271 270
 
272
-        $result = wp_delete_post( $post_id );
271
+        $result = wp_delete_post($post_id);
273 272
 
274 273
         // If deleting fails...
275
-        if ( false === $result ) {
276
-            $post = get_post( $post_id );
274
+        if (false === $result) {
275
+            $post = get_post($post_id);
277 276
 
278 277
             // ...and the post both exists and isn't in the trash...
279
-            if ( $post && 'trash' !== $post->post_status ) {
278
+            if ($post && 'trash' !== $post->post_status) {
280 279
                 // ... then something went wrong.
281 280
                 return new WP_Error(
282 281
                     'db_error',
283 282
                     sprintf(
284
-                        __( 'Failed to delete post ID %d.', 'writing-on-github' ),
283
+                        __('Failed to delete post ID %d.', 'writing-on-github'),
285 284
                         $post_id
286 285
                     )
287 286
                 );
@@ -289,25 +288,25 @@  discard block
 block discarded – undo
289 288
         }
290 289
 
291 290
         return sprintf(
292
-            __( 'Successfully deleted post ID %d.', 'writing-on-github' ),
291
+            __('Successfully deleted post ID %d.', 'writing-on-github'),
293 292
             $post_id
294 293
         );
295 294
     }
296 295
 
297
-    public function delete_post( $post_id ) {
298
-        $result = wp_delete_post( $post_id );
296
+    public function delete_post($post_id) {
297
+        $result = wp_delete_post($post_id);
299 298
 
300 299
         // If deleting fails...
301
-        if ( false === $result ) {
302
-            $post = get_post( $post_id );
300
+        if (false === $result) {
301
+            $post = get_post($post_id);
303 302
 
304 303
             // ...and the post both exists and isn't in the trash...
305
-            if ( $post && 'trash' !== $post->post_status ) {
304
+            if ($post && 'trash' !== $post->post_status) {
306 305
                 // ... then something went wrong.
307 306
                 return new WP_Error(
308 307
                     'db_error',
309 308
                     sprintf(
310
-                        __( 'Failed to delete post ID %d.', 'writing-on-github' ),
309
+                        __('Failed to delete post ID %d.', 'writing-on-github'),
311 310
                         $post_id
312 311
                     )
313 312
                 );
@@ -315,7 +314,7 @@  discard block
 block discarded – undo
315 314
         }
316 315
 
317 316
         return sprintf(
318
-            __( 'Successfully deleted post ID %d.', 'writing-on-github' ),
317
+            __('Successfully deleted post ID %d.', 'writing-on-github'),
319 318
             $post_id
320 319
         );
321 320
     }
@@ -326,7 +325,7 @@  discard block
 block discarded – undo
326 325
      * @return array
327 326
      */
328 327
     protected function get_whitelisted_post_types() {
329
-        return apply_filters( 'wogh_whitelisted_post_types', $this->whitelisted_post_types );
328
+        return apply_filters('wogh_whitelisted_post_types', $this->whitelisted_post_types);
330 329
     }
331 330
 
332 331
     /**
@@ -335,7 +334,7 @@  discard block
 block discarded – undo
335 334
      * @return array
336 335
      */
337 336
     protected function get_whitelisted_post_statuses() {
338
-        return apply_filters( 'wogh_whitelisted_post_statuses', $this->whitelisted_post_statuses );
337
+        return apply_filters('wogh_whitelisted_post_statuses', $this->whitelisted_post_statuses);
339 338
     }
340 339
 
341 340
     /**
@@ -345,12 +344,12 @@  discard block
 block discarded – undo
345 344
      *
346 345
      * @return string Whitelist formatted for query
347 346
      */
348
-    protected function format_for_query( $whitelist ) {
349
-        foreach ( $whitelist as $key => $value ) {
350
-            $whitelist[ $key ] = "'$value'";
347
+    protected function format_for_query($whitelist) {
348
+        foreach ($whitelist as $key => $value) {
349
+            $whitelist[$key] = "'$value'";
351 350
         }
352 351
 
353
-        return implode( ', ', $whitelist );
352
+        return implode(', ', $whitelist);
354 353
     }
355 354
 
356 355
     /**
@@ -361,25 +360,25 @@  discard block
 block discarded – undo
361 360
      *
362 361
      * @return boolean                          True if supported, false if not.
363 362
      */
364
-    protected function is_post_supported( Writing_On_GitHub_Post $post ) {
365
-        if ( wp_is_post_revision( $post->id ) ) {
363
+    protected function is_post_supported(Writing_On_GitHub_Post $post) {
364
+        if (wp_is_post_revision($post->id)) {
366 365
             return false;
367 366
         }
368 367
 
369 368
         // 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() ) {
369
+        if ( ! in_array($post->status(), $this->get_whitelisted_post_statuses()) && 'trash' !== $post->status()) {
371 370
             return false;
372 371
         }
373 372
 
374
-        if ( ! in_array( $post->type(), $this->get_whitelisted_post_types() ) ) {
373
+        if ( ! in_array($post->type(), $this->get_whitelisted_post_types())) {
375 374
             return false;
376 375
         }
377 376
 
378
-        if ( $post->has_password() ) {
377
+        if ($post->has_password()) {
379 378
             return false;
380 379
         }
381 380
 
382
-        return apply_filters( 'wogh_is_post_supported', true, $post );
381
+        return apply_filters('wogh_is_post_supported', true, $post);
383 382
     }
384 383
 
385 384
     /**
@@ -392,35 +391,35 @@  discard block
 block discarded – undo
392 391
      *
393 392
      * @return WP_Error|WP_User
394 393
      */
395
-    protected function fetch_commit_user( $display_name ) {
394
+    protected function fetch_commit_user($display_name) {
396 395
         // If we can't find a user and a default hasn't been set,
397 396
         // we're just going to set the revision author to 0.
398 397
         $user = false;
399 398
 
400
-        if ( ! empty( $display_name ) ) {
401
-            $search_string = esc_attr( $display_name );
402
-            $query = new WP_User_Query( array(
399
+        if ( ! empty($display_name)) {
400
+            $search_string = esc_attr($display_name);
401
+            $query = new WP_User_Query(array(
403 402
                 'search'         => "{$search_string}",
404 403
                 'search_columns' => array(
405 404
                     'display_name',
406 405
                     'user_nicename',
407 406
                     'user_login',
408 407
                 )
409
-            ) );
408
+            ));
410 409
             $users = $query->get_results();
411 410
             $user = empty($users) ? false : $users[0];
412 411
         }
413 412
 
414
-        if ( ! $user ) {
413
+        if ( ! $user) {
415 414
             // Use the default user.
416
-            $user = get_user_by( 'id', (int) get_option( 'wogh_default_user' ) );
415
+            $user = get_user_by('id', (int) get_option('wogh_default_user'));
417 416
         }
418 417
 
419
-        if ( ! $user ) {
418
+        if ( ! $user) {
420 419
             return new WP_Error(
421 420
                 'user_not_found',
422 421
                 sprintf(
423
-                    __( 'Commit user not found for email %s', 'writing-on-github' ),
422
+                    __('Commit user not found for email %s', 'writing-on-github'),
424 423
                     $email
425 424
                 )
426 425
             );
@@ -472,7 +471,7 @@  discard block
 block discarded – undo
472 471
      *
473 472
      * @return string|WP_Error
474 473
      */
475
-    protected function set_post_author( $post_id, $user_id ) {
474
+    protected function set_post_author($post_id, $user_id) {
476 475
         global $wpdb;
477 476
 
478 477
         $result = $wpdb->update(
@@ -483,25 +482,25 @@  discard block
 block discarded – undo
483 482
             array(
484 483
                 'ID' => (int) $post_id,
485 484
             ),
486
-            array( '%d' ),
487
-            array( '%d' )
485
+            array('%d'),
486
+            array('%d')
488 487
         );
489 488
 
490
-        if ( false === $result ) {
491
-            return new WP_Error( 'db_error', $wpdb->last_error );
489
+        if (false === $result) {
490
+            return new WP_Error('db_error', $wpdb->last_error);
492 491
         }
493 492
 
494
-        if ( 0 === $result ) {
493
+        if (0 === $result) {
495 494
             return sprintf(
496
-                __( 'No change for post ID %d.', 'writing-on-github' ),
495
+                __('No change for post ID %d.', 'writing-on-github'),
497 496
                 $post_id
498 497
             );
499 498
         }
500 499
 
501
-        clean_post_cache( $post_id );
500
+        clean_post_cache($post_id);
502 501
 
503 502
         return sprintf(
504
-            __( 'Successfully updated post ID %d.', 'writing-on-github' ),
503
+            __('Successfully updated post ID %d.', 'writing-on-github'),
505 504
             $post_id
506 505
         );
507 506
     }
Please login to merge, or discard this patch.
lib/import.php 2 patches
Indentation   +300 added lines, -300 removed lines patch added patch discarded remove patch
@@ -10,304 +10,304 @@
 block discarded – undo
10 10
  */
11 11
 class Writing_On_GitHub_Import {
12 12
 
13
-    /**
14
-     * Application container.
15
-     *
16
-     * @var Writing_On_GitHub
17
-     */
18
-    protected $app;
19
-
20
-    /**
21
-     * Initializes a new import manager.
22
-     *
23
-     * @param Writing_On_GitHub $app Application container.
24
-     */
25
-    public function __construct( Writing_On_GitHub $app ) {
26
-        $this->app = $app;
27
-    }
28
-
29
-    /**
30
-     * Imports a payload.
31
-     * @param  Writing_On_GitHub_Payload $payload
32
-     *
33
-     * @return string|WP_Error
34
-     */
35
-    public function payload( Writing_On_GitHub_Payload $payload ) {
36
-
37
-        $result = $this->app->api()->fetch()->compare( $payload->get_before_commit_id() );
38
-
39
-        if ( is_wp_error( $result ) ) {
40
-            /* @var WP_Error $result */
41
-            return $result;
42
-        }
43
-
44
-        if ( is_array( $result ) ) {
45
-            $result = $this->import_files( $result );
46
-        }
47
-
48
-        if ( is_wp_error( $result ) ) {
49
-            return $files;
50
-        }
51
-
52
-        return __( 'Payload processed', 'writing-on-github' );
53
-    }
54
-
55
-    /**
56
-     * import blob by files
57
-     * @param  Writing_On_GitHub_File_Info[] $files
58
-     *
59
-     * @return true|WP_Error
60
-     */
61
-    protected function import_files( $files ) {
62
-
63
-        $error = true;
64
-
65
-        foreach ( $files as $file ) {
66
-            if ( ! $this->importable_file( $file ) ) {
67
-                continue;
68
-            }
69
-
70
-            $blob = $this->app->api()->fetch()->blob( $file );
71
-            // network error ?
72
-            if ( ! $blob instanceof Writing_On_GitHub_Blob ) {
73
-                continue;
74
-            }
75
-
76
-            $is_remove = 'removed' == $file->status;
77
-
78
-            $result = false;
79
-            if ( $this->importable_raw_file( $blob ) ) {
80
-                $result = $this->import_raw_file( $blob, $is_remove );
81
-            } elseif ( $this->importable_post( $blob ) ) {
82
-                $result = $this->import_post( $blob, $is_remove );
83
-            }
84
-
85
-            if ( is_wp_error( $result ) ) {
86
-                /* @var WP_Error $result */
87
-                $error = wogh_append_error( $error, $result );
88
-            }
89
-        }
90
-
91
-        return $error;
92
-    }
93
-
94
-    /**
95
-     * Imports the latest commit on the master branch.
96
-     *
97
-     * @return string|WP_Error
98
-     */
99
-    public function master() {
100
-        $result = $this->app->api()->fetch()->tree_recursive();
101
-
102
-        if ( is_wp_error( $result ) ) {
103
-            /* @var WP_Error $result */
104
-            return $result;
105
-        }
106
-
107
-        if ( is_array( $result ) ) {
108
-            $result = $this->import_files( $result );
109
-        }
110
-
111
-        if ( is_wp_error( $result ) ) {
112
-            /* @var WP_Error $result */
113
-            return $result;
114
-        }
115
-
116
-        return __( 'Payload processed', 'writing-on-github' );
117
-    }
118
-
119
-    /**
120
-     * Checks whether the provided blob should be imported.
121
-     *
122
-     * @param Writing_On_GitHub_File_Info $file
123
-     *
124
-     * @return bool
125
-     */
126
-    protected function importable_file( Writing_On_GitHub_File_Info $file ) {
127
-
128
-        $path = $file->path;
129
-
130
-        // only _pages, _posts and images
131
-        $prefixs = array( '_pages/', '_posts/', 'images/');
132
-        foreach ($prefixs as $prefix) {
133
-            if ( ! strncasecmp($path, $prefix, strlen( $prefix ) ) ) {
134
-                return true;
135
-            }
136
-        }
137
-        return false;
138
-    }
139
-
140
-    /**
141
-     * Checks whether the provided blob should be imported.
142
-     *
143
-     * @param Writing_On_GitHub_Blob $blob Blob to validate.
144
-     *
145
-     * @return bool
146
-     */
147
-    protected function importable_post( Writing_On_GitHub_Blob $blob ) {
148
-        // global $wpdb;
149
-
150
-        // // Skip the repo's readme.
151
-        // if ( 'readme' === strtolower( substr( $blob->path(), 0, 6 ) ) ) {
152
-        //  return false;
153
-        // }
154
-
155
-        // // If the blob sha already matches a post, then move on.
156
-        // if ( ! is_wp_error( $this->app->database()->fetch_by_sha( $blob->sha() ) ) ) {
157
-        //  return false;
158
-        // }
159
-
160
-        if ( ! $blob->has_frontmatter() ) {
161
-            return false;
162
-        }
163
-
164
-        return true;
165
-    }
166
-
167
-    /**
168
-     * Imports a post into wordpress
169
-     * @param  Writing_On_GitHub_Blob $blob
170
-     * @param  bool                   $is_remove
171
-     * @return WP_Error|bool
172
-     */
173
-    protected function import_post( Writing_On_GitHub_Blob $blob, $is_remove ) {
174
-
175
-        if ( $is_remove ) {
176
-            $id = $blob->id();
177
-            if ( empty( $id ) ) {
178
-                return false;
179
-            }
180
-            $result = $this->app->database()->delete_post( $id );
181
-            if ( is_wp_error( $result ) ) {
182
-                /* @var WP_Error $result */
183
-                return $result;
184
-            }
185
-            return true;
186
-        }
187
-
188
-        $post = $this->blob_to_post( $blob );
189
-
190
-        if ( ! $post instanceof Writing_On_GitHub_Post ) {
191
-            return false;
192
-        }
193
-
194
-        $result = $this->app->database()->save_post( $post );
195
-        if ( is_wp_error( $result ) ) {
196
-            /** @var WP_Error $result */
197
-            return $result;
198
-        }
199
-
200
-        if ( $post->is_new() ) {
201
-            $result = $this->app->export()->new_posts( $new );
202
-
203
-            if ( is_wp_error( $result ) ) {
204
-                /** @var WP_Error $result */
205
-                return $result;
206
-            }
207
-        }
208
-
209
-        return true;
210
-    }
211
-
212
-    /**
213
-     * import raw file
214
-     * @param  Writing_On_GitHub_Blob $blob
215
-     * @return bool
216
-     */
217
-    protected function importable_raw_file( Writing_On_GitHub_Blob $blob ) {
218
-        if ( $blob->has_frontmatter() ) {
219
-            return false;
220
-        }
221
-
222
-        // only images
223
-        if ( strncasecmp($blob->path(), 'images/', strlen('images/') ) != 0) {
224
-            return false;
225
-        }
226
-
227
-        return true;
228
-    }
229
-
230
-    /**
231
-     * Imports a raw file content into file system.
232
-     * @param  Writing_On_GitHub_Blob $blob
233
-     * @param  bool                   $is_remove
234
-     */
235
-    protected function import_raw_file( Writing_On_GitHub_Blob $blob, $is_remove ) {
236
-        $arr = wp_upload_dir();
237
-        $path = $arr['basedir'] . '/writing-on-github/' . $blob->path();
238
-        if ( $is_remove ) {
239
-            if ( file_exists($path) ) {
240
-                unlink($path);
241
-            }
242
-        } else {
243
-            $dirname = dirname($path);
244
-            if ( ! file_exists($dirname) ) {
245
-                wp_mkdir_p($dirname);
246
-            }
247
-
248
-            file_put_contents($path, $blob->content());
249
-        }
250
-    }
251
-
252
-    /**
253
-     * Imports a single blob content into matching post.
254
-     *
255
-     * @param Writing_On_GitHub_Blob $blob Blob to transform into a Post.
256
-     *
257
-     * @return Writing_On_GitHub_Post|false
258
-     */
259
-    protected function blob_to_post( Writing_On_GitHub_Blob $blob ) {
260
-        $args = array( 'post_content' => $blob->content_import() );
261
-        $meta = $blob->meta();
262
-
263
-        $id = false;
264
-
265
-        if ( ! empty( $meta ) ) {
266
-            if ( array_key_exists( 'layout', $meta ) ) {
267
-                $args['post_type'] = $meta['layout'];
268
-                unset( $meta['layout'] );
269
-            }
270
-
271
-            if ( array_key_exists( 'published', $meta ) ) {
272
-                $args['post_status'] = true === $meta['published'] ? 'publish' : 'draft';
273
-                unset( $meta['published'] );
274
-            }
275
-
276
-            if ( array_key_exists( 'post_title', $meta ) ) {
277
-                $args['post_title'] = $meta['post_title'];
278
-                unset( $meta['post_title'] );
279
-            }
280
-
281
-            if ( array_key_exists( 'post_name', $meta ) ) {
282
-                $args['post_name'] = $meta['post_name'];
283
-                unset( $meta['post_name'] );
284
-            }
285
-
286
-            if ( array_key_exists( 'ID', $meta ) ) {
287
-                $id = $args['ID'] = $meta['ID'];
288
-                $blob->set_id($id);
289
-                unset( $meta['ID'] );
290
-            }
291
-        }
292
-
293
-        $meta['_wogh_sha'] = $blob->sha();
294
-
295
-        if ( $id ) {
296
-            $old_sha = get_post_meta( $id, '_wogh_sha', true );
297
-            $old_github_path = get_post_meta( $id, '_wogh_github_path', true );
298
-
299
-            // dont save post when has same sha
300
-            if ( $old_sha  && $old_sha == $meta['_wogh_sha'] &&
301
-                 $old_github_path && $old_github_path == $blob->path() ) {
302
-                return false;
303
-            }
304
-        }
305
-
306
-        $post = new Writing_On_GitHub_Post( $args, $this->app->api() );
307
-        $post->set_old_github_path( $blob->path() );
308
-        $post->set_meta( $meta );
309
-        $blob->set_id( $post->id() );
310
-
311
-        return $post;
312
-    }
13
+	/**
14
+	 * Application container.
15
+	 *
16
+	 * @var Writing_On_GitHub
17
+	 */
18
+	protected $app;
19
+
20
+	/**
21
+	 * Initializes a new import manager.
22
+	 *
23
+	 * @param Writing_On_GitHub $app Application container.
24
+	 */
25
+	public function __construct( Writing_On_GitHub $app ) {
26
+		$this->app = $app;
27
+	}
28
+
29
+	/**
30
+	 * Imports a payload.
31
+	 * @param  Writing_On_GitHub_Payload $payload
32
+	 *
33
+	 * @return string|WP_Error
34
+	 */
35
+	public function payload( Writing_On_GitHub_Payload $payload ) {
36
+
37
+		$result = $this->app->api()->fetch()->compare( $payload->get_before_commit_id() );
38
+
39
+		if ( is_wp_error( $result ) ) {
40
+			/* @var WP_Error $result */
41
+			return $result;
42
+		}
43
+
44
+		if ( is_array( $result ) ) {
45
+			$result = $this->import_files( $result );
46
+		}
47
+
48
+		if ( is_wp_error( $result ) ) {
49
+			return $files;
50
+		}
51
+
52
+		return __( 'Payload processed', 'writing-on-github' );
53
+	}
54
+
55
+	/**
56
+	 * import blob by files
57
+	 * @param  Writing_On_GitHub_File_Info[] $files
58
+	 *
59
+	 * @return true|WP_Error
60
+	 */
61
+	protected function import_files( $files ) {
62
+
63
+		$error = true;
64
+
65
+		foreach ( $files as $file ) {
66
+			if ( ! $this->importable_file( $file ) ) {
67
+				continue;
68
+			}
69
+
70
+			$blob = $this->app->api()->fetch()->blob( $file );
71
+			// network error ?
72
+			if ( ! $blob instanceof Writing_On_GitHub_Blob ) {
73
+				continue;
74
+			}
75
+
76
+			$is_remove = 'removed' == $file->status;
77
+
78
+			$result = false;
79
+			if ( $this->importable_raw_file( $blob ) ) {
80
+				$result = $this->import_raw_file( $blob, $is_remove );
81
+			} elseif ( $this->importable_post( $blob ) ) {
82
+				$result = $this->import_post( $blob, $is_remove );
83
+			}
84
+
85
+			if ( is_wp_error( $result ) ) {
86
+				/* @var WP_Error $result */
87
+				$error = wogh_append_error( $error, $result );
88
+			}
89
+		}
90
+
91
+		return $error;
92
+	}
93
+
94
+	/**
95
+	 * Imports the latest commit on the master branch.
96
+	 *
97
+	 * @return string|WP_Error
98
+	 */
99
+	public function master() {
100
+		$result = $this->app->api()->fetch()->tree_recursive();
101
+
102
+		if ( is_wp_error( $result ) ) {
103
+			/* @var WP_Error $result */
104
+			return $result;
105
+		}
106
+
107
+		if ( is_array( $result ) ) {
108
+			$result = $this->import_files( $result );
109
+		}
110
+
111
+		if ( is_wp_error( $result ) ) {
112
+			/* @var WP_Error $result */
113
+			return $result;
114
+		}
115
+
116
+		return __( 'Payload processed', 'writing-on-github' );
117
+	}
118
+
119
+	/**
120
+	 * Checks whether the provided blob should be imported.
121
+	 *
122
+	 * @param Writing_On_GitHub_File_Info $file
123
+	 *
124
+	 * @return bool
125
+	 */
126
+	protected function importable_file( Writing_On_GitHub_File_Info $file ) {
127
+
128
+		$path = $file->path;
129
+
130
+		// only _pages, _posts and images
131
+		$prefixs = array( '_pages/', '_posts/', 'images/');
132
+		foreach ($prefixs as $prefix) {
133
+			if ( ! strncasecmp($path, $prefix, strlen( $prefix ) ) ) {
134
+				return true;
135
+			}
136
+		}
137
+		return false;
138
+	}
139
+
140
+	/**
141
+	 * Checks whether the provided blob should be imported.
142
+	 *
143
+	 * @param Writing_On_GitHub_Blob $blob Blob to validate.
144
+	 *
145
+	 * @return bool
146
+	 */
147
+	protected function importable_post( Writing_On_GitHub_Blob $blob ) {
148
+		// global $wpdb;
149
+
150
+		// // Skip the repo's readme.
151
+		// if ( 'readme' === strtolower( substr( $blob->path(), 0, 6 ) ) ) {
152
+		//  return false;
153
+		// }
154
+
155
+		// // If the blob sha already matches a post, then move on.
156
+		// if ( ! is_wp_error( $this->app->database()->fetch_by_sha( $blob->sha() ) ) ) {
157
+		//  return false;
158
+		// }
159
+
160
+		if ( ! $blob->has_frontmatter() ) {
161
+			return false;
162
+		}
163
+
164
+		return true;
165
+	}
166
+
167
+	/**
168
+	 * Imports a post into wordpress
169
+	 * @param  Writing_On_GitHub_Blob $blob
170
+	 * @param  bool                   $is_remove
171
+	 * @return WP_Error|bool
172
+	 */
173
+	protected function import_post( Writing_On_GitHub_Blob $blob, $is_remove ) {
174
+
175
+		if ( $is_remove ) {
176
+			$id = $blob->id();
177
+			if ( empty( $id ) ) {
178
+				return false;
179
+			}
180
+			$result = $this->app->database()->delete_post( $id );
181
+			if ( is_wp_error( $result ) ) {
182
+				/* @var WP_Error $result */
183
+				return $result;
184
+			}
185
+			return true;
186
+		}
187
+
188
+		$post = $this->blob_to_post( $blob );
189
+
190
+		if ( ! $post instanceof Writing_On_GitHub_Post ) {
191
+			return false;
192
+		}
193
+
194
+		$result = $this->app->database()->save_post( $post );
195
+		if ( is_wp_error( $result ) ) {
196
+			/** @var WP_Error $result */
197
+			return $result;
198
+		}
199
+
200
+		if ( $post->is_new() ) {
201
+			$result = $this->app->export()->new_posts( $new );
202
+
203
+			if ( is_wp_error( $result ) ) {
204
+				/** @var WP_Error $result */
205
+				return $result;
206
+			}
207
+		}
208
+
209
+		return true;
210
+	}
211
+
212
+	/**
213
+	 * import raw file
214
+	 * @param  Writing_On_GitHub_Blob $blob
215
+	 * @return bool
216
+	 */
217
+	protected function importable_raw_file( Writing_On_GitHub_Blob $blob ) {
218
+		if ( $blob->has_frontmatter() ) {
219
+			return false;
220
+		}
221
+
222
+		// only images
223
+		if ( strncasecmp($blob->path(), 'images/', strlen('images/') ) != 0) {
224
+			return false;
225
+		}
226
+
227
+		return true;
228
+	}
229
+
230
+	/**
231
+	 * Imports a raw file content into file system.
232
+	 * @param  Writing_On_GitHub_Blob $blob
233
+	 * @param  bool                   $is_remove
234
+	 */
235
+	protected function import_raw_file( Writing_On_GitHub_Blob $blob, $is_remove ) {
236
+		$arr = wp_upload_dir();
237
+		$path = $arr['basedir'] . '/writing-on-github/' . $blob->path();
238
+		if ( $is_remove ) {
239
+			if ( file_exists($path) ) {
240
+				unlink($path);
241
+			}
242
+		} else {
243
+			$dirname = dirname($path);
244
+			if ( ! file_exists($dirname) ) {
245
+				wp_mkdir_p($dirname);
246
+			}
247
+
248
+			file_put_contents($path, $blob->content());
249
+		}
250
+	}
251
+
252
+	/**
253
+	 * Imports a single blob content into matching post.
254
+	 *
255
+	 * @param Writing_On_GitHub_Blob $blob Blob to transform into a Post.
256
+	 *
257
+	 * @return Writing_On_GitHub_Post|false
258
+	 */
259
+	protected function blob_to_post( Writing_On_GitHub_Blob $blob ) {
260
+		$args = array( 'post_content' => $blob->content_import() );
261
+		$meta = $blob->meta();
262
+
263
+		$id = false;
264
+
265
+		if ( ! empty( $meta ) ) {
266
+			if ( array_key_exists( 'layout', $meta ) ) {
267
+				$args['post_type'] = $meta['layout'];
268
+				unset( $meta['layout'] );
269
+			}
270
+
271
+			if ( array_key_exists( 'published', $meta ) ) {
272
+				$args['post_status'] = true === $meta['published'] ? 'publish' : 'draft';
273
+				unset( $meta['published'] );
274
+			}
275
+
276
+			if ( array_key_exists( 'post_title', $meta ) ) {
277
+				$args['post_title'] = $meta['post_title'];
278
+				unset( $meta['post_title'] );
279
+			}
280
+
281
+			if ( array_key_exists( 'post_name', $meta ) ) {
282
+				$args['post_name'] = $meta['post_name'];
283
+				unset( $meta['post_name'] );
284
+			}
285
+
286
+			if ( array_key_exists( 'ID', $meta ) ) {
287
+				$id = $args['ID'] = $meta['ID'];
288
+				$blob->set_id($id);
289
+				unset( $meta['ID'] );
290
+			}
291
+		}
292
+
293
+		$meta['_wogh_sha'] = $blob->sha();
294
+
295
+		if ( $id ) {
296
+			$old_sha = get_post_meta( $id, '_wogh_sha', true );
297
+			$old_github_path = get_post_meta( $id, '_wogh_github_path', true );
298
+
299
+			// dont save post when has same sha
300
+			if ( $old_sha  && $old_sha == $meta['_wogh_sha'] &&
301
+				 $old_github_path && $old_github_path == $blob->path() ) {
302
+				return false;
303
+			}
304
+		}
305
+
306
+		$post = new Writing_On_GitHub_Post( $args, $this->app->api() );
307
+		$post->set_old_github_path( $blob->path() );
308
+		$post->set_meta( $meta );
309
+		$blob->set_id( $post->id() );
310
+
311
+		return $post;
312
+	}
313 313
 }
Please login to merge, or discard this patch.
Spacing   +70 added lines, -70 removed lines patch added patch discarded remove patch
@@ -22,7 +22,7 @@  discard block
 block discarded – undo
22 22
      *
23 23
      * @param Writing_On_GitHub $app Application container.
24 24
      */
25
-    public function __construct( Writing_On_GitHub $app ) {
25
+    public function __construct(Writing_On_GitHub $app) {
26 26
         $this->app = $app;
27 27
     }
28 28
 
@@ -32,24 +32,24 @@  discard block
 block discarded – undo
32 32
      *
33 33
      * @return string|WP_Error
34 34
      */
35
-    public function payload( Writing_On_GitHub_Payload $payload ) {
35
+    public function payload(Writing_On_GitHub_Payload $payload) {
36 36
 
37
-        $result = $this->app->api()->fetch()->compare( $payload->get_before_commit_id() );
37
+        $result = $this->app->api()->fetch()->compare($payload->get_before_commit_id());
38 38
 
39
-        if ( is_wp_error( $result ) ) {
39
+        if (is_wp_error($result)) {
40 40
             /* @var WP_Error $result */
41 41
             return $result;
42 42
         }
43 43
 
44
-        if ( is_array( $result ) ) {
45
-            $result = $this->import_files( $result );
44
+        if (is_array($result)) {
45
+            $result = $this->import_files($result);
46 46
         }
47 47
 
48
-        if ( is_wp_error( $result ) ) {
48
+        if (is_wp_error($result)) {
49 49
             return $files;
50 50
         }
51 51
 
52
-        return __( 'Payload processed', 'writing-on-github' );
52
+        return __('Payload processed', 'writing-on-github');
53 53
     }
54 54
 
55 55
     /**
@@ -58,33 +58,33 @@  discard block
 block discarded – undo
58 58
      *
59 59
      * @return true|WP_Error
60 60
      */
61
-    protected function import_files( $files ) {
61
+    protected function import_files($files) {
62 62
 
63 63
         $error = true;
64 64
 
65
-        foreach ( $files as $file ) {
66
-            if ( ! $this->importable_file( $file ) ) {
65
+        foreach ($files as $file) {
66
+            if ( ! $this->importable_file($file)) {
67 67
                 continue;
68 68
             }
69 69
 
70
-            $blob = $this->app->api()->fetch()->blob( $file );
70
+            $blob = $this->app->api()->fetch()->blob($file);
71 71
             // network error ?
72
-            if ( ! $blob instanceof Writing_On_GitHub_Blob ) {
72
+            if ( ! $blob instanceof Writing_On_GitHub_Blob) {
73 73
                 continue;
74 74
             }
75 75
 
76 76
             $is_remove = 'removed' == $file->status;
77 77
 
78 78
             $result = false;
79
-            if ( $this->importable_raw_file( $blob ) ) {
80
-                $result = $this->import_raw_file( $blob, $is_remove );
81
-            } elseif ( $this->importable_post( $blob ) ) {
82
-                $result = $this->import_post( $blob, $is_remove );
79
+            if ($this->importable_raw_file($blob)) {
80
+                $result = $this->import_raw_file($blob, $is_remove);
81
+            } elseif ($this->importable_post($blob)) {
82
+                $result = $this->import_post($blob, $is_remove);
83 83
             }
84 84
 
85
-            if ( is_wp_error( $result ) ) {
85
+            if (is_wp_error($result)) {
86 86
                 /* @var WP_Error $result */
87
-                $error = wogh_append_error( $error, $result );
87
+                $error = wogh_append_error($error, $result);
88 88
             }
89 89
         }
90 90
 
@@ -99,21 +99,21 @@  discard block
 block discarded – undo
99 99
     public function master() {
100 100
         $result = $this->app->api()->fetch()->tree_recursive();
101 101
 
102
-        if ( is_wp_error( $result ) ) {
102
+        if (is_wp_error($result)) {
103 103
             /* @var WP_Error $result */
104 104
             return $result;
105 105
         }
106 106
 
107
-        if ( is_array( $result ) ) {
108
-            $result = $this->import_files( $result );
107
+        if (is_array($result)) {
108
+            $result = $this->import_files($result);
109 109
         }
110 110
 
111
-        if ( is_wp_error( $result ) ) {
111
+        if (is_wp_error($result)) {
112 112
             /* @var WP_Error $result */
113 113
             return $result;
114 114
         }
115 115
 
116
-        return __( 'Payload processed', 'writing-on-github' );
116
+        return __('Payload processed', 'writing-on-github');
117 117
     }
118 118
 
119 119
     /**
@@ -123,14 +123,14 @@  discard block
 block discarded – undo
123 123
      *
124 124
      * @return bool
125 125
      */
126
-    protected function importable_file( Writing_On_GitHub_File_Info $file ) {
126
+    protected function importable_file(Writing_On_GitHub_File_Info $file) {
127 127
 
128 128
         $path = $file->path;
129 129
 
130 130
         // only _pages, _posts and images
131
-        $prefixs = array( '_pages/', '_posts/', 'images/');
131
+        $prefixs = array('_pages/', '_posts/', 'images/');
132 132
         foreach ($prefixs as $prefix) {
133
-            if ( ! strncasecmp($path, $prefix, strlen( $prefix ) ) ) {
133
+            if ( ! strncasecmp($path, $prefix, strlen($prefix))) {
134 134
                 return true;
135 135
             }
136 136
         }
@@ -144,7 +144,7 @@  discard block
 block discarded – undo
144 144
      *
145 145
      * @return bool
146 146
      */
147
-    protected function importable_post( Writing_On_GitHub_Blob $blob ) {
147
+    protected function importable_post(Writing_On_GitHub_Blob $blob) {
148 148
         // global $wpdb;
149 149
 
150 150
         // // Skip the repo's readme.
@@ -157,7 +157,7 @@  discard block
 block discarded – undo
157 157
         //  return false;
158 158
         // }
159 159
 
160
-        if ( ! $blob->has_frontmatter() ) {
160
+        if ( ! $blob->has_frontmatter()) {
161 161
             return false;
162 162
         }
163 163
 
@@ -170,37 +170,37 @@  discard block
 block discarded – undo
170 170
      * @param  bool                   $is_remove
171 171
      * @return WP_Error|bool
172 172
      */
173
-    protected function import_post( Writing_On_GitHub_Blob $blob, $is_remove ) {
173
+    protected function import_post(Writing_On_GitHub_Blob $blob, $is_remove) {
174 174
 
175
-        if ( $is_remove ) {
175
+        if ($is_remove) {
176 176
             $id = $blob->id();
177
-            if ( empty( $id ) ) {
177
+            if (empty($id)) {
178 178
                 return false;
179 179
             }
180
-            $result = $this->app->database()->delete_post( $id );
181
-            if ( is_wp_error( $result ) ) {
180
+            $result = $this->app->database()->delete_post($id);
181
+            if (is_wp_error($result)) {
182 182
                 /* @var WP_Error $result */
183 183
                 return $result;
184 184
             }
185 185
             return true;
186 186
         }
187 187
 
188
-        $post = $this->blob_to_post( $blob );
188
+        $post = $this->blob_to_post($blob);
189 189
 
190
-        if ( ! $post instanceof Writing_On_GitHub_Post ) {
190
+        if ( ! $post instanceof Writing_On_GitHub_Post) {
191 191
             return false;
192 192
         }
193 193
 
194
-        $result = $this->app->database()->save_post( $post );
195
-        if ( is_wp_error( $result ) ) {
194
+        $result = $this->app->database()->save_post($post);
195
+        if (is_wp_error($result)) {
196 196
             /** @var WP_Error $result */
197 197
             return $result;
198 198
         }
199 199
 
200
-        if ( $post->is_new() ) {
201
-            $result = $this->app->export()->new_posts( $new );
200
+        if ($post->is_new()) {
201
+            $result = $this->app->export()->new_posts($new);
202 202
 
203
-            if ( is_wp_error( $result ) ) {
203
+            if (is_wp_error($result)) {
204 204
                 /** @var WP_Error $result */
205 205
                 return $result;
206 206
             }
@@ -214,13 +214,13 @@  discard block
 block discarded – undo
214 214
      * @param  Writing_On_GitHub_Blob $blob
215 215
      * @return bool
216 216
      */
217
-    protected function importable_raw_file( Writing_On_GitHub_Blob $blob ) {
218
-        if ( $blob->has_frontmatter() ) {
217
+    protected function importable_raw_file(Writing_On_GitHub_Blob $blob) {
218
+        if ($blob->has_frontmatter()) {
219 219
             return false;
220 220
         }
221 221
 
222 222
         // only images
223
-        if ( strncasecmp($blob->path(), 'images/', strlen('images/') ) != 0) {
223
+        if (strncasecmp($blob->path(), 'images/', strlen('images/')) != 0) {
224 224
             return false;
225 225
         }
226 226
 
@@ -232,16 +232,16 @@  discard block
 block discarded – undo
232 232
      * @param  Writing_On_GitHub_Blob $blob
233 233
      * @param  bool                   $is_remove
234 234
      */
235
-    protected function import_raw_file( Writing_On_GitHub_Blob $blob, $is_remove ) {
235
+    protected function import_raw_file(Writing_On_GitHub_Blob $blob, $is_remove) {
236 236
         $arr = wp_upload_dir();
237 237
         $path = $arr['basedir'] . '/writing-on-github/' . $blob->path();
238
-        if ( $is_remove ) {
239
-            if ( file_exists($path) ) {
238
+        if ($is_remove) {
239
+            if (file_exists($path)) {
240 240
                 unlink($path);
241 241
             }
242 242
         } else {
243 243
             $dirname = dirname($path);
244
-            if ( ! file_exists($dirname) ) {
244
+            if ( ! file_exists($dirname)) {
245 245
                 wp_mkdir_p($dirname);
246 246
             }
247 247
 
@@ -256,57 +256,57 @@  discard block
 block discarded – undo
256 256
      *
257 257
      * @return Writing_On_GitHub_Post|false
258 258
      */
259
-    protected function blob_to_post( Writing_On_GitHub_Blob $blob ) {
260
-        $args = array( 'post_content' => $blob->content_import() );
259
+    protected function blob_to_post(Writing_On_GitHub_Blob $blob) {
260
+        $args = array('post_content' => $blob->content_import());
261 261
         $meta = $blob->meta();
262 262
 
263 263
         $id = false;
264 264
 
265
-        if ( ! empty( $meta ) ) {
266
-            if ( array_key_exists( 'layout', $meta ) ) {
265
+        if ( ! empty($meta)) {
266
+            if (array_key_exists('layout', $meta)) {
267 267
                 $args['post_type'] = $meta['layout'];
268
-                unset( $meta['layout'] );
268
+                unset($meta['layout']);
269 269
             }
270 270
 
271
-            if ( array_key_exists( 'published', $meta ) ) {
271
+            if (array_key_exists('published', $meta)) {
272 272
                 $args['post_status'] = true === $meta['published'] ? 'publish' : 'draft';
273
-                unset( $meta['published'] );
273
+                unset($meta['published']);
274 274
             }
275 275
 
276
-            if ( array_key_exists( 'post_title', $meta ) ) {
276
+            if (array_key_exists('post_title', $meta)) {
277 277
                 $args['post_title'] = $meta['post_title'];
278
-                unset( $meta['post_title'] );
278
+                unset($meta['post_title']);
279 279
             }
280 280
 
281
-            if ( array_key_exists( 'post_name', $meta ) ) {
281
+            if (array_key_exists('post_name', $meta)) {
282 282
                 $args['post_name'] = $meta['post_name'];
283
-                unset( $meta['post_name'] );
283
+                unset($meta['post_name']);
284 284
             }
285 285
 
286
-            if ( array_key_exists( 'ID', $meta ) ) {
286
+            if (array_key_exists('ID', $meta)) {
287 287
                 $id = $args['ID'] = $meta['ID'];
288 288
                 $blob->set_id($id);
289
-                unset( $meta['ID'] );
289
+                unset($meta['ID']);
290 290
             }
291 291
         }
292 292
 
293 293
         $meta['_wogh_sha'] = $blob->sha();
294 294
 
295
-        if ( $id ) {
296
-            $old_sha = get_post_meta( $id, '_wogh_sha', true );
297
-            $old_github_path = get_post_meta( $id, '_wogh_github_path', true );
295
+        if ($id) {
296
+            $old_sha = get_post_meta($id, '_wogh_sha', true);
297
+            $old_github_path = get_post_meta($id, '_wogh_github_path', true);
298 298
 
299 299
             // dont save post when has same sha
300
-            if ( $old_sha  && $old_sha == $meta['_wogh_sha'] &&
301
-                 $old_github_path && $old_github_path == $blob->path() ) {
300
+            if ($old_sha && $old_sha == $meta['_wogh_sha'] &&
301
+                 $old_github_path && $old_github_path == $blob->path()) {
302 302
                 return false;
303 303
             }
304 304
         }
305 305
 
306
-        $post = new Writing_On_GitHub_Post( $args, $this->app->api() );
307
-        $post->set_old_github_path( $blob->path() );
308
-        $post->set_meta( $meta );
309
-        $blob->set_id( $post->id() );
306
+        $post = new Writing_On_GitHub_Post($args, $this->app->api());
307
+        $post->set_old_github_path($blob->path());
308
+        $post->set_meta($meta);
309
+        $blob->set_id($post->id());
310 310
 
311 311
         return $post;
312 312
     }
Please login to merge, or discard this patch.