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