-
Notifications
You must be signed in to change notification settings - Fork 0
/
oik-block-opinions.php
165 lines (141 loc) · 4.77 KB
/
oik-block-opinions.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
<?php
/**
* @copyright (C) Copyright Bobbing Wide 2018
* @package oik-block
*/
/**
* Syntax: oikwp oik-block-opinions.php subcommand [post_type | post_id ] url=domain path=path
*
* Main routine to gather opinions regarding which Editor to use to change existing content
* in a site that was created prior to WordPress 5.0
*
* Eventually this will become a wp-cli command
* First we have to find out how to do this?
* Now, or later?
*
*
*/
oik_block_opinions_loaded();
/**
* Function to invoke when oik-block-opinions is loaded
*
* Waits until "run_oik-block-opinions.php" action is run.
*
*/
function oik_block_opinions_loaded() {
add_action( "run_oik-block-opinions.php", "oik_block_opinions_run" );
}
/**
* Runs oik-block-opinions
*/
function oik_block_opinions_run() {
$subcommand = oik_batch_query_value_from_argv( 1, null );
$post_type_or_id = oik_batch_query_value_from_argv( 2, null );
$post_type_or_id = trim( $post_type_or_id );
oik_require( "admin/class-oik-block-editor-opinions.php", "oik-block" );
add_action( "oik_block_prepare_opinions", "oik_block_prepare_opinions" );
ini_set('memory_limit','1024M');
$level = oik_block_determine_level( $post_type_or_id );
oik_block_opinions_subcommand( $subcommand, $level, $post_type_or_id );
}
/**
* Determines the level at which to perform the subcommand
*
* Level | Means
* ----- | -------------
* site | Perform the subcommand at the site level, including plugins, themes and content
* type | Perform the subcommand at the post type level. Includes processing all posts for a post type
* post | Perform the subcommand against an individual post
* user | Perform the subcommand for a selected user; --user=<id|login|email>
*
* @param string $post_type_or_id post type or post ID
* @return string $level
*/
function oik_block_determine_level( $post_type_or_id ) {
$level = 'site';
if ( $post_type_or_id ) {
echo $post_type_or_id . PHP_EOL;
if ( is_numeric( $post_type_or_id ) ) {
$post_id = $post_type_or_id;
echo "Processing post ID: $post_id" . PHP_EOL;
$post = get_post( $post_id );
$level = 'post';
} else {
$post_id = null;
$post_type = $post_type_or_id;
$post_type_object = oik_block_options_validate_post_type( $post_type );
if ( $post_type_object ) {
echo "Processing post type: $post_type" . PHP_EOL;
$level = 'type';
} else {
echo "Unrecognised/unsupported post type: $post_type" . PHP_EOL;
die();
}
}
} else {
// 'site' or 'user' - @TODO Add logic for 'user' level
}
return $level;
}
/**
* Implements subcommand at the required level
*
* Each level has its own subcommands class and methods.
* They all use the oik_block_editor_opinions and oik_block_editor_opinion classes.
* @TODO Complete this table... somewhere
* @TODO Use WP-CLI logic to determine valid subcommands by level
*
* Subcommand | Site | Type | Post | User
* ---------- | ---- | ---- | ---- | -----
* status | Y | Y | Y |
* reset | Y | | |
* list
* consider
* decide
* test
* convert
*/
function oik_block_opinions_subcommand( $subcommand, $level, $post_type_or_id ) {
if ( !$subcommand ) {
echo "Syntax: oikwp oik-block-opinions.php subcommand [ post_type | post_id ] url=domain path=path" . PHP_EOL;
echo "No subcommand specified. Defaulting to 'status'." . PHP_EOL;
$subcommand = "status";
}
oik_require( "admin/class-oik-block-subcommands.php", "oik-block" );
oik_require( "admin/class-oik-block-{$level}-subcommands.php", "oik-block" );
$class = "oik_block_{$level}_subcommands";
$subcommands = new $class( $level, $post_type_or_id );
if ( method_exists( $subcommands, $subcommand ) ) {
$subcommands->$subcommand( $post_type_or_id );
}
}
/**
* Validates post_type
*
* Note: 'revision' is not supported but other's which may not be editable are.
*
* @param string $post_type
* @return object post type object for a valid post type, except 'revision'
*/
function oik_block_options_validate_post_type( $post_type ) {
if ( $post_type === 'revision' ) {
echo "post type revision not supported" . PHP_EOL;
return null;
}
$post_type_object = get_post_type_object( $post_type );
return $post_type_object;
}
/**
* Prepares for opinion gathering
*
* Opinion gathering is controlled by methods in class oik_block_editor_opinions
*/
function oik_block_prepare_opinions() {
oik_require( "opinions/class-oik-block-site-opinions.php", "oik-block" );
$site_opinions = new oik_block_site_opinions();
oik_require( "opinions/class-oik-block-type-opinions.php", "oik-block" );
$type_opinions = new oik_block_type_opinions();
oik_require( "opinions/class-oik-block-post-opinions.php", "oik-block" );
$post_opinions = new oik_block_post_opinions();
// oik_require( "opinions/class-oik-block-user-opinions.php", "oik-block" );
}