· 7 years ago · Feb 19, 2019, 09:54 AM
1<?php
2/*
3Plugin Name: DA Reactions
4Description: Aggiunge la possibilità di inserire una reazione a un post o a un commento
5Version: 1.1.3
6Author: Engineering Ingegneria Informatica
7Author URI: http://www.eng.it/
8*/
9global $da_reactions_db_version;
10$da_reactions_db_version = '1.2';
11
12if ( ! defined( 'ABSPATH' ) ) {
13 define( 'ABSPATH', dirname( dirname( __FILE__ ) ) . '/' );
14}
15define('DA_REACTIONS_ABSPATH', dirname(__FILE__) . '/' );
16
17include_once ('includes/admin.columns.php');
18include_once ('includes/admin.settings.php');
19include_once ('includes/ajax.php');
20include_once ('includes/assets.php');
21include_once ('includes/database.php');
22include_once ('includes/frontend.php');
23include_once ('includes/metaboxes.php');
24include_once ('includes/shortcodes.php');
25include_once ('includes/third-parties/groups.php');
26
27
28/// Installer
29/**
30 * Run install
31 */
32function da_reactions_install($db_version) {
33 global $wpdb;
34 global $da_reactions_db_version;
35
36 if ((float)$db_version < 1) {
37 /// First installation ever
38 $table_name = $wpdb->prefix . 'da_reactions';
39 $charset_collate = $wpdb->get_charset_collate();
40
41 $sql = "CREATE TABLE IF NOT EXISTS $table_name (
42 id mediumint(9) NOT NULL AUTO_INCREMENT,
43 resource_id mediumint(9),
44 resource_type varchar(20),
45 emotion varchar(32) NOT NULL,
46 user_id varchar(32),
47 created_at datetime DEFAULT NOW() NOT NULL,
48 KEY da_reaction_resource_id (resource_id),
49 KEY da_reaction_user_id (user_id),
50 KEY da_reaction_resource_type (resource_type),
51 UNIQUE KEY id (id)
52 ) $charset_collate;";
53
54 require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
55 dbDelta($sql);
56
57 update_option('da_reactions_db_version', $da_reactions_db_version);
58 }
59
60 if ((float)$db_version < 1.1) {
61 /// Install polls table
62 $table_name = $wpdb->prefix . 'da_polls';
63 $charset_collate = $wpdb->get_charset_collate();
64
65 $sql = "CREATE TABLE IF NOT EXISTS $table_name (
66 id mediumint(9) NOT NULL AUTO_INCREMENT,
67 resource_id mediumint(9),
68 resource_type varchar(20),
69 value varchar(32) NOT NULL,
70 user_id varchar(32),
71 created_at datetime DEFAULT NOW() NOT NULL,
72 KEY da_reaction_resource_id (resource_id),
73 KEY da_reaction_user_id (user_id),
74 KEY da_reaction_resource_type (resource_type),
75 UNIQUE KEY id (id)
76 ) $charset_collate;";
77
78 require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
79 dbDelta($sql);
80
81 update_option('da_reactions_db_version', $da_reactions_db_version);
82 }
83
84 if ((float)$db_version < 1.2) {
85 /// Install polls table
86 $table_name = $wpdb->prefix . 'da_share';
87 $charset_collate = $wpdb->get_charset_collate();
88
89 $sql = "CREATE TABLE IF NOT EXISTS $table_name (
90 id mediumint(9) NOT NULL AUTO_INCREMENT,
91 resource_id mediumint(9),
92 resource_url varchar(64),
93 social varchar(32) NOT NULL,
94 user_id varchar(32),
95 created_at datetime DEFAULT NOW() NOT NULL,
96 UNIQUE KEY id (id)
97 ) $charset_collate;";
98
99 require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
100 dbDelta($sql);
101
102 update_option('da_reactions_db_version', $da_reactions_db_version);
103 }
104
105 if ((float)$db_version < 1.3) {
106 /// Install badge threshold table
107 $table_name_thr = $wpdb->prefix . 'da_badge';
108 $charset_collate = $wpdb->get_charset_collate();
109
110 $sql = "CREATE TABLE IF NOT EXISTS $table_name_thr (
111 id mediumint(9) NOT NULL,
112 badge_descr varchar(32) NOT NULL,
113 badge_threshold mediumint(9),
114 created_at datetime DEFAULT NOW() NOT NULL,
115 UNIQUE KEY id (id)
116 ) $charset_collate;";
117
118 require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
119 dbDelta($sql);
120
121 $badgesThr = array(
122 'playmaker_bronze' => 50,
123 'playmaker_silver' => 100,
124 'playmaker_gold' => 150,
125 'guard_bronze' => 5,
126 'guard_silver' => 10,
127 'guard_gold' => 15,
128 'wing_bronze' => 20,
129 'wing_silver' => 40,
130 'wing_gold' => 60,
131 'pivot_bronze' => 30,
132 'pivot_silver' => 50,
133 'pivot_gold' => 70,
134 'cup_bronze' => 0,
135 'cup_silver' => 0,
136 'cup_gold' => 0,
137 'medal_bronze' => 0,
138 'medal_silver' => 0,
139 'medal_gold' => 0,
140 'ball_bronze' => 0,
141 'ball_silver' => 0,
142 'ball_gold' => 0
143 );
144
145 $i = 1;
146 foreach($badgesThr as $desc => $thr) {
147 $wpdb->insert($table_name_thr, array(
148 "id" => $i,
149 "badge_descr" => $desc,
150 "badge_threshold" => $thr,
151 ), array("%d", "%s", "%d"));
152 $i++;
153 }
154
155 $table_name_usr = $wpdb->prefix . 'da_badge_user';
156
157 /// Install user's badge table
158 $sql = "CREATE TABLE IF NOT EXISTS $table_name_usr (
159 badge_id mediumint(9),
160 user_id varchar(32),
161 created_at datetime DEFAULT NOW() NOT NULL,
162 UNIQUE KEY id (badge_id, user_id)
163 ) $charset_collate;";
164
165 require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
166 dbDelta($sql);
167
168 update_option('da_reactions_db_version', $da_reactions_db_version);
169 }
170}
171
172/**
173 * Regenerate statistics every (weekly) interval
174 */
175function da_reactions_auto_calculate_scores() {
176 $groups_statistics = da_reactions_generate_groups_statistics();
177 update_option('da_reactions_groups_statistics', $groups_statistics);
178 $users_statistics = da_reactions_generate_users_statistics();
179 update_option('da_reactions_users_statistics', $users_statistics);
180}
181
182
183/**
184 * @param array $schedules
185 * @return array
186 * Adds weekly interval to schedules
187 */
188function da_reactions_weekly_cron_schedule( $schedules ) {
189 $schedules[ 'weekly' ] = array(
190 'interval' => 60 * 60 * 24 * 7, # 604,800, seconds in a week
191 'display' => __( 'Weekly' )
192 );
193 return $schedules;
194}
195add_filter( 'cron_schedules', 'da_reactions_weekly_cron_schedule' );
196
197/**
198 * Runs on activation
199 */
200function da_reactions_activate() {
201 $db_version = floatval(get_option( 'da_reactions_db_version', '0' ));
202 da_reactions_install($db_version);
203
204 if (! wp_next_scheduled ( 'da_reactions_weekly' )) {
205 wp_schedule_event(strtotime('last Sunday'), 'weekly', 'da_reactions_weekly');
206 }
207}
208
209/**
210 * Runs on activation
211 */
212function da_reactions_deactivate() {
213 $timestamp = wp_next_scheduled( 'da_reactions_weekly' );
214 wp_unschedule_event( $timestamp, 'da_reactions_weekly');
215}
216
217/**
218 * Register Hook
219 */
220register_activation_hook( __FILE__, 'da_reactions_activate' );
221register_deactivation_hook( __FILE__, 'da_reactions_deactivate' );
222add_action('da_reactions_weekly', 'da_reactions_auto_calculate_scores');