-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjcml-network-page.php
executable file
·148 lines (128 loc) · 3.75 KB
/
jcml-network-page.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
<?php
/**
* Add custom page to network menu
*/
function jcml_network_menu(){
add_submenu_page( 'sites.php', 'Language mapping', 'Languages', 'manage_sites', 'jcmst-lang-settings', 'jcml_network_language_settings' );
}
add_action('network_admin_menu', 'jcml_network_menu');
/**
* Network custom page to manage languages for sites
*/
function jcml_network_language_settings(){
global $wpdb;
$errors = $messages = [];
if( !empty($_POST['add-language']) )
{
$input = $_POST['language'];
if( empty($input['domain']) || empty($input['language']) || empty($input['alias']) )
{
$errors[] = 'Please fill all required fields';
}
$blog_id = 0;
if( !empty($input['domain']) )
{
$input['domain'] = trim($input['domain']);
$parts = explode('/', $input['domain'], 2);
$blog_id = get_blog_id_from_url( $parts[0], '/'.$parts[1] );
$blog = get_blog_details($blog_id);
if( $blog_id < 1 || empty($blog) )
{
$errors[] = 'Wrong blog domain! Please choose correct path from autocomplete box.';
}
}
if( empty($errors) )
{
// check again that we don't have this mapping
$_POST['term'] = $input['domain'];
$not_maped = jcml_autocomplete_get_blogs_domains_disabled(true, true);
if( !in_array($input['domain'], $not_maped) )
{
$errors[] = 'This domain is already maped. Please detach it first.';
}
}
if( empty($errors) )
{
// add mapping
$wpdb->insert($wpdb->blog_languages,
array(
'blog_id' => $blog_id,
'language' => trim($input['language']),
'alias' => trim($input['alias']),
),
array(
'%d',
'%s',
'%s'
)
);
$messages[] = 'Language added';
$_POST = $input = array();
}
}
if( !empty($_GET['detach']) )
{
$wpdb->delete($wpdb->blog_languages, array('blog_id' => $_GET['detach']));
$blog = get_blog_details($_GET['detach']);
if( $blog->blog_id == $_GET['detach'] )
$messages[] = 'Language detached from site: <a href="'.get_site_url($blog->blog_id).'" target="_blank">'.$blog->domain.$blog->path.'</a>';
}
// get current settings
$settings = $wpdb->get_results("
SELECT *
FROM $wpdb->blog_languages as bl
INNER JOIN $wpdb->blogs as b ON bl.blog_id = b.blog_id
ORDER BY b.path");
include('views/network_language_settings.php');
}
function jcml_network_include_assets(){
/**
* add custom scripts
*/
// ui autocomplete
wp_register_script(
'ui-autocomplete',
jcml_plugin_url().'/assets/jquery-ui1.11.autocomplete.min',
array('jquery')
);
wp_enqueue_script('ui-autocomplete');
// network page script
wp_register_script(
'jcml_network_page',
jcml_plugin_url().'/assets/jcml_network_page.js',
array('jquery')
);
wp_enqueue_script('jcml_network_page');
/**
* add custom styles
*/
wp_register_style('ui-autocomplete', jcml_plugin_url().'/assets/jquery-ui-1.11.autocomplete.min.css');
wp_enqueue_style('ui-autocomplete');
wp_register_style('jcml_network_page', jcml_plugin_url().'/assets/jcml_network_page.css');
wp_enqueue_style('jcml_network_page');
}
/**
* return the array of not-mapped blogs
* @global wpdb $wpdb
*/
function jcml_autocomplete_get_blogs_domains_disabled( $return = false, $strict = false ){
$term = trim($_POST['term']);
global $wpdb;
$search_string = mysql_escape_string($term);
if( !$strict ) $search_string = '%'.$search_string.'%';
// get blogs
$not_maped_blogs = $wpdb->get_results("
SELECT *, CONCAT(b.domain,b.path) as full_path
FROM $wpdb->blogs as b
LEFT JOIN $wpdb->blog_languages as bl ON bl.blog_id = b.blog_id
WHERE bl.language IS NULL
HAVING full_path LIKE '$search_string'
ORDER BY b.path");
$results = array();
foreach($not_maped_blogs as $blog){
$results[] = $blog->domain . $blog->path;
}
if( $return )
return $results;
jcml_render_json($results);
}