PluginProbe
BetterLinks – Link Shortener, Link Cloaking, Redirects, Affiliate Link Manager & MCP / trunk
BetterLinks – Link Shortener, Link Cloaking, Redirects, Affiliate Link Manager & MCP vtrunk
3.1.3 3.1.2 3.1.1 3.1.0 3.0.1 3.0.0 2.4.13 2.4.12 2.4.11 2.4.10 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 All 110 releases
betterlinks / includes / Traits / Terms.php

Terms.php in BetterLinks – Link Shortener, Link Cloaking, Redirects, Affiliate Link Manager & MCP trunk, at includes/Traits/Terms.php

182 lines 7.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace BetterLinks\Traits;
3 if ( ! defined( 'ABSPATH' ) ) { exit; }
4
5 // phpcs:disable PluginCheck.Security.DirectDB, WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL
6
7 trait Terms {
8
9 public function tags_analytic( $force_refresh = false ) {
10
11 $analytic = get_option( 'btl_tags_analytics', array() );
12 if ( !$force_refresh && count( $analytic ) > 0 ) {
13 return $analytic;
14 }
15 global $wpdb;
16 $prefix = $wpdb->prefix;
17
18 $query = "SELECT t.ID AS tag_id, tr.link_id,COUNT(tr.link_id) AS total_click FROM {$prefix}betterlinks_clicks c
19 LEFT JOIN {$prefix}betterlinks_terms_relationships tr ON c.link_id=tr.link_id
20 LEFT JOIN {$prefix}betterlinks_terms t ON t.ID=tr.term_id WHERE t.term_type='tags' GROUP BY tag_id,tr.link_id;";
21 $total_clicks = $wpdb->get_results( $query, ARRAY_A );
22
23 $prepare_total_clicks = array();
24 foreach ( $total_clicks as $value ) {
25 if ( isset( $prepare_total_clicks[ $value['tag_id'] ] ) ) {
26 $prepare_total_clicks[ $value['tag_id'] ] += $value['total_click'];
27 continue;
28 }
29 $prepare_total_clicks[ $value['tag_id'] ] = $value['total_click'];
30 }
31
32 $query = "SELECT t.ID AS tag_id, COUNT(DISTINCT c.ip) AS unique_clicks FROM {$prefix}betterlinks_terms t LEFT JOIN {$prefix}betterlinks_terms_relationships tr ON t.ID=tr.term_id LEFT JOIN {$prefix}betterlinks_clicks c ON tr.link_id=c.link_id WHERE term_type='tags' GROUP BY t.ID;";
33 $unique_clicks = $wpdb->get_results( $query, ARRAY_A );
34
35 $prepare_unique_clicks = array();
36
37 foreach ( $unique_clicks as $value ) {
38 $prepare_unique_clicks[ $value['tag_id'] ] = intval( $value['unique_clicks'] );
39 }
40
41 $analytic = array(
42 'total_clicks' => $prepare_total_clicks,
43 'unique_clicks' => $prepare_unique_clicks,
44 );
45 update_option( 'btl_tags_analytics', $analytic );
46 return $analytic;
47 }
48
49 public function get_all_tags() {
50 global $wpdb;
51 $query = "SELECT t.ID, t.term_name, t.term_slug, COALESCE(tr.link_count, 0) as link_count FROM {$wpdb->prefix}betterlinks_terms AS t LEFT JOIN (SELECT term_id, COUNT(term_id) AS link_count FROM {$wpdb->prefix}betterlinks_terms_relationships GROUP BY term_id) AS tr ON t.ID=tr.term_id WHERE t.term_type='tags'";
52 return $wpdb->get_results( $query, ARRAY_A );
53 }
54
55 public function categories_analytic( $force_refresh = false ) {
56 $analytic = get_option( 'btl_categories_analytics', array() );
57 if ( !$force_refresh && count( $analytic ) > 0 ) {
58 return $analytic;
59 }
60 global $wpdb;
61 $prefix = $wpdb->prefix;
62
63 $query = "SELECT t.ID AS category_id, tr.link_id,COUNT(tr.link_id) AS total_click FROM {$prefix}betterlinks_clicks c
64 LEFT JOIN {$prefix}betterlinks_terms_relationships tr ON c.link_id=tr.link_id
65 LEFT JOIN {$prefix}betterlinks_terms t ON t.ID=tr.term_id WHERE t.term_type='category' GROUP BY category_id,tr.link_id;";
66 $total_clicks = $wpdb->get_results( $query, ARRAY_A );
67
68 $prepare_total_clicks = array();
69 foreach ( $total_clicks as $value ) {
70 if ( isset( $prepare_total_clicks[ $value['category_id'] ] ) ) {
71 $prepare_total_clicks[ $value['category_id'] ] += $value['total_click'];
72 continue;
73 }
74 $prepare_total_clicks[ $value['category_id'] ] = $value['total_click'];
75 }
76
77 $query = "SELECT t.ID AS category_id, COUNT(DISTINCT c.ip) AS unique_clicks FROM {$prefix}betterlinks_terms t LEFT JOIN {$prefix}betterlinks_terms_relationships tr ON t.ID=tr.term_id LEFT JOIN {$prefix}betterlinks_clicks c ON tr.link_id=c.link_id WHERE term_type='category' GROUP BY t.ID;";
78 $unique_clicks = $wpdb->get_results( $query, ARRAY_A );
79
80 $prepare_unique_clicks = array();
81
82 foreach ( $unique_clicks as $value ) {
83 $prepare_unique_clicks[ $value['category_id'] ] = intval( $value['unique_clicks'] );
84 }
85
86 $analytic = array(
87 'total_clicks' => $prepare_total_clicks,
88 'unique_clicks' => $prepare_unique_clicks,
89 );
90 update_option( 'btl_categories_analytics', $analytic );
91 return $analytic;
92 }
93
94 public function get_all_categories() {
95 global $wpdb;
96 $query = "SELECT t.ID, t.term_name, t.term_slug, COALESCE(tr.link_count, 0) as link_count FROM {$wpdb->prefix}betterlinks_terms AS t LEFT JOIN (SELECT term_id, COUNT(term_id) AS link_count FROM {$wpdb->prefix}betterlinks_terms_relationships GROUP BY term_id) AS tr ON t.ID=tr.term_id WHERE t.term_type='category'";
97 return $wpdb->get_results( $query, ARRAY_A );
98 }
99
100 public function get_all_terms_data( $args ) {
101 if ( isset( $args['ID'] ) ) {
102 $results = \BetterLinks\Helper::get_terms_by_link_ID_and_term_type( $args['ID'], $args['term_type'] );
103 } else {
104 $results = \BetterLinks\Helper::get_terms_all_data();
105 }
106 return $results;
107 }
108 public function create_term( $args ) {
109 $term_id = \BetterLinks\Helper::insert_term( $args );
110 if ( $term_id ) {
111 $args['ID'] = $term_id;
112 $args['lists'] = array();
113 return $args;
114 }
115 return array();
116 }
117 public function update_term( $args ) {
118 \BetterLinks\Helper::insert_term(
119 array(
120 'ID' => $args['cat_id'],
121 'term_name' => $args['cat_name'],
122 'term_slug' => $args['cat_slug'],
123 'term_type' => 'category',
124 ),
125 true
126 );
127
128 // Return the updated term data in the format expected by the frontend
129 global $wpdb;
130 $query = $wpdb->prepare(
131 "SELECT t.ID, t.term_name, t.term_slug, COALESCE(tr.link_count, 0) as link_count FROM {$wpdb->prefix}betterlinks_terms AS t LEFT JOIN (SELECT term_id, COUNT(term_id) AS link_count FROM {$wpdb->prefix}betterlinks_terms_relationships GROUP BY term_id) AS tr ON t.ID=tr.term_id WHERE t.ID=%d AND t.term_type='category'",
132 $args['cat_id']
133 );
134 $updated_term = $wpdb->get_row( $query, ARRAY_A );
135
136 return $updated_term ?: $args;
137 }
138 public function update_tag( $args ) {
139 \BetterLinks\Helper::insert_term(
140 array(
141 'ID' => $args['ID'],
142 'term_name' => $args['term_name'],
143 'term_slug' => $args['term_slug'],
144 'term_type' => 'tags',
145 ),
146 true
147 );
148
149 // Return the updated tag data in the format expected by the frontend
150 global $wpdb;
151 $query = $wpdb->prepare(
152 "SELECT t.ID, t.term_name, t.term_slug, COALESCE(tr.link_count, 0) as link_count FROM {$wpdb->prefix}betterlinks_terms AS t LEFT JOIN (SELECT term_id, COUNT(term_id) AS link_count FROM {$wpdb->prefix}betterlinks_terms_relationships GROUP BY term_id) AS tr ON t.ID=tr.term_id WHERE t.ID=%d AND t.term_type='tags'",
153 $args['ID']
154 );
155 $updated_tag = $wpdb->get_row( $query, ARRAY_A );
156
157 return $updated_tag ?: $args;
158 }
159 public function delete_term( $args ) {
160 /**
161 * Term IDs that can never be deleted/renamed. Defaults to the built-in
162 * "Uncategorized" category (ID 1); extensions (e.g. the Pro "Link in Bio"
163 * category) add their own protected IDs here.
164 *
165 * Checked against BOTH `cat_id` and `tag_id` on purpose. Categories and tags
166 * share one table so an ID identifies a term regardless of which parameter
167 * carried it, and the admin UI posts `tag_id` from the Categories tab too —
168 * dropping the check on that branch would make protected categories deletable.
169 *
170 * @param int[] $ids
171 */
172 $protected = (array) apply_filters( 'betterlinks/protected_term_ids', array( 1 ) );
173
174 if ( isset( $args['cat_id'] ) && '' !== $args['cat_id'] && ! in_array( (int) $args['cat_id'], array_map( 'intval', $protected ), true ) ) {
175 \BetterLinks\Helper::delete_term_and_update_term_relationships( $args['cat_id'] );
176 }
177 if ( isset( $args['tag_id'] ) && '' !== $args['tag_id'] && ! in_array( (int) $args['tag_id'], array_map( 'intval', $protected ), true ) ) {
178 \BetterLinks\Helper::delete_term_and_update_term_relationships( $args['tag_id'] );
179 }
180 }
181 }
182