Passed
Push — master ( 6fa460...6bbb33 )
by Paul
18:19 queued 07:35
created

ToolsController::downloadConsole()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
ccs 0
cts 2
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 2
1
<?php
2
3
namespace GeminiLabs\SiteReviews\Controllers;
4
5
use GeminiLabs\SiteReviews\Commands\ChangeLogLevel;
6
use GeminiLabs\SiteReviews\Commands\ExportReviews;
7
use GeminiLabs\SiteReviews\Commands\ImportReviews;
8
use GeminiLabs\SiteReviews\Commands\ImportSettings;
9
use GeminiLabs\SiteReviews\Database;
10
use GeminiLabs\SiteReviews\Database\CountManager;
11
use GeminiLabs\SiteReviews\Database\OptionManager;
12
use GeminiLabs\SiteReviews\Database\SqlSchema;
13
use GeminiLabs\SiteReviews\Helper;
14
use GeminiLabs\SiteReviews\Modules\Console;
15
use GeminiLabs\SiteReviews\Modules\Html\Builder;
16
use GeminiLabs\SiteReviews\Modules\Migrate;
17
use GeminiLabs\SiteReviews\Modules\Notice;
18
use GeminiLabs\SiteReviews\Modules\Queue;
19
use GeminiLabs\SiteReviews\Modules\SystemInfo;
20
use GeminiLabs\SiteReviews\Request;
21
use GeminiLabs\SiteReviews\Role;
22
use GeminiLabs\SiteReviews\Rollback;
23
24
class ToolsController extends Controller
25
{
26
    /**
27
     * @return void
28
     * @action site-reviews/route/admin/console-level
29
     */
30
    public function changeConsoleLevel(Request $request)
31
    {
32
        $this->execute(new ChangeLogLevel($request));
33
    }
34
35
    /**
36
     * @return void
37
     * @action site-reviews/route/admin/console-level
38
     */
39
    public function changeConsoleLevelAjax(Request $request)
40
    {
41
        $this->changeConsoleLevel($request);
42
        wp_send_json_success([
43
            'notices' => glsr(Notice::class)->get(),
44
        ]);
45
    }
46
47
    /**
48
     * @return void
49
     * @action site-reviews/route/admin/clear-console
50
     */
51
    public function clearConsole()
52
    {
53
        glsr(Console::class)->clear();
54
        glsr(Notice::class)->addSuccess(_x('Console cleared.', 'admin-text', 'site-reviews'));
55
    }
56
57
    /**
58
     * @return void
59
     * @action site-reviews/route/ajax/clear-console
60
     */
61
    public function clearConsoleAjax()
62
    {
63
        $this->clearConsole();
64
        wp_send_json_success([
65
            'console' => glsr(Console::class)->get(),
66
            'notices' => glsr(Notice::class)->get(),
67
        ]);
68
    }
69
70
    /**
71
     * @return void
72
     * @action site-reviews/route/admin/convert-table-engine
73
     */
74
    public function convertTableEngine(Request $request)
75
    {
76
        $result = glsr(SqlSchema::class)->convertTableEngine($request->table);
77
        if (true === $result) {
78
            glsr(Notice::class)->addSuccess(
79
                sprintf(_x('The <code>%s</code> table was successfully converted to InnoDB.', 'admin-text', 'site-reviews'), $request->table)
80
            );
81
        }
82
        if (false === $result) {
83
            glsr(Notice::class)->addError(
84
                sprintf(_x('The <code>%s</code> table could not be converted to InnoDB.', 'admin-text', 'site-reviews'), $request->table)
85
            );
86
        }
87
        if (-1 === $result) {
88
            glsr(Notice::class)->addWarning(
89
                sprintf(_x('The <code>%s</code> table was not found in the database.', 'admin-text', 'site-reviews'), $request->table)
90
            );
91
        }
92
    }
93
94
    /**
95
     * @return void
96
     * @action site-reviews/route/ajax/convert-table-engine
97
     */
98
    public function convertTableEngineAjax(Request $request)
99
    {
100
        $this->convertTableEngine($request);
101
        wp_send_json_success([
102
            'notices' => glsr(Notice::class)->get(),
103
        ]);
104
    }
105
106
    /**
107
     * @return void
108
     * @action site-reviews/route/admin/detect-ip-address
109
     */
110
    public function detectIpAddress()
111
    {
112
        $link = glsr(Builder::class)->a([
113
            'data-expand' => '#faq-ipaddress-incorrectly-detected',
114
            'href' => glsr_admin_url('documentation', 'faq'),
115
            'text' => _x('FAQ', 'admin-text', 'site-reviews'),
116
        ]);
117
        if ('unknown' === $ipAddress = Helper::getIpAddress()) {
118
            glsr(Notice::class)->addWarning(sprintf(
119
                _x('Site Reviews was unable to detect an IP address. To fix this, please see the %s.', 'admin-text', 'site-reviews'),
120
                $link
121
            ));
122
        } else {
123
            glsr(Notice::class)->addSuccess(sprintf(
124
                _x('Your detected IP address is %s. If this looks incorrect, please see the %s.', 'admin-text', 'site-reviews'),
125
                '<code>'.$ipAddress.'</code>', $link
126
            ));
127
        }
128
    }
129
130
    /**
131
     * @return void
132
     * @action site-reviews/route/ajax/detect-ip-address
133
     */
134
    public function detectIpAddressAjax()
135
    {
136
        $this->detectIpAddress();
137
        wp_send_json_success([
138
            'notices' => glsr(Notice::class)->get(),
139
        ]);
140
    }
141
142
    /**
143
     * @return void
144
     * @action site-reviews/route/admin/download-console
145
     */
146
    public function downloadConsole()
147
    {
148
        $this->download(glsr()->id.'-console.txt', glsr(Console::class)->get());
149
    }
150
151
    /**
152
     * @return void
153
     * @action site-reviews/route/admin/download-system-info
154
     */
155
    public function downloadSystemInfo()
156
    {
157
        $this->download(glsr()->id.'-system-info.txt', glsr(SystemInfo::class)->get());
158
    }
159
160
    /**
161
     * @return void
162
     * @action site-reviews/route/admin/export-reviews
163
     */
164
    public function exportReviews(Request $request)
165
    {
166
        $this->execute(new ExportReviews($request));
167
    }
168
169
    /**
170
     * @return void
171
     * @action site-reviews/route/admin/export-settings
172
     */
173
    public function exportSettings()
174
    {
175
        $this->download(glsr()->id.'-settings.json', glsr(OptionManager::class)->json());
176
    }
177
178
    /**
179
     * @return void
180
     * @action site-reviews/route/admin/fetch-console
181
     */
182
    public function fetchConsole()
183
    {
184
        glsr(Notice::class)->addSuccess(_x('Console reloaded.', 'admin-text', 'site-reviews'));
185
    }
186
187
    /**
188
     * @return void
189
     * @action site-reviews/route/ajax/fetch-console
190
     */
191
    public function fetchConsoleAjax()
192
    {
193
        $this->fetchConsole();
194
        wp_send_json_success([
195
            'console' => glsr(Console::class)->getRaw(), // we don't need to esc_html here
196
            'notices' => glsr(Notice::class)->get(),
197
        ]);
198
    }
199
200
    /**
201
     * @param object $value
202
     * @return object
203
     * @filter site_transient_update_plugins
204
     */
205 6
    public function filterUpdatePluginsTransient($value)
206
    {
207 6
        if ($version = get_transient(glsr()->prefix.'rollback_version')) {
208
            $plugin = plugin_basename(glsr()->file);
209
            $update = (object) [
210
                'new_version' => $version,
211
                'package' => sprintf('https://downloads.wordpress.org/plugin/%s.%s.zip', glsr()->id, $version),
212
                'slug' => glsr()->id,
213
            ];
214
            if (is_object($value)) {
215
                $value->response[$plugin] = $update;
216
            }
217
        }
218 6
        return $value;
219
    }
220
221
    /**
222
     * @return void
223
     * @action site-reviews/route/admin/import-reviews
224
     */
225
    public function importReviews(Request $request)
226
    {
227
        $this->execute(new ImportReviews($request));
228
    }
229
230
    /**
231
     * @return void
232
     * @action site-reviews/route/admin/import-settings
233
     */
234
    public function importSettings()
235
    {
236
        $this->execute(new ImportSettings());
237
    }
238
239
    /**
240
     * @return void
241
     * @action site-reviews/route/admin/migrate-plugin
242
     */
243
    public function migratePlugin(Request $request)
244
    {
245
        glsr(Queue::class)->cancelAll('queue/migration');
246
        if (wp_validate_boolean($request->alt)) {
247
            glsr(Migrate::class)->runAll();
248
            glsr(Notice::class)->clear()->addSuccess(_x('All plugin migrations have been run successfully, please reload the page.', 'admin-text', 'site-reviews'));
249
        } else {
250
            glsr(Migrate::class)->run();
251
            glsr(Notice::class)->clear()->addSuccess(_x('The plugin has been migrated sucessfully, please reload the page.', 'admin-text', 'site-reviews'));
252
        }
253
    }
254
255
    /**
256
     * @return void
257
     * @action site-reviews/route/ajax/migrate-plugin
258
     */
259
    public function migratePluginAjax(Request $request)
260
    {
261
        $this->migratePlugin($request);
262
        wp_send_json_success([
263
            'notices' => glsr(Notice::class)->get(),
264
        ]);
265
    }
266
267
    /**
268
     * @return void
269
     * @action site-reviews/route/admin/repair-review-relations
270
     */
271
    public function repairReviewRelations()
272
    {
273
        glsr(Database::class)->deleteInvalidReviews();
274
        glsr(Notice::class)->clear()->addSuccess(_x('The review relationships have been repaired.', 'admin-text', 'site-reviews'));
275
    }
276
277
    /**
278
     * @return void
279
     * @action site-reviews/route/ajax/repair-review-relations
280
     */
281
    public function repairReviewRelationsAjax()
282
    {
283
        $this->repairReviewRelations();
284
        wp_send_json_success([
285
            'notices' => glsr(Notice::class)->get(),
286
        ]);
287
    }
288
289
    /**
290
     * @return void
291
     * @action site-reviews/route/admin/reset-assigned-meta
292
     */
293
    public function resetAssignedMeta()
294
    {
295
        glsr(CountManager::class)->recalculate();
296
        glsr(Notice::class)->clear()->addSuccess(_x('The assigned meta values have been reset.', 'admin-text', 'site-reviews'));
297
    }
298
299
    /**
300
     * @return void
301
     * @action site-reviews/route/ajax/reset-assigned-meta
302
     */
303
    public function resetAssignedMetaAjax()
304
    {
305
        $this->resetAssignedMeta();
306
        wp_send_json_success([
307
            'notices' => glsr(Notice::class)->get(),
308
        ]);
309
    }
310
311
    /**
312
     * @return void
313
     * @action site-reviews/route/admin/reset-permissions
314
     */
315
    public function resetPermissions(Request $request)
316
    {
317
        if (wp_validate_boolean($request->alt)) {
318
            glsr(Role::class)->hardResetAll();
319
        } else {
320
            glsr(Role::class)->resetAll();
321
        }
322
        glsr(Notice::class)->clear()->addSuccess(_x('The permissions have been reset.', 'admin-text', 'site-reviews'));
323
    }
324
325
    /**
326
     * @return void
327
     * @action site-reviews/route/ajax/reset-permissions
328
     */
329
    public function resetPermissionsAjax(Request $request)
330
    {
331
        $this->resetPermissions($request);
332
        $reloadLink = glsr(Builder::class)->a([
333
            'text' => _x('reload the page', 'admin-text', 'site-reviews'),
334
            'href' => 'javascript:window.location.reload(1)',
335
        ]);
336
        glsr(Notice::class)->clear()->addSuccess(
337
            sprintf(_x('The permissions have been reset, please %s for them to take effect.', 'admin-text', 'site-reviews'), $reloadLink)
338
        );
339
        wp_send_json_success([
340
            'notices' => glsr(Notice::class)->get(),
341
        ]);
342
    }
343
344
    /**
345
     * @return void
346
     * @action update-custom_rollback-<Application::ID>
347
     */
348
    public function rollbackPlugin()
349
    {
350
        if (!current_user_can('update_plugins')) {
351
            wp_die(sprintf(_x('Sorry, you are not allowed to rollback %s.', 'Site Reviews (admin-text)', 'site-reviews'), glsr()->name));
352
        }
353
        $request = Request::inputGet();
354
        check_admin_referer($request->action);
355
        glsr(Rollback::class)->rollback($request->version);
356
    }
357
358
    /**
359
     * @return void
360
     * @action site-reviews/route/ajax/rollback-<Application::ID>
361
     */
362
    public function rollbackPluginAjax(Request $request)
363
    {
364
        wp_send_json_success(
365
            glsr(Rollback::class)->rollbackData($request->version)
366
        );
367
    }
368
}
369