PluginProbe ʕ •ᴥ•ʔ
Daily Prayer Time / 2026.05.04
Daily Prayer Time v2026.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 / Validator.php
daily-prayer-time-for-mosques / Models Last commit date
Hijri 3 years ago Processors 1 month ago QuranADay 2 months ago StartTime 1 year ago design 1 month ago AdminMenu.php 2 years ago AssetsLoader.php 1 year ago CustomPluginSettings.php 4 years ago DPTAjaxHandler.php 4 years ago DPTHelper.php 1 month ago DSTemplateLoader.php 2 years ago DailyShortCode.php 2 months ago DigitalScreen.php 1 month ago HijriDate.php 3 years ago Init.php 4 years ago MonthlyShortCode.php 2 years ago MonthlyTimeTable.php 3 years ago Shortcodes.php 2 months ago Translator.php 4 years ago UpdateStyles.php 1 month ago Validator.php 3 years ago db.php 2 months ago dptWidget.php 4 years ago
Validator.php
220 lines
1 <?php
2
3 class Validator
4 {
5 /** @var array */
6 private $validData = array();
7
8 /** @var array */
9 private $headers = array (
10 0 => 'd_date',
11 1 => 'fajr_begins',
12 2 => 'fajr_jamah',
13 3 => 'sunrise',
14 4 => 'zuhr_begins',
15 5 => 'zuhr_jamah',
16 6 => 'asr_mithl_1',
17 7 => 'asr_mithl_2',
18 8 => 'asr_jamah',
19 9 => 'maghrib_begins',
20 10 => 'maghrib_jamah',
21 11 => 'isha_begins',
22 12 => 'isha_jamah',
23 13 => 'is_ramadan',
24 14 => 'hijri_date',
25 );
26
27 /**
28 * @param $file
29 * @return bool
30 */
31 public function isValidNumberOfRows($file)
32 {
33 $count = count($file);
34 $count -= 1; // Remove header count
35
36 if ($count == 0 || $count > 366 ) {
37 echo "<h3 class='ui-state-error dptCenter'>Invalid number of rows. Found" . esc_html( $count ) . "days</h3>";
38 return false;
39 }
40
41 return true;
42 }
43
44 /**
45 * @param array $data [rows, containing date and each prayer times]
46 * @return bool
47 */
48 public function isValidData(array $data)
49 {
50 if (! $this->hasEmptyLines($data)) {
51 return false;
52 }
53
54 if (! $this->is24Hours($data)) {
55 return false;
56 }
57
58 $num = count($data);
59
60 for ($c=0; $c < $num - 2; $c++) { // exclude the last two columns
61 if ($c == 0) {
62 $date = $this->getDateAfterValidation($data[$c]);
63 if(! $date) {
64 echo "<h3 class='ui-state-error dptCenter'>Invalid Date format (". esc_html( $data[$c]) .")Please use one of the following:
65 <ul class='green'>
66 <li> YYYY-MM-DD <i class='smallFont'>(2023-10-20)</i></li>
67 <li> YY-MM-DD <i class='smallFont'>(23-10-20)</i></li>
68 <li> MM/DD/YYYY <i class='smallFont'>(10/20/2021)</i></li>
69 <li> DD-MM-YYYY <i class='smallFont'>(20-10-2023)</i></li>
70 <li> DD.MM.YYYY <i class='smallFont'>(13.10.2034)</i></li>
71 </ul>
72 </h3>";
73 return false;
74 } else {
75 $data[$c] = $date;
76 }
77 } else {
78 if(! $this->isValidateTimeFormat($data[$c])) {
79 echo "<h3 class='ui-state-error dptCenter'>Invalid Time format in " . esc_html( $data[$c] ) . " for " . esc_html($this->headers[$c]) .
80 " on ". esc_html($data[0]) .", valid time format is <span class='green'>HH:MM[24 hours]</span> </h3>";
81 print_r('<pre>');
82 print_r(array_combine($this->headers, $data));
83 print_r('</pre>');
84 return false;
85 }
86 }
87 }
88
89 $data = $this->sanitizeHijridate($data);
90 $this->setValidData($data);
91
92 return true;
93 }
94
95 /**
96 * @return array
97 */
98 private function sanitizeHijridate(array $data)
99 {
100 $unquote = addslashes($data[14]); // hijridate
101 $data[14] = $unquote;
102 return $data;
103 }
104
105 /**
106 * @return array
107 */
108 public function getValidData()
109 {
110 $data = array_combine($this->headers, $this->validData);
111
112 return $data;
113 }
114
115 /**
116 * @param array $header
117 * @return bool
118 */
119 public function checkHeader(array $header)
120 {
121
122 if ( count($header) != count($this->headers)) {
123 echo "<h3 class='dptCenter ui-state-error'>Do not remove any column header";
124 return false;
125 }
126 return true;
127 }
128
129 /**
130 * @param string $date
131 * @return string|bool
132 */
133 private function getDateAfterValidation($date)
134 {
135 $date = trim($date);
136 if (preg_match("/^(\d{4})-(\d{1,2})-(\d{1,2})$/", $date, $matches)) {
137 if (checkdate($matches[2], $matches[3], $matches[1])) {
138 return $date;
139 }
140 } elseif (preg_match("/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/", $date, $matches)) {
141 if (checkdate($matches[1], $matches[2], $matches[3])) {
142 $mysqlDate = date('Y-m-d', strtotime($date));
143 return $mysqlDate;
144 }
145 } elseif (preg_match("/^(\d{1,2})-(\d{1,2})-(\d{4})$/", $date, $matches)) {
146 if (checkdate($matches[2], $matches[1], $matches[3])) {
147 $mysqlDate = date('Y-m-d', strtotime($date));
148 return $mysqlDate;
149 }
150 } elseif (preg_match("/^(\d{1,2}).(\d{1,2}).(\d{4})$/", $date, $matches)) {
151 if (checkdate($matches[2], $matches[1], $matches[3])) {
152 $mysqlDate = date('Y-m-d', strtotime($date));
153 return $mysqlDate;
154 }
155 } elseif (preg_match("/^(\d{1,2})-(\d{1,2})-(\d{2})$/", $date, $matches)) {
156 if (checkdate($matches[2], $matches[1], $matches[3])) {
157 $mysqlDate = date('Y-m-d', strtotime($date));
158 return $mysqlDate;
159 }
160 }
161
162 return false;
163 }
164
165 /**
166 * @param string $time
167 * @return bool
168 */
169 private function isValidateTimeFormat($time)
170 {
171 $time = trim($time);
172 $pattern1 = "/^([0-9]|[01][0-9]|2[0-3]):[0-5][0-9]$/"; // HH:MM or H:MM
173 $pattern2 = "/^([0-9]|[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/"; // HH:MM or H:MM
174
175 if ( preg_match($pattern1, $time, $matches) || preg_match($pattern2, $time, $matches) ) {
176 return true;
177 }
178
179 return false;
180 }
181
182 /**
183 * @param string $row
184 * @return bool
185 */
186 private function is24Hours($row)
187 {
188 $afternoonPrayers = array($row[6], $row[7], $row[8], $row[9], $row[10], $row[11], $row[12]);
189 foreach($afternoonPrayers as $time) {
190 $firstPart = explode(':', $time);
191 if ($firstPart[0] !== '00' && (int)$firstPart[0] < 12) {
192 echo "<h3 class='dptCenter ui-state-error'>$time is not in 24 hour time format for date: ". esc_html( $row[0] ) ."
193 </br> You must follow 24 hours time format, valid time format is <span class='green'>HH:MM</span></h3>";
194 return false;
195 }
196 }
197
198 return true;
199 }
200
201 /**
202 * @param array $data
203 */
204 private function setValidData(array $data)
205 {
206 $this->validData = $data;
207 }
208
209 private function hasEmptyLines(array $data)
210 {
211 $data = trim($data[0]);
212 if (empty($data)) {
213 echo "<h3 class='ui-state-error dptCenter'>Please remove the empty lines between rows</h3>";
214 return false;
215 }
216
217 return true;
218 }
219 }
220