PluginProbe ʕ •ᴥ•ʔ
Daily Prayer Time / 2020.05.04
Daily Prayer Time v2020.05.04
2026.05.20 2026.05.11 2026.05.09 2026.05.05 2026.05.04 2026.05.03 2026.04.28 2026.04.28.1 trunk 2019.10.16 2019.11.19 2019.2.16 2019.3.1 2019.4.1 2019.4.5 2019.5.12 2019.5.13 2019.5.14 2019.5.19 2019.5.19.1 2019.5.21 2019.5.30 2019.5.5 2019.5.6 2019.5.7 2019.5.8 2019.5.9 2019.6.10 2019.6.2 2019.6.22 2019.7.10 2019.7.25 2019.8.1 2019.8.4 2019.9.16 2020.04.25 2020.04.26 2020.05.01 2020.05.04 2020.05.08 2020.05.17 2020.07.03 2021.01.10 2021.03.28 2021.07.20 2021.07.23 2021.07.24 2021.07.28 2021.08.01 2021.08.06 2021.08.07 2021.08.10 2021.09.12 2021.09.18 2021.09.23 2021.09.24 2021.10.01 2021.10.02 2021.10.10 2021.10.11 2021.10.15 2021.10.21 2021.10.27 2021.10.29 2022.03.24 2022.04.04 2022.04.14 2022.04.15 2022.04.21 2022.04.22 2022.05.04 2022.09.19 2022.11.14 2022.11.16 2022.12.18 2022.12.20 2023.01.27 2023.02.04 2023.02.09 2023.02.21 2023.03.08 2023.03.17 2023.03.18 2023.03.20 2023.05.04 2023.08.03 2023.08.08.16 2023.08.19 2023.08.19.1 2023.10.13 2023.10.21 2023.11.26 2023.12.28 2023.12.31 2024.03.28 2024.03.29 2024.03.30 2024.04.18 2024.04.20 2024.04.22 2024.04.26 2024.08.26 2024.09.12 2024.09.14 2024.09.17 2024.12.29 2024.12.30 2025.01.02 2025.01.17 2025.02.02 2025.03.04 2025.03.06 2025.03.08 2025.03.15 2025.03.20 2025.03.26 2025.03.27 2025.04.03 2025.06.16 2025.06.29 2025.07.15 2025.08.09 2025.10.26 2026.04.26
daily-prayer-time-for-mosques / Models / db.php
daily-prayer-time-for-mosques / Models Last commit date
Processors 6 years ago AssetsLoader.php 6 years ago DPTAjaxHandler.php 7 years ago DSTemplateLoader.php 7 years ago DailyShortCode.php 6 years ago DigitalScreen.php 6 years ago HijriDate.php 7 years ago Init.php 6 years ago MonthlyShortCode.php 7 years ago MonthlyTimeTable.php 6 years ago UpdateStyles.php 7 years ago Validator.php 7 years ago db.php 6 years ago dptWidget.php 7 years ago
db.php
276 lines
1 <?php
2
3 require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
4
5 class DatabaseConnection
6 {
7 /** @var string */
8 private $dbTable = "";
9
10 /** @var string */
11 private $tableName = "";
12
13 /** @var array */
14 private $transients = array('prayerTimeForToday', 'fajrJamahForTomorrow', 'jamahChanges', 'fajrForTomorrow');
15
16 public function __construct()
17 {
18 global $wpdb;
19
20 $this->tableName = $wpdb->prefix . "timetable";
21 $this->dbTable = "`".DB_NAME ."`.`" .$this->tableName."`";
22 $this->createTableIfNotExist();
23 }
24
25 /**
26 * @return array
27 */
28 public function getPrayerTimeForToday()
29 {
30 global $wpdb;
31
32 $today = user_current_time( 'Y-m-d' );
33 $sql = "SELECT * FROM $this->dbTable WHERE d_date = '$today' LIMIT 1";
34 $result = $wpdb->get_row($sql, ARRAY_A);
35 $result['jamah_changes'] = $this->getJamahChanges();
36
37 return $result;
38 }
39
40 public function getIqamahTimeForToday()
41 {
42 error_log('iqamah time for today');
43 $result = $this->getPrayerTimeForToday();
44 return array(
45 'fajr' => $result['fajr_jamah'],
46 'sunrise' => $result['sunrise'],
47 'zuhr' => $result['zuhr_jamah'],
48 'asr' => $result['asr_jamah'],
49 'maghrib' => $result['maghrib_jamah'],
50 'isha' => $result['isha_jamah']
51 );
52 }
53
54
55
56 /**
57 * @return array
58 */
59 public function getFajrJamahForTomorrow()
60 {
61 if (false === ( $result = $this->getTransient( 'fajrForTomorrow' )) ) {
62 error_log('fajr for tomorrow');
63 global $wpdb;
64
65 $sql = "SELECT fajr_jamah FROM $this->dbTable WHERE d_date = CURDATE() + INTERVAL 1 DAY;";
66 $row = $wpdb->get_row($sql, ARRAY_A);
67 $result = $row['fajr_jamah'];
68
69 set_transient('fajrForTomorrow', $result,DAY_IN_SECONDS );
70 }
71
72 return $result;
73 }
74
75 /**
76 * @param int $min
77 * @return array
78 */
79 public function getJamahChanges($min=null)
80 {
81 error_log('jamah chnages');
82 $xmin = get_option( 'jamah_changes' );
83 $xmin = empty($min) ? $xmin : $min;
84
85 if ( $xmin < 1) {
86 return;
87 }
88
89 global $wpdb;
90
91 $sql = "SELECT
92 abs(TIME_TO_SEC(TIMEDIFF(today.fajr_jamah, tomorrow.fajr_jamah)) / 60) as fajr_jamah,
93 abs(TIME_TO_SEC(TIMEDIFF(today.zuhr_jamah, tomorrow.zuhr_jamah)) /60) as zuhr_jamah,
94 abs(TIME_TO_SEC(TIMEDIFF(today.asr_jamah, tomorrow.asr_jamah)) /60) as asr_jamah,
95 abs(TIME_TO_SEC(TIMEDIFF(today.maghrib_jamah, tomorrow.maghrib_jamah)) /60) as maghrib_jamah,
96 abs(TIME_TO_SEC(TIMEDIFF(today.isha_jamah, tomorrow.isha_jamah)) /60) as isha_jamah
97 FROM $this->dbTable today
98 INNER JOIN $this->dbTable tomorrow
99 ON today.d_date = tomorrow.d_date + INTERVAL 1 DAY
100 WHERE today.d_date = CURDATE() + INTERVAL 1 DAY;";
101
102 $result = $wpdb->get_row($sql, ARRAY_A);
103
104 if ( empty($result) ) {
105 return null;
106 }
107
108 // get jamah name that has changes more than x min
109 $jamahNamesArray = array();
110 foreach($result as $key=>$time) {
111 if ((int)$time >= (int)$xmin) {
112 $diff = (int)$time - (int)$xmin;
113 $jamahNamesArray[$key] = $diff;
114 }
115 }
116
117 $jamahNamesString = implode(",", array_keys($jamahNamesArray));
118
119 if (empty($jamahNamesString)) {
120 return null;
121 }
122
123 $sql = "SELECT " . $jamahNamesString . "
124 FROM $this->dbTable
125 WHERE d_date = CURDATE() + INTERVAL 1 DAY;";
126
127 $result = $wpdb->get_row($sql, ARRAY_A);
128
129 return $result;
130 }
131
132 /**
133 * @param int $monthNumber
134 * @return array
135 */
136 public function getPrayerTimeForMonth($monthNumber)
137 {
138 global $wpdb;
139
140 $sql = "SELECT * FROM $this->dbTable WHERE month(d_date) = $monthNumber AND YEAR(d_date) = YEAR(CURDATE()) ORDER BY d_date ASC";
141 $result = $wpdb->get_results($sql, ARRAY_A);
142
143 return $result;
144 }
145
146 /**
147 * @return array
148 */
149 public function getPrayerTimeForRamadan()
150 {
151 global $wpdb;
152
153 $sql = "SELECT * FROM $this->dbTable WHERE is_ramadan = 1 AND YEAR(d_date) = YEAR(CURDATE()) ORDER BY d_date ASC";
154 $result = $wpdb->get_results($sql, ARRAY_A);
155
156 return $result;
157 }
158
159 /**
160 * @param array $row
161 * @return int|bool
162 */
163 public function insertRow($row)
164 {
165 $this->deleteTransients();
166
167 global $wpdb;
168
169 $createIfNotUpdate = "INSERT INTO " .$this->dbTable. " VALUES (";
170
171 foreach ($row as $key => $value) {
172 $createIfNotUpdate .= "'" .$value. "',";
173 }
174 $createIfNotUpdate = rtrim($createIfNotUpdate, ', ');
175
176 $createIfNotUpdate .= " ) ON DUPLICATE KEY UPDATE ";
177 foreach ($row as $key => $value) {
178 $createIfNotUpdate .= $key. "='" .$value. "',";
179 }
180 $createIfNotUpdate = rtrim($createIfNotUpdate, ', ');
181 $createIfNotUpdate .= ';';
182
183 return $wpdb->query($createIfNotUpdate);
184 }
185
186 private function createTableIfNotExist()
187 {
188 global $wpdb;
189
190 $charset_collate = $wpdb->get_charset_collate();
191
192 $sql = "CREATE TABLE " . $this->dbTable. "(
193 d_date date NOT NULL,
194 fajr_begins time DEFAULT '00:00',
195 fajr_jamah time DEFAULT '00:00',
196 sunrise time DEFAULT '00:00',
197 zuhr_begins time DEFAULT '00:00',
198 zuhr_jamah time DEFAULT '00:00',
199 asr_mithl_1 time DEFAULT '00:00',
200 asr_mithl_2 time DEFAULT '00:00',
201 asr_jamah time DEFAULT '00:00',
202 maghrib_begins time DEFAULT '00:00',
203 maghrib_jamah time DEFAULT '00:00',
204 isha_begins time DEFAULT '00:00',
205 isha_jamah time DEFAULT '00:00',
206 is_ramadan SMALLINT DEFAULT NULL,
207 hijri_date VARCHAR(256) DEFAULT NULL,
208 PRIMARY KEY (d_date)
209 ) $charset_collate;";
210
211 $wpdb->get_var("SHOW TABLES LIKE '". $this->tableName . "'");
212 if($wpdb->num_rows != 1) {
213 dbDelta( $sql );
214 }
215 }
216
217 public function updateRow($monthData)
218 {
219 $this->deleteTransients();
220
221 global $wpdb;
222
223 foreach ($monthData as $day) {
224 $wpdb->update(
225 $this->tableName,
226 array(
227 'fajr_jamah' => $day['fajr_jamah'],
228 'zuhr_jamah' => $day['zuhr_jamah'],
229 'asr_jamah' => $day['asr_jamah'],
230 'maghrib_jamah' => $day['maghrib_jamah'],
231 'isha_jamah' => $day['isha_jamah']
232 ),
233 array('d_date' => $day['d_date'])
234 );
235 }
236 }
237
238 public function getRows()
239 {
240 error_log('get rows');
241
242 global $wpdb;
243 $sql = "SELECT * FROM " . $this->dbTable;
244 $result = $wpdb->get_results($sql, ARRAY_A);
245 return $result;
246 }
247
248 private function getTransient($transientName)
249 {
250 if (date_i18n( 'g:ia' ) === '12:00am') {
251 delete_transient($transientName);
252 }
253
254 return get_transient($transientName);
255 }
256
257 private function deleteTransients()
258 {
259 foreach( $this->transients as $transientName ) {
260 delete_transient($transientName);
261 }
262 }
263 }
264
265
266 function user_current_time($format="")
267 {
268 $format = $format ? $format : 'mysql';
269 $result = current_time($format);
270 if (empty($result)) {
271 $result = date( $format, time() + ( get_option( 'gmt_offset' ) * 60 ) );
272 }
273
274 return $result;
275 }
276