PluginProbe ʕ •ᴥ•ʔ
WP Popular Posts / trunk
WP Popular Posts vtrunk
4.0.8 4.0.9 4.1.0 4.1.1 4.1.2 4.2.0 4.2.1 4.2.2 5.0.0 5.0.1 5.0.2 5.1.0 5.2.0 5.2.1 5.2.2 5.2.3 5.2.4 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 6.0.0 6.0.1 6.0.2 6.0.3 6.0.4 6.0.5 6.1.0 6.1.1 6.1.2 6.1.3 6.1.4 6.2.0 6.2.1 6.3.0 6.3.1 6.3.2 6.3.3 6.3.4 6.4.0 6.4.1 6.4.2 7.0.0 7.0.1 7.1.0 7.2.0 7.3.0 7.3.1 7.3.2 7.3.3 7.3.4 7.3.5 7.3.6 7.3.7 7.3.8 7.4.0 trunk 2.3.7 3.0.0 3.0.1 3.0.2 3.0.3 3.1.0 3.1.1 3.2.0 3.2.1 3.2.2 3.2.3 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 4.0.0 4.0.1 4.0.10 4.0.11 4.0.12 4.0.13 4.0.2 4.0.3 4.0.5 4.0.6
wordpress-popular-posts / src / Activation / Activator.php
wordpress-popular-posts / src / Activation Last commit date
Activator.php 8 months ago Deactivator.php 8 months ago
Activator.php
140 lines
1 <?php
2
3 /**
4 * Fired during plugin activation
5 *
6 * @since 1.0.0
7 * @package WordPressPopularPosts
8 */
9
10 /**
11 * Fired during plugin activation.
12 *
13 * This class defines all code necessary to run during the plugin's activation.
14 *
15 * @since 1.0.0
16 * @package WordPressPopularPosts
17 * @author Hector Cabrera <me@cabrerahector.com>
18 */
19
20 namespace WordPressPopularPosts\Activation;
21
22 class Activator {
23 /**
24 * Fired when the plugin is activated.
25 *
26 * @since 1.0.0
27 * @param mixed $network_wide True if WPMU superadmin uses "Network Activate" action, false if WPMU is disabled or plugin is activated on an individual blog. Sometimes it's NULL though.
28 * @global object $wpdb
29 */
30 public static function activate($network_wide) /** @TODO: starting PHP 8.0 $network_wide can be declared as mixed $network_wide */
31 {
32 global $wpdb;
33
34 if ( function_exists('is_multisite') && \is_multisite() ) {
35 // run activation for each blog in the network
36 if ( $network_wide ) {
37 $blogs_table = "{$wpdb->blogs}";
38 $original_blog_id = \get_current_blog_id();
39 $blogs_ids = $wpdb->get_col($wpdb->prepare("SELECT blog_id FROM %i;", $blogs_table)); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching
40
41 foreach( $blogs_ids as $blog_id ) {
42 \switch_to_blog($blog_id);
43 self::plugin_activate();
44 }
45
46 // switch back to current blog
47 \switch_to_blog($original_blog_id);
48
49 return;
50 }
51 }
52
53 self::plugin_activate();
54 }
55
56 /**
57 * When a new MU site is added, generate its WPP DB tables.
58 *
59 * @since 1.0.0
60 */
61 public static function track_new_site()
62 {
63 self::plugin_activate();
64 }
65
66 /**
67 * On plugin activation, checks that the WPP database tables are present.
68 *
69 * @since 1.0.0
70 * @global object $wpdb
71 */
72 private static function plugin_activate()
73 {
74 $wpp_ver = \get_option('wpp_ver');
75
76 if (
77 ! $wpp_ver
78 || version_compare($wpp_ver, WPP_VERSION, '<')
79 || ( defined('WPP_DO_DB_TABLES') && WPP_DO_DB_TABLES )
80 ) {
81 global $wpdb;
82
83 $prefix = $wpdb->prefix . 'popularposts';
84 self::do_db_tables($prefix);
85 }
86 }
87
88 /**
89 * Creates/updates the database tables.
90 *
91 * @since 1.0.0
92 * @param string $prefix
93 * @global object $wpdb
94 */
95 private static function do_db_tables(string $prefix)
96 {
97 global $wpdb;
98 $charset_collate = '';
99
100 if ( ! empty($wpdb->charset) ) {
101 $charset_collate = "DEFAULT CHARACTER SET {$wpdb->charset} ";
102 }
103
104 if ( ! empty($wpdb->collate) ) {
105 $charset_collate .= "COLLATE {$wpdb->collate}";
106 }
107
108 $sql = "
109 CREATE TABLE {$prefix}data (
110 postid bigint(20) NOT NULL,
111 day datetime NOT NULL,
112 last_viewed datetime NOT NULL,
113 pageviews bigint(20) DEFAULT 1,
114 PRIMARY KEY (postid)
115 ) {$charset_collate} ENGINE=InnoDB;
116 CREATE TABLE {$prefix}summary (
117 ID bigint(20) NOT NULL AUTO_INCREMENT,
118 postid bigint(20) NOT NULL,
119 pageviews bigint(20) NOT NULL DEFAULT 1,
120 view_date date NOT NULL,
121 view_datetime datetime NOT NULL,
122 PRIMARY KEY (ID),
123 KEY postid (postid),
124 KEY view_date (view_date),
125 KEY view_datetime (view_datetime)
126 ) {$charset_collate} ENGINE=InnoDB;
127 CREATE TABLE {$prefix}transients (
128 ID bigint(20) NOT NULL AUTO_INCREMENT,
129 tkey varchar(191) NOT NULL,
130 tkey_date datetime NOT NULL,
131 PRIMARY KEY (ID)
132 ) {$charset_collate} ENGINE=InnoDB";
133
134 require_once ABSPATH . 'wp-admin/includes/upgrade.php';
135 \dbDelta($sql);
136
137 \update_option('wpp_ver', WPP_VERSION);
138 }
139 }
140