Version Description
(2021-03-08) = Added - The total import time is now recorded in the debug log.
Changed - Omitting dev files from the plugin, reducing its size. - Redesigned the "More Features" page. - Feed items link to the original article when shown without a template and in RSS feeds. - Allocating more PHP execution time for image downloads.
Fixed - Images with HTML entities in the URL resulted in broken images and missing featured images. - The code that checks when a feed is saved no longer runs unnecessarily. - Fixed styling issues with the "Save" button in the Templates edit page. - The max title length option in the "Default" template was being applied in the "Feed Items" page.
Download this release
Release Info
Developer | Mekku |
Plugin | WP RSS Aggregator |
Version | 4.18 |
Comparing to | |
See all releases |
Code changes from version 4.17.10 to 4.18
- css/admin-styles.css +1289 -1262
- css/build/templates.min.css +1 -1
- css/templates/list/styles.css +10 -0
- includes/admin-heartbeat.php +53 -77
- includes/cron-jobs.php +384 -361
- includes/feed-importing-images.php +13 -1
- includes/feed-importing-new.php +407 -0
- includes/feed-importing.php +949 -932
- includes/functions.php +28 -0
- includes/legacy-feed-display.php +18 -11
- includes/misc-functions.php +20 -0
- includes/multimedia.php +60 -0
- includes/roles-capabilities.php +45 -7
- includes/system-info.php +3 -27
- js/build/templates.min.js +1 -1
- js/heartbeat.js +3 -0
- readme.txt +43 -26
- src/Container/ModuleContainer.php +14 -5
- src/Handlers/FeedSources/FeedSourceSaveMetaHandler.php +23 -10
- src/Modules/FeedItemsModule.php +16 -1
- src/Modules/FeedSourcesModule.php +2 -1
- src/Modules/FeedTemplatesModule.php +11 -0
- src/Query/DbQuery.php +31 -0
- src/Templates/Feeds/Types/ListTemplateType.php +4 -0
- src/Twig/Extensions/WpraExtension.php +14 -1
- templates/admin/upsell/more-features-page/main.twig +58 -0
- templates/feeds/_parts/audio-player.twig +11 -0
- templates/feeds/list/feed-item.twig +2 -0
- vendor/composer/ClassLoader.php +34 -2
- vendor/composer/InstalledVersions.php +647 -0
- vendor/composer/autoload_classmap.php +2 -1
- vendor/composer/autoload_real.php +4 -2
- vendor/composer/autoload_static.php +2 -1
- vendor/composer/installed.json +1993 -1947
- vendor/composer/installed.php +387 -0
- vendor/composer/platform_check.php +26 -0
- vendor/rebelcode/composer-cleanup-plugin/composer.json +5 -2
- vendor/rebelcode/composer-cleanup-plugin/src/CleanupPlugin.php +34 -30
- wp-rss-aggregator.php +5 -2
css/admin-styles.css
CHANGED
@@ -1,1262 +1,1289 @@
|
|
1 |
-
body.post-type-wprss_feed q {
|
2 |
-
font-style: italic;
|
3 |
-
}
|
4 |
-
body.post-type-wprss_feed q:before {
|
5 |
-
content: '"';
|
6 |
-
}
|
7 |
-
body.post-type-wprss_feed q:after {
|
8 |
-
content: '"';
|
9 |
-
}
|
10 |
-
|
11 |
-
span.wp-rss-footer-text {
|
12 |
-
font-style: italic;
|
13 |
-
}
|
14 |
-
|
15 |
-
.wprss-input {
|
16 |
-
background: none repeat scroll 0 0 #EAF2FA;
|
17 |
-
margin-bottom: 20px;
|
18 |
-
padding-bottom: 10px;
|
19 |
-
padding-left: 10px;
|
20 |
-
padding-top: 10px;
|
21 |
-
width: 600px;
|
22 |
-
}
|
23 |
-
|
24 |
-
.wprss-input p { line-height: 28px; }
|
25 |
-
|
26 |
-
.wprss-input label {
|
27 |
-
float: left;
|
28 |
-
width: 95px !important;
|
29 |
-
}
|
30 |
-
|
31 |
-
.wprss-input input {
|
32 |
-
height: 28px;
|
33 |
-
margin-bottom: 0;
|
34 |
-
padding: 0 0 0 5px;
|
35 |
-
width: 400px;
|
36 |
-
}
|
37 |
-
|
38 |
-
.wprss-text-input {
|
39 |
-
display: inline-block;
|
40 |
-
width: 400px;
|
41 |
-
max-width: 100%;
|
42 |
-
}
|
43 |
-
|
44 |
-
label.description {
|
45 |
-
font-size: 13px;
|
46 |
-
font-style: italic;
|
47 |
-
}
|
48 |
-
|
49 |
-
span.wprss-row-id {
|
50 |
-
color: #8f8f8f;
|
51 |
-
}
|
52 |
-
|
53 |
-
#icon-wprss-aggregator {
|
54 |
-
background: transparent url( '../images/icon-adminpage32.png' ) no-repeat !important;
|
55 |
-
}
|
56 |
-
|
57 |
-
body.post-type-wprss_feed #titlediv div.inside { display: none !important; }
|
58 |
-
|
59 |
-
#misc-publishing-actions,
|
60 |
-
#minor-publishing-actions { display: none; }
|
61 |
-
|
62 |
-
div#force-feed-container {
|
63 |
-
border-top: 1px solid #ddd;
|
64 |
-
}
|
65 |
-
|
66 |
-
|
67 |
-
/* FORM TABLES */
|
68 |
-
.wprss-form-table th {
|
69 |
-
width:
|
70 |
-
max-width:
|
71 |
-
padding:
|
72 |
-
}
|
73 |
-
.wprss-form-table
|
74 |
-
padding: 7px
|
75 |
-
}
|
76 |
-
.wprss-form-table td
|
77 |
-
|
78 |
-
}
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
body.post-type-wprss_feed_item
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
#
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
input#
|
171 |
-
input#wprss-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
#wprss-clear-error-log-form
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
}
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
}
|
351 |
-
/* Log table:
|
352 |
-
div.wpra-log-container > table > tbody > tr
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
}
|
373 |
-
div.wpra-log-container > table > tbody > tr > td.wpra-log-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
width:
|
379 |
-
}
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
}
|
470 |
-
.wprss-indicator-
|
471 |
-
color: #
|
472 |
-
}
|
473 |
-
.wprss-indicator-
|
474 |
-
color: #
|
475 |
-
}
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
div.wprss-meta-side-setting > p
|
507 |
-
|
508 |
-
}
|
509 |
-
div.wprss-meta-side-setting
|
510 |
-
vertical-align:
|
511 |
-
}
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
body.post-type-wprss_feed.edit-php table.wp-list-table.posts
|
545 |
-
|
546 |
-
}
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
body.post-type-wprss_feed_item.edit-php table.wp-list-table.posts
|
562 |
-
width:
|
563 |
-
}
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
body.post-type-wprss_feed.edit-php table.wp-list-table.posts thead th#
|
570 |
-
body.post-type-wprss_feed.edit-php table.wp-list-table.posts tfoot th.column-
|
571 |
-
body.post-type-wprss_feed.edit-php table.wp-list-table.posts tbody td.column-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
body.post-type-wprss_feed_item.edit-php table.wp-list-table.posts thead th#
|
621 |
-
width:
|
622 |
-
}
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
|
709 |
-
|
710 |
-
|
711 |
-
|
712 |
-
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
|
717 |
-
|
718 |
-
|
719 |
-
|
720 |
-
|
721 |
-
|
722 |
-
|
723 |
-
|
724 |
-
|
725 |
-
|
726 |
-
|
727 |
-
|
728 |
-
|
729 |
-
|
730 |
-
|
731 |
-
|
732 |
-
|
733 |
-
|
734 |
-
|
735 |
-
|
736 |
-
|
737 |
-
|
738 |
-
|
739 |
-
|
740 |
-
|
741 |
-
|
742 |
-
|
743 |
-
|
744 |
-
|
745 |
-
|
746 |
-
|
747 |
-
|
748 |
-
|
749 |
-
|
750 |
-
|
751 |
-
|
752 |
-
.
|
753 |
-
.
|
754 |
-
|
755 |
-
|
756 |
-
|
757 |
-
|
758 |
-
|
759 |
-
|
760 |
-
.
|
761 |
-
|
762 |
-
|
763 |
-
|
764 |
-
|
765 |
-
|
766 |
-
|
767 |
-
|
768 |
-
|
769 |
-
}
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
-
|
775 |
-
|
776 |
-
|
777 |
-
|
778 |
-
|
779 |
-
|
780 |
-
|
781 |
-
|
782 |
-
|
783 |
-
|
784 |
-
|
785 |
-
|
786 |
-
|
787 |
-
|
788 |
-
|
789 |
-
|
790 |
-
.wprss-
|
791 |
-
|
792 |
-
|
793 |
-
|
794 |
-
|
795 |
-
}
|
796 |
-
|
797 |
-
|
798 |
-
|
799 |
-
|
800 |
-
|
801 |
-
|
802 |
-
|
803 |
-
|
804 |
-
.wprss-
|
805 |
-
|
806 |
-
|
807 |
-
|
808 |
-
|
809 |
-
|
810 |
-
|
811 |
-
|
812 |
-
|
813 |
-
|
814 |
-
|
815 |
-
|
816 |
-
|
817 |
-
|
818 |
-
|
819 |
-
|
820 |
-
|
821 |
-
|
822 |
-
|
823 |
-
|
824 |
-
|
825 |
-
|
826 |
-
|
827 |
-
|
828 |
-
|
829 |
-
|
830 |
-
|
831 |
-
|
832 |
-
|
833 |
-
|
834 |
-
|
835 |
-
|
836 |
-
|
837 |
-
|
838 |
-
|
839 |
-
|
840 |
-
|
841 |
-
|
842 |
-
|
843 |
-
|
844 |
-
|
845 |
-
|
846 |
-
|
847 |
-
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
-
|
858 |
-
|
859 |
-
|
860 |
-
|
861 |
-
|
862 |
-
|
863 |
-
|
864 |
-
|
865 |
-
body.wprss_feed_page_wprss-aggregator-settings
|
866 |
-
|
867 |
-
|
868 |
-
}
|
869 |
-
|
870 |
-
body.wprss_feed_page_wprss-aggregator-settings
|
871 |
-
|
872 |
-
|
873 |
-
|
874 |
-
|
875 |
-
|
876 |
-
|
877 |
-
|
878 |
-
|
879 |
-
|
880 |
-
@media only screen and (max-width:
|
881 |
-
|
882 |
-
|
883 |
-
|
884 |
-
|
885 |
-
|
886 |
-
|
887 |
-
|
888 |
-
|
889 |
-
|
890 |
-
|
891 |
-
|
892 |
-
|
893 |
-
|
894 |
-
|
895 |
-
|
896 |
-
|
897 |
-
|
898 |
-
|
899 |
-
|
900 |
-
|
901 |
-
|
902 |
-
}
|
903 |
-
|
904 |
-
|
905 |
-
|
906 |
-
|
907 |
-
|
908 |
-
|
909 |
-
|
910 |
-
}
|
911 |
-
|
912 |
-
|
913 |
-
|
914 |
-
|
915 |
-
|
916 |
-
|
917 |
-
|
918 |
-
|
919 |
-
|
920 |
-
|
921 |
-
|
922 |
-
|
923 |
-
|
924 |
-
|
925 |
-
|
926 |
-
|
927 |
-
|
928 |
-
|
929 |
-
|
930 |
-
|
931 |
-
|
932 |
-
|
933 |
-
|
934 |
-
|
935 |
-
|
936 |
-
|
937 |
-
|
938 |
-
|
939 |
-
.
|
940 |
-
|
941 |
-
|
942 |
-
|
943 |
-
|
944 |
-
|
945 |
-
|
946 |
-
|
947 |
-
|
948 |
-
|
949 |
-
|
950 |
-
|
951 |
-
|
952 |
-
|
953 |
-
|
954 |
-
|
955 |
-
|
956 |
-
|
957 |
-
|
958 |
-
}
|
959 |
-
|
960 |
-
|
961 |
-
|
962 |
-
|
963 |
-
|
964 |
-
|
965 |
-
.post-type-wprss_feed table.wp-list-table.posts tbody tr
|
966 |
-
|
967 |
-
|
968 |
-
|
969 |
-
|
970 |
-
|
971 |
-
|
972 |
-
|
973 |
-
|
974 |
-
|
975 |
-
|
976 |
-
|
977 |
-
|
978 |
-
50
|
979 |
-
|
980 |
-
|
981 |
-
|
982 |
-
|
983 |
-
|
984 |
-
|
985 |
-
|
986 |
-
|
987 |
-
|
988 |
-
|
989 |
-
|
990 |
-
|
991 |
-
|
992 |
-
|
993 |
-
|
994 |
-
|
995 |
-
|
996 |
-
|
997 |
-
|
998 |
-
|
999 |
-
|
1000 |
-
|
1001 |
-
|
1002 |
-
|
1003 |
-
|
1004 |
-
|
1005 |
-
|
1006 |
-
|
1007 |
-
|
1008 |
-
|
1009 |
-
|
1010 |
-
}
|
1011 |
-
|
1012 |
-
|
1013 |
-
|
1014 |
-
|
1015 |
-
|
1016 |
-
.
|
1017 |
-
|
1018 |
-
|
1019 |
-
|
1020 |
-
|
1021 |
-
|
1022 |
-
|
1023 |
-
|
1024 |
-
|
1025 |
-
|
1026 |
-
/*
|
1027 |
-
.post-type-wprss_feed table.wp-list-table
|
1028 |
-
color: #
|
1029 |
-
|
1030 |
-
|
1031 |
-
|
1032 |
-
|
1033 |
-
|
1034 |
-
|
1035 |
-
|
1036 |
-
|
1037 |
-
}
|
1038 |
-
|
1039 |
-
|
1040 |
-
|
1041 |
-
}
|
1042 |
-
|
1043 |
-
|
1044 |
-
|
1045 |
-
|
1046 |
-
|
1047 |
-
|
1048 |
-
|
1049 |
-
.post-type-wprss_feed table.wp-list-table.posts .
|
1050 |
-
|
1051 |
-
}
|
1052 |
-
|
1053 |
-
|
1054 |
-
|
1055 |
-
|
1056 |
-
|
1057 |
-
|
1058 |
-
|
1059 |
-
|
1060 |
-
|
1061 |
-
.post-type-wprss_feed table.wp-list-table.posts
|
1062 |
-
|
1063 |
-
|
1064 |
-
}
|
1065 |
-
|
1066 |
-
|
1067 |
-
|
1068 |
-
|
1069 |
-
|
1070 |
-
|
1071 |
-
|
1072 |
-
|
1073 |
-
|
1074 |
-
|
1075 |
-
|
1076 |
-
|
1077 |
-
|
1078 |
-
|
1079 |
-
|
1080 |
-
|
1081 |
-
|
1082 |
-
|
1083 |
-
|
1084 |
-
|
1085 |
-
|
1086 |
-
|
1087 |
-
|
1088 |
-
|
1089 |
-
|
1090 |
-
|
1091 |
-
}
|
1092 |
-
|
1093 |
-
|
1094 |
-
|
1095 |
-
|
1096 |
-
|
1097 |
-
|
1098 |
-
|
1099 |
-
|
1100 |
-
|
1101 |
-
|
1102 |
-
|
1103 |
-
|
1104 |
-
|
1105 |
-
|
1106 |
-
}
|
1107 |
-
|
1108 |
-
|
1109 |
-
|
1110 |
-
|
1111 |
-
|
1112 |
-
|
1113 |
-
|
1114 |
-
|
1115 |
-
|
1116 |
-
|
1117 |
-
|
1118 |
-
|
1119 |
-
|
1120 |
-
|
1121 |
-
|
1122 |
-
|
1123 |
-
|
1124 |
-
|
1125 |
-
|
1126 |
-
|
1127 |
-
|
1128 |
-
|
1129 |
-
|
1130 |
-
|
1131 |
-
|
1132 |
-
|
1133 |
-
|
1134 |
-
|
1135 |
-
|
1136 |
-
|
1137 |
-
|
1138 |
-
|
1139 |
-
|
1140 |
-
|
1141 |
-
|
1142 |
-
|
1143 |
-
|
1144 |
-
border:
|
1145 |
-
|
1146 |
-
|
1147 |
-
|
1148 |
-
|
1149 |
-
|
1150 |
-
|
1151 |
-
|
1152 |
-
|
1153 |
-
|
1154 |
-
|
1155 |
-
|
1156 |
-
|
1157 |
-
|
1158 |
-
|
1159 |
-
|
1160 |
-
|
1161 |
-
|
1162 |
-
|
1163 |
-
|
1164 |
-
|
1165 |
-
|
1166 |
-
|
1167 |
-
|
1168 |
-
|
1169 |
-
|
1170 |
-
|
1171 |
-
|
1172 |
-
|
1173 |
-
|
1174 |
-
|
1175 |
-
|
1176 |
-
|
1177 |
-
|
1178 |
-
|
1179 |
-
|
1180 |
-
|
1181 |
-
|
1182 |
-
|
1183 |
-
|
1184 |
-
|
1185 |
-
|
1186 |
-
|
1187 |
-
}
|
1188 |
-
|
1189 |
-
|
1190 |
-
|
1191 |
-
|
1192 |
-
|
1193 |
-
|
1194 |
-
|
1195 |
-
|
1196 |
-
|
1197 |
-
|
1198 |
-
|
1199 |
-
|
1200 |
-
|
1201 |
-
|
1202 |
-
|
1203 |
-
|
1204 |
-
|
1205 |
-
|
1206 |
-
|
1207 |
-
|
1208 |
-
div.wpra-slide-box
|
1209 |
-
|
1210 |
-
|
1211 |
-
|
1212 |
-
|
1213 |
-
|
1214 |
-
}
|
1215 |
-
|
1216 |
-
div.wpra-slide-box
|
1217 |
-
|
1218 |
-
|
1219 |
-
|
1220 |
-
|
1221 |
-
|
1222 |
-
|
1223 |
-
|
1224 |
-
|
1225 |
-
|
1226 |
-
|
1227 |
-
|
1228 |
-
|
1229 |
-
|
1230 |
-
|
1231 |
-
|
1232 |
-
|
1233 |
-
|
1234 |
-
|
1235 |
-
|
1236 |
-
|
1237 |
-
|
1238 |
-
|
1239 |
-
|
1240 |
-
|
1241 |
-
|
1242 |
-
|
1243 |
-
|
1244 |
-
|
1245 |
-
|
1246 |
-
|
1247 |
-
|
1248 |
-
|
1249 |
-
|
1250 |
-
|
1251 |
-
|
1252 |
-
|
1253 |
-
|
1254 |
-
|
1255 |
-
|
1256 |
-
|
1257 |
-
|
1258 |
-
|
1259 |
-
|
1260 |
-
|
1261 |
-
|
1262 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
body.post-type-wprss_feed q {
|
2 |
+
font-style: italic;
|
3 |
+
}
|
4 |
+
body.post-type-wprss_feed q:before {
|
5 |
+
content: '"';
|
6 |
+
}
|
7 |
+
body.post-type-wprss_feed q:after {
|
8 |
+
content: '"';
|
9 |
+
}
|
10 |
+
|
11 |
+
span.wp-rss-footer-text {
|
12 |
+
font-style: italic;
|
13 |
+
}
|
14 |
+
|
15 |
+
.wprss-input {
|
16 |
+
background: none repeat scroll 0 0 #EAF2FA;
|
17 |
+
margin-bottom: 20px;
|
18 |
+
padding-bottom: 10px;
|
19 |
+
padding-left: 10px;
|
20 |
+
padding-top: 10px;
|
21 |
+
width: 600px;
|
22 |
+
}
|
23 |
+
|
24 |
+
.wprss-input p { line-height: 28px; }
|
25 |
+
|
26 |
+
.wprss-input label {
|
27 |
+
float: left;
|
28 |
+
width: 95px !important;
|
29 |
+
}
|
30 |
+
|
31 |
+
.wprss-input input {
|
32 |
+
height: 28px;
|
33 |
+
margin-bottom: 0;
|
34 |
+
padding: 0 0 0 5px;
|
35 |
+
width: 400px;
|
36 |
+
}
|
37 |
+
|
38 |
+
.wprss-text-input {
|
39 |
+
display: inline-block;
|
40 |
+
width: 400px;
|
41 |
+
max-width: 100%;
|
42 |
+
}
|
43 |
+
|
44 |
+
label.description {
|
45 |
+
font-size: 13px;
|
46 |
+
font-style: italic;
|
47 |
+
}
|
48 |
+
|
49 |
+
span.wprss-row-id {
|
50 |
+
color: #8f8f8f;
|
51 |
+
}
|
52 |
+
|
53 |
+
#icon-wprss-aggregator {
|
54 |
+
background: transparent url( '../images/icon-adminpage32.png' ) no-repeat !important;
|
55 |
+
}
|
56 |
+
|
57 |
+
body.post-type-wprss_feed #titlediv div.inside { display: none !important; }
|
58 |
+
|
59 |
+
#misc-publishing-actions,
|
60 |
+
#minor-publishing-actions { display: none; }
|
61 |
+
|
62 |
+
div#force-feed-container {
|
63 |
+
border-top: 1px solid #ddd;
|
64 |
+
}
|
65 |
+
|
66 |
+
|
67 |
+
/* FORM TABLES */
|
68 |
+
.wprss-form-table th {
|
69 |
+
width: 160px;
|
70 |
+
max-width: 200px;
|
71 |
+
padding: 10px;
|
72 |
+
}
|
73 |
+
.wprss-form-table th label {
|
74 |
+
padding-top: 7px;
|
75 |
+
}
|
76 |
+
.wprss-form-table td {
|
77 |
+
padding: 8px 10px;
|
78 |
+
}
|
79 |
+
.wprss-form-table td label {
|
80 |
+
line-height: 15px;
|
81 |
+
}
|
82 |
+
@media screen and (max-width: 1025px) {
|
83 |
+
.wprss-form-table th {
|
84 |
+
display: block;
|
85 |
+
padding: 0;
|
86 |
+
}
|
87 |
+
.wprss-form-table td {
|
88 |
+
display: block;
|
89 |
+
padding-left: 0;
|
90 |
+
padding-right: 0;
|
91 |
+
}
|
92 |
+
|
93 |
+
.wprss-form-table td input[type="text"],
|
94 |
+
.wprss-form-table td input[type="url"],
|
95 |
+
.wprss-form-table td select {
|
96 |
+
display: block;
|
97 |
+
width: 100%;
|
98 |
+
}
|
99 |
+
|
100 |
+
.wprss-form-table td span.description {
|
101 |
+
display: inline;
|
102 |
+
}
|
103 |
+
|
104 |
+
.wprss-form-table td input[type="checkbox"] + label {
|
105 |
+
display: inline !important;
|
106 |
+
}
|
107 |
+
|
108 |
+
.wprss-form-table td input {
|
109 |
+
line-height: normal;
|
110 |
+
}
|
111 |
+
}
|
112 |
+
|
113 |
+
|
114 |
+
|
115 |
+
body.post-type-wprss_feed_item .add-new-h2,
|
116 |
+
body.post-type-wprss_feed_item .tablenav select[name="m"],
|
117 |
+
body.post-type-wprss_feed_item #post-query-submit
|
118 |
+
{ display: none; }
|
119 |
+
|
120 |
+
body.post-type-wprss_feed_item a.row-title {
|
121 |
+
cursor: default;
|
122 |
+
font-weight: normal;
|
123 |
+
color: #555;
|
124 |
+
}
|
125 |
+
|
126 |
+
#latest-news-cpac-settings li {
|
127 |
+
list-style: none;
|
128 |
+
line-height: 16px;
|
129 |
+
}
|
130 |
+
|
131 |
+
li.twitter a {
|
132 |
+
background: transparent url('../images/twitter.png') no-repeat 0;
|
133 |
+
padding-left: 20px;
|
134 |
+
}
|
135 |
+
|
136 |
+
li.facebook a {
|
137 |
+
background: transparent url('../images/facebook.png') no-repeat 0;
|
138 |
+
padding-left: 20px;
|
139 |
+
}
|
140 |
+
|
141 |
+
li.donate_link a:hover {
|
142 |
+
color: darkGreen;
|
143 |
+
}
|
144 |
+
|
145 |
+
#preview_meta_box ul {
|
146 |
+
list-style: disc;
|
147 |
+
margin-left: 16px;
|
148 |
+
}
|
149 |
+
|
150 |
+
#preview_meta_box .invalid-feed-url {
|
151 |
+
color: red;
|
152 |
+
}
|
153 |
+
|
154 |
+
#preview_meta_box .rss-date {
|
155 |
+
color: #666;
|
156 |
+
|
157 |
+
}
|
158 |
+
|
159 |
+
/*.rss-aggregator_page_wprss-aggregator-settings .form-table th { width: 80px; }*/
|
160 |
+
|
161 |
+
|
162 |
+
/* For excerpts and thumbnails admin screens
|
163 |
+
.wprss_feed_page_wprss-aggregator-settings input,
|
164 |
+
.wprss_feed_page_wprss-aggregator-settings input[type="checkbox"],
|
165 |
+
.wprss_feed_page_wprss-aggregator-settings input[type="radio"] {
|
166 |
+
margin-right: 8px;
|
167 |
+
}
|
168 |
+
*/
|
169 |
+
|
170 |
+
input#default-thumbnail,
|
171 |
+
input#wprss-et-license-key,
|
172 |
+
input#wprss-c-license-key,
|
173 |
+
input#wprss-kf-license-key,
|
174 |
+
input#wprss-ftp-license-key {
|
175 |
+
width: 300px;
|
176 |
+
}
|
177 |
+
|
178 |
+
input#thumbnails-height,
|
179 |
+
input#thumbnails-width {
|
180 |
+
/*width: 29px;*/
|
181 |
+
}
|
182 |
+
|
183 |
+
|
184 |
+
/* Red Button */
|
185 |
+
|
186 |
+
.wp-core-ui .button-red {
|
187 |
+
background: #BD2B2B;
|
188 |
+
border-color: transparent;
|
189 |
+
color: #fff;
|
190 |
+
text-decoration: none;
|
191 |
+
text-shadow: none;
|
192 |
+
}
|
193 |
+
|
194 |
+
.wp-core-ui .button-red.hover,
|
195 |
+
.wp-core-ui .button-red:hover {
|
196 |
+
color: #fff;
|
197 |
+
border-color: transparent;
|
198 |
+
background-color: #AC0F0F;
|
199 |
+
}
|
200 |
+
|
201 |
+
.wp-core-ui .button-red.focus,
|
202 |
+
.wp-core-ui .button-red:focus {
|
203 |
+
color: #fff;
|
204 |
+
background-color: #AC0F0F;
|
205 |
+
border-color: transparent;
|
206 |
+
box-shadow: 0 0 0 1px #fff,0 0 0 3px #AC0F0F;
|
207 |
+
}
|
208 |
+
|
209 |
+
.wp-core-ui .button-red.active,
|
210 |
+
.wp-core-ui .button-red:active {
|
211 |
+
color: #fff;
|
212 |
+
background-color: #A20909;
|
213 |
+
border-color: transparent;
|
214 |
+
}
|
215 |
+
|
216 |
+
.wp-core-ui .button-red[disabled],
|
217 |
+
.wp-core-ui .button-red:disabled,
|
218 |
+
.wp-core-ui .button-red-disabled {
|
219 |
+
color: #fba6a8 !important;
|
220 |
+
background: #DD383A !important;
|
221 |
+
box-shadow: 0 0 0 transparent !important;
|
222 |
+
border-color: transparent !important;
|
223 |
+
text-shadow: 0 0 0 transparent !important;
|
224 |
+
}
|
225 |
+
|
226 |
+
#wpra-system-info-textarea,
|
227 |
+
#wprss-error-log-textarea {
|
228 |
+
width: 800px;
|
229 |
+
height: 400px;
|
230 |
+
font-family: Menlo, Monaco, monospace;
|
231 |
+
white-space: pre;
|
232 |
+
overflow: auto;
|
233 |
+
display: block;
|
234 |
+
}
|
235 |
+
|
236 |
+
#wpra-system-info-textarea {
|
237 |
+
display: block;
|
238 |
+
width: 100%;
|
239 |
+
height: 600px;
|
240 |
+
font-family: Menlo, Monaco, monospace;
|
241 |
+
white-space: pre;
|
242 |
+
overflow: auto;
|
243 |
+
}
|
244 |
+
|
245 |
+
.wprss-error-log-action {
|
246 |
+
display: inline-block;
|
247 |
+
}
|
248 |
+
|
249 |
+
#wprss-clear-error-log-form {
|
250 |
+
display: inline-block;
|
251 |
+
}
|
252 |
+
#wprss-clear-error-log-form,
|
253 |
+
#wprss-clear-error-log-form > button {
|
254 |
+
vertical-align: baseline;
|
255 |
+
}
|
256 |
+
|
257 |
+
form.wprss-error-log-action input[type="submit"]:active {
|
258 |
+
vertical-align: baseline;
|
259 |
+
}
|
260 |
+
/* The debug log root element */
|
261 |
+
div.wpra-log {
|
262 |
+
display: block;
|
263 |
+
position: relative;
|
264 |
+
width: 100%;
|
265 |
+
}
|
266 |
+
|
267 |
+
/* The "Filters" label */
|
268 |
+
div.wpra-log > p > strong:first-child {
|
269 |
+
text-decoration: underline;
|
270 |
+
margin-right: 10px;
|
271 |
+
}
|
272 |
+
|
273 |
+
/* The debug log filters separator */
|
274 |
+
div.wpra-log .wpra-toggle-logs:not(:last-of-type)::after {
|
275 |
+
content: ' | ';
|
276 |
+
color: #3c3c3c;
|
277 |
+
pointer-events: none;
|
278 |
+
}
|
279 |
+
/* The debug log filters */
|
280 |
+
div.wpra-log .wpra-toggle-logs a {
|
281 |
+
text-decoration: none;
|
282 |
+
outline: none;
|
283 |
+
box-shadow: 0 0 transparent;
|
284 |
+
}
|
285 |
+
/* The debug log filters when not selected */
|
286 |
+
div.wpra-log .wpra-toggle-logs:not(.wpra-selected):not(.wpra-log-filter-disabled) a {
|
287 |
+
color: #626262;
|
288 |
+
}
|
289 |
+
/* The debug log filters when selected */
|
290 |
+
div.wpra-log .wpra-toggle-logs.wpra-selected:not(.wpra-log-filter-disabled) a {
|
291 |
+
font-weight: bold;
|
292 |
+
}
|
293 |
+
|
294 |
+
/* The debug log "error" filter text color when there are errors */
|
295 |
+
div.wpra-log .wpra-toggle-logs.wpra-selected[data-level="error"]:not(.wpra-log-filter-disabled) a {
|
296 |
+
color: #d40000;
|
297 |
+
}
|
298 |
+
/* The debug log "warning" filter text color when there are warnings */
|
299 |
+
div.wpra-log .wpra-toggle-logs.wpra-selected[data-level="warning"]:not(.wpra-log-filter-disabled) a {
|
300 |
+
color: #d45500;
|
301 |
+
}
|
302 |
+
/* The debug log "notice" filter text color when there are notices */
|
303 |
+
div.wpra-log .wpra-toggle-logs.wpra-selected[data-level="notice"]:not(.wpra-log-filter-disabled) a {
|
304 |
+
color: #d48a00;
|
305 |
+
}
|
306 |
+
/* The debug log "info" filter text color when there are info logs */
|
307 |
+
div.wpra-log .wpra-toggle-logs.wpra-selected[data-level="info"]:not(.wpra-log-filter-disabled) a {
|
308 |
+
color: #009cd6;
|
309 |
+
}
|
310 |
+
/* The debug log "debug" filter text color when there are debug logs */
|
311 |
+
div.wpra-log .wpra-toggle-logs.wpra-selected[data-level="debug"]:not(.wpra-log-filter-disabled) a {
|
312 |
+
color: #8242d4;
|
313 |
+
}
|
314 |
+
|
315 |
+
/* Disabled debug log filters */
|
316 |
+
div.wpra-log .wpra-toggle-logs.wpra-log-filter-disabled a {
|
317 |
+
color: #8b8b8b !important;
|
318 |
+
font-style: italic;
|
319 |
+
text-decoration: none;
|
320 |
+
cursor: not-allowed;
|
321 |
+
}
|
322 |
+
|
323 |
+
/* The debug log */
|
324 |
+
div.wpra-log-container {
|
325 |
+
width: 100%;
|
326 |
+
max-height: 600px;
|
327 |
+
border: 1px solid #d1d1d1;
|
328 |
+
padding: 5px;
|
329 |
+
margin-bottom: 15px;
|
330 |
+
overflow: auto;
|
331 |
+
background: #222833;
|
332 |
+
}
|
333 |
+
|
334 |
+
/* The debug log & empty log notice */
|
335 |
+
div.wpra-log-container,
|
336 |
+
.notice.wpra-empty-log-notice {
|
337 |
+
display: block;
|
338 |
+
box-sizing: border-box;
|
339 |
+
}
|
340 |
+
.notice.wpra-empty-log-notice {
|
341 |
+
width: 400px;
|
342 |
+
}
|
343 |
+
|
344 |
+
/* The log table */
|
345 |
+
div.wpra-log-container > table {
|
346 |
+
font-family: monospace;
|
347 |
+
min-width: 100%;
|
348 |
+
border: 0;
|
349 |
+
border-collapse: collapse;
|
350 |
+
}
|
351 |
+
/* Log table: row formatting */
|
352 |
+
div.wpra-log-container > table > tbody > tr {
|
353 |
+
}
|
354 |
+
/* Log table: cell formatting */
|
355 |
+
div.wpra-log-container > table > tbody > tr > td {
|
356 |
+
color: #cbcdda;
|
357 |
+
vertical-align: baseline;
|
358 |
+
padding: 4px 10px;
|
359 |
+
border-bottom: 2px solid #222833;
|
360 |
+
}
|
361 |
+
|
362 |
+
/* Log table: row on hover */
|
363 |
+
div.wpra-log-container > table > tbody > tr:hover {
|
364 |
+
background: rgba(200, 200, 200, 0.1);
|
365 |
+
}
|
366 |
+
|
367 |
+
/* Log table: date and level cells do not wrap */
|
368 |
+
div.wpra-log-container > table > tbody > tr > td.wpra-log-date,
|
369 |
+
div.wpra-log-container > table > tbody > tr > td.wpra-log-level {
|
370 |
+
white-space: nowrap;
|
371 |
+
overflow: hidden;
|
372 |
+
}
|
373 |
+
div.wpra-log-container > table > tbody > tr > td.wpra-log-date {
|
374 |
+
width: 150px;
|
375 |
+
}
|
376 |
+
div.wpra-log-container > table > tbody > tr > td.wpra-log-level {
|
377 |
+
text-align: center;
|
378 |
+
width: 60px;
|
379 |
+
}
|
380 |
+
div.wpra-log-container > table > tbody > tr > td.wpra-log-feed {
|
381 |
+
width: 150px;
|
382 |
+
}
|
383 |
+
|
384 |
+
/* Log table: styling for DEBUG log messages */
|
385 |
+
div.wpra-log-container > table > tbody > tr.wpra-log-debug > td:not(.wpra-log-date) {
|
386 |
+
color: #b695e6;
|
387 |
+
}
|
388 |
+
/* Log table: styling for INFO log messages */
|
389 |
+
div.wpra-log-container > table > tbody > tr.wpra-log-info > td:not(.wpra-log-date) {
|
390 |
+
color: #38eaff;
|
391 |
+
}
|
392 |
+
/* Log table: styling for NOTICE log messages */
|
393 |
+
div.wpra-log-container > table > tbody > tr.wpra-log-notice > td:not(.wpra-log-date) {
|
394 |
+
color: #ffea00;
|
395 |
+
}
|
396 |
+
/* Log table: styling for WARNING log messages */
|
397 |
+
div.wpra-log-container > table > tbody > tr.wpra-log-warning > td {
|
398 |
+
color: #000;
|
399 |
+
background-color: #ffea00;
|
400 |
+
font-weight: bold;
|
401 |
+
}
|
402 |
+
/* Log table: styling for ERROR log messages */
|
403 |
+
div.wpra-log-container > table > tbody > tr.wpra-log-error > td {
|
404 |
+
color: white;
|
405 |
+
background-color: #b90000;
|
406 |
+
font-weight: bold;
|
407 |
+
}
|
408 |
+
|
409 |
+
@media screen and (min-width: 782px) {
|
410 |
+
#custom_feed_title {
|
411 |
+
width: 400px;
|
412 |
+
}
|
413 |
+
}
|
414 |
+
|
415 |
+
/* Number Roller for Feed Source Limit */
|
416 |
+
.wprss-number-roller {
|
417 |
+
width: 80px;
|
418 |
+
vertical-align: middle;
|
419 |
+
}
|
420 |
+
@media screen and (max-width: 782px) {
|
421 |
+
.wprss-number-roller {
|
422 |
+
width: 100px;
|
423 |
+
}
|
424 |
+
}
|
425 |
+
|
426 |
+
/* Welcome Screen */
|
427 |
+
.about-wrap ul {
|
428 |
+
list-style: disc;
|
429 |
+
padding-left: 30px;
|
430 |
+
}
|
431 |
+
|
432 |
+
/* Excerpts and Thumbnails */
|
433 |
+
|
434 |
+
input#thumbnails-height,
|
435 |
+
input#thumbnails-width {
|
436 |
+
margin-right: 2px;
|
437 |
+
}
|
438 |
+
|
439 |
+
label[for=thumbnails-height],
|
440 |
+
label[for=thumbnails-width] {
|
441 |
+
margin-left: 8px;
|
442 |
+
}
|
443 |
+
|
444 |
+
.wp-list-table > thead > tr > th#thumbnail[scope="col"] {
|
445 |
+
width: 95px;
|
446 |
+
}
|
447 |
+
|
448 |
+
select + label.description {
|
449 |
+
margin-left: 8px;
|
450 |
+
}
|
451 |
+
|
452 |
+
input#title-limit {
|
453 |
+
width: 100px;
|
454 |
+
}
|
455 |
+
|
456 |
+
.wprss-form-table th,
|
457 |
+
.wprss-form-table tr,
|
458 |
+
.wprss-form-table td {
|
459 |
+
border: 0 transparent !important;
|
460 |
+
}
|
461 |
+
|
462 |
+
.wprss-indicator-green,
|
463 |
+
.wprss-indicator-red,
|
464 |
+
.wprss-indicator-grey {
|
465 |
+
font-size: 1.6em;
|
466 |
+
vertical-align: middle;
|
467 |
+
margin-right: 10px;
|
468 |
+
line-height: 30px;
|
469 |
+
}
|
470 |
+
.wprss-indicator-green {
|
471 |
+
color: #009922;
|
472 |
+
}
|
473 |
+
.wprss-indicator-grey {
|
474 |
+
color: #888;
|
475 |
+
}
|
476 |
+
.wprss-indicator-red {
|
477 |
+
color: #EB442A;
|
478 |
+
}
|
479 |
+
|
480 |
+
|
481 |
+
.wprss-meta-slider {
|
482 |
+
display: none;
|
483 |
+
margin-top: 5px;
|
484 |
+
}
|
485 |
+
|
486 |
+
.wprss-slider-button {
|
487 |
+
cursor: pointer;
|
488 |
+
margin-right: 8px !important;
|
489 |
+
}
|
490 |
+
|
491 |
+
#wprss_activate_feed,
|
492 |
+
#wprss_pause_feed {
|
493 |
+
display: block;
|
494 |
+
}
|
495 |
+
|
496 |
+
.wprss-date-error {
|
497 |
+
background: rgba( 245, 45, 45, 0.6 );
|
498 |
+
}
|
499 |
+
|
500 |
+
div.wprss-meta-side-setting {
|
501 |
+
display: block;
|
502 |
+
padding: 8px;
|
503 |
+
border-bottom: 1px solid rgba(0,0,0,0.1);
|
504 |
+
}
|
505 |
+
|
506 |
+
div.wprss-meta-side-setting > p {
|
507 |
+
margin: 2px 0;
|
508 |
+
}
|
509 |
+
div.wprss-meta-side-setting > p > label {
|
510 |
+
vertical-align: baseline;
|
511 |
+
}
|
512 |
+
div.wprss-meta-side-setting a.wprss-slider-button {
|
513 |
+
vertical-align: middle;
|
514 |
+
}
|
515 |
+
|
516 |
+
div.inside .wprss-meta-side-setting:last-child {
|
517 |
+
border-bottom: 0 solid transparent;
|
518 |
+
}
|
519 |
+
|
520 |
+
input[type="checkbox"]#wprss-force-feed {
|
521 |
+
margin-left: 10px;
|
522 |
+
}
|
523 |
+
|
524 |
+
/******************************
|
525 |
+
* FEED SOURCES PAGE COLUMNS
|
526 |
+
*/
|
527 |
+
body.post-type-wprss_feed.edit-php table.wp-list-table.posts thead th {
|
528 |
+
text-align: left;
|
529 |
+
overflow: hidden;
|
530 |
+
}
|
531 |
+
/* CHECKBOX */
|
532 |
+
body.post-type-wprss_feed.edit-php table.wp-list-table.posts thead td#cb {
|
533 |
+
width: 30px !important;
|
534 |
+
}
|
535 |
+
/* STATE */
|
536 |
+
body.post-type-wprss_feed.edit-php table.wp-list-table.posts thead th#state {
|
537 |
+
width: 70px !important;
|
538 |
+
}
|
539 |
+
/* NAME */
|
540 |
+
body.post-type-wprss_feed.edit-php table.wp-list-table.posts thead th#title {
|
541 |
+
width: auto;
|
542 |
+
}
|
543 |
+
/* NEXT UPDATE */
|
544 |
+
body.post-type-wprss_feed.edit-php table.wp-list-table.posts thead th#updates {
|
545 |
+
width: 300px !important;
|
546 |
+
}
|
547 |
+
body.post-type-wprss_feed.edit-php table.wp-list-table.posts td.column-updates p {
|
548 |
+
margin-bottom: 0 !important;
|
549 |
+
}
|
550 |
+
/* FEED COUNT */
|
551 |
+
body.post-type-wprss_feed.edit-php table.wp-list-table.posts thead th#feed-count {
|
552 |
+
width: 200px !important;
|
553 |
+
}
|
554 |
+
/* CATEGORIES */
|
555 |
+
body.post-type-wprss_feed_item.edit-php table.wp-list-table.posts thead th#category,
|
556 |
+
body.post-type-wprss_feed.edit-php table.wp-list-table.posts thead th#category {
|
557 |
+
width: 130px !important;
|
558 |
+
}
|
559 |
+
|
560 |
+
/* FEED ITEM IMAGE */
|
561 |
+
body.post-type-wprss_feed_item.edit-php table.wp-list-table.posts thead th#image {
|
562 |
+
width: 120px;
|
563 |
+
}
|
564 |
+
body.post-type-wprss_feed_item.edit-php table.wp-list-table.posts tbody img.wpra-item-ft-image {
|
565 |
+
width: 100px;
|
566 |
+
}
|
567 |
+
|
568 |
+
@media screen and (max-width: 660px) {
|
569 |
+
body.post-type-wprss_feed.edit-php table.wp-list-table.posts thead th#id,
|
570 |
+
body.post-type-wprss_feed.edit-php table.wp-list-table.posts tfoot th.column-id,
|
571 |
+
body.post-type-wprss_feed.edit-php table.wp-list-table.posts tbody td.column-id,
|
572 |
+
body.post-type-wprss_feed.edit-php table.wp-list-table.posts thead th#state,
|
573 |
+
body.post-type-wprss_feed.edit-php table.wp-list-table.posts tfoot th.column-state,
|
574 |
+
body.post-type-wprss_feed.edit-php table.wp-list-table.posts tbody td.column-state {
|
575 |
+
display: none;
|
576 |
+
}
|
577 |
+
}
|
578 |
+
@media only screen and (max-width: 782px) {
|
579 |
+
/* WIDEN CHECKBOX COLUMN */
|
580 |
+
body.post-type-wprss_feed.edit-php table.wp-list-table.posts thead td#cb {
|
581 |
+
width: 50px !important;
|
582 |
+
}
|
583 |
+
|
584 |
+
/* HIDE STATE COLUMN */
|
585 |
+
body.post-type-wprss_feed.edit-php table.wp-list-table.posts thead th#state,
|
586 |
+
body.post-type-wprss_feed.edit-php table.wp-list-table.posts tfoot th.column-state,
|
587 |
+
body.post-type-wprss_feed.edit-php table.wp-list-table.posts tbody td.column-state {
|
588 |
+
display: none;
|
589 |
+
padding: 8px 10px;
|
590 |
+
}
|
591 |
+
|
592 |
+
/* HIDE ITEM IMAGE COLUMN */
|
593 |
+
body.post-type-wprss_feed_item.edit-php table.wp-list-table.posts thead th#image,
|
594 |
+
body.post-type-wprss_feed_item.edit-php table.wp-list-table.posts tfoot th.column-image,
|
595 |
+
body.post-type-wprss_feed_item.edit-php table.wp-list-table.posts tbody td.column-image {
|
596 |
+
display: none;
|
597 |
+
}
|
598 |
+
|
599 |
+
/* IMAGE IS LARGER IN RESPONSIVE MOBILE VIEW */
|
600 |
+
body.post-type-wprss_feed_item.edit-php table.wp-list-table.posts tbody img.wpra-item-ft-image {
|
601 |
+
width: 350px;
|
602 |
+
}
|
603 |
+
|
604 |
+
/* HIDE INLINE IMAGE COLUMN NAME IN RESPONSIVE MOBILE VIEW */
|
605 |
+
body.post-type-wprss_feed_item.edit-php table.wp-list-table.posts tbody td.column-image::before {
|
606 |
+
display: none;
|
607 |
+
}
|
608 |
+
}
|
609 |
+
|
610 |
+
@media only screen and (max-width: 1200px) {
|
611 |
+
/* HIDE ITEM PERMALINK COLUMN */
|
612 |
+
body.post-type-wprss_feed_item.edit-php table.wp-list-table.posts thead th#permalink,
|
613 |
+
body.post-type-wprss_feed_item.edit-php table.wp-list-table.posts tfoot th.column-permalink,
|
614 |
+
body.post-type-wprss_feed_item.edit-php table.wp-list-table.posts tbody td.column-permalink {
|
615 |
+
display: none;
|
616 |
+
}
|
617 |
+
}
|
618 |
+
|
619 |
+
/* For feed items */
|
620 |
+
body.post-type-wprss_feed_item.edit-php table.wp-list-table.posts thead th#publishdate {
|
621 |
+
width: 150px;
|
622 |
+
}
|
623 |
+
body.post-type-wprss_feed_item.edit-php table.wp-list-table.posts thead th#source {
|
624 |
+
width: 200px;
|
625 |
+
}
|
626 |
+
|
627 |
+
|
628 |
+
|
629 |
+
i.wprss-feed-error-symbol {
|
630 |
+
display: none;
|
631 |
+
font-size: 1.2em;
|
632 |
+
vertical-align: middle;
|
633 |
+
color: rgb(200,0,0);
|
634 |
+
margin-left: 8px;
|
635 |
+
}
|
636 |
+
|
637 |
+
i.wprss-updating-feed-icon {
|
638 |
+
margin-left: 8px;
|
639 |
+
display: none;
|
640 |
+
}
|
641 |
+
|
642 |
+
i.wprss-feed-error-symbol.wprss-show,
|
643 |
+
i.wprss-updating-feed-icon.wprss-show {
|
644 |
+
display: inline-block;
|
645 |
+
}
|
646 |
+
|
647 |
+
/* Log textarea styles */
|
648 |
+
#wprss-log-textarea {
|
649 |
+
width: 800px;
|
650 |
+
height: 400px;
|
651 |
+
font-family: Menlo, Monaco, monospace;
|
652 |
+
background: none;
|
653 |
+
white-space: pre-wrap;
|
654 |
+
overflow: auto;
|
655 |
+
display: block;
|
656 |
+
background: rgb( 255, 245, 245 );
|
657 |
+
}
|
658 |
+
|
659 |
+
|
660 |
+
|
661 |
+
/*--------------------------------------------------------------------------
|
662 |
+
*
|
663 |
+
* Add-Ons
|
664 |
+
*
|
665 |
+
*-------------------------------------------------------------------------*/
|
666 |
+
|
667 |
+
#add-ons {
|
668 |
+
margin-bottom: 20px;
|
669 |
+
}
|
670 |
+
|
671 |
+
#add-ons .add-on-group {
|
672 |
+
display: flex;
|
673 |
+
flex-flow: row wrap;
|
674 |
+
justify-content: flex-start;
|
675 |
+
align-items: flex-start;
|
676 |
+
}
|
677 |
+
|
678 |
+
#add-ons .add-on-group:first-child {
|
679 |
+
margin-top: 0;
|
680 |
+
padding-top: 0;
|
681 |
+
}
|
682 |
+
|
683 |
+
#add-ons .add-on {
|
684 |
+
display: inline-block;
|
685 |
+
position: relative;
|
686 |
+
flex: 0 0 220px;
|
687 |
+
width: 220px;
|
688 |
+
margin: 10px 20px 10px 0;
|
689 |
+
background: #FFFFFF;
|
690 |
+
border: 1px solid #E5E5E5;
|
691 |
+
border-radius: 3px;
|
692 |
+
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
|
693 |
+
box-sizing: border-box;
|
694 |
+
min-height: 320px;
|
695 |
+
overflow: hidden;
|
696 |
+
}
|
697 |
+
|
698 |
+
#add-ons .add-on h3 {
|
699 |
+
margin: 0.5em 0 1.5em;
|
700 |
+
}
|
701 |
+
|
702 |
+
#add-ons .add-on h3 a {
|
703 |
+
color: inherit;
|
704 |
+
text-decoration: none;
|
705 |
+
}
|
706 |
+
|
707 |
+
#add-ons .add-on .inner {
|
708 |
+
min-height: 170px;
|
709 |
+
padding: 20px 15px;
|
710 |
+
}
|
711 |
+
|
712 |
+
#add-ons .add-on .footer {
|
713 |
+
overflow: hidden;
|
714 |
+
position: absolute;
|
715 |
+
width: 100%;
|
716 |
+
bottom: 0;
|
717 |
+
padding: 15px 0;
|
718 |
+
}
|
719 |
+
|
720 |
+
#add-ons .add-on .footer .button {
|
721 |
+
float: left;
|
722 |
+
margin-left: 15px;
|
723 |
+
}
|
724 |
+
|
725 |
+
.add-on .corner-ribbon {
|
726 |
+
position: absolute;
|
727 |
+
top: 18px;
|
728 |
+
right: -47px;
|
729 |
+
font-size: 12px;
|
730 |
+
width: 150px;
|
731 |
+
padding: 2px 0;
|
732 |
+
color: #fff;
|
733 |
+
background: #333;
|
734 |
+
text-align: center;
|
735 |
+
transform: rotate(45deg);
|
736 |
+
transform-origin: center center;
|
737 |
+
}
|
738 |
+
|
739 |
+
#add-ons .add-on.bundle-plan {
|
740 |
+
border: 2px solid #ff792b;
|
741 |
+
box-shadow: 0 0 25px -12px rgba(255, 121, 43, 0.6);
|
742 |
+
}
|
743 |
+
|
744 |
+
#add-ons .add-on.bundle-plan .corner-ribbon {
|
745 |
+
background: #ff792b;
|
746 |
+
}
|
747 |
+
|
748 |
+
#add-ons .add-on.spotlight .corner-ribbon {
|
749 |
+
background: #DD234B;
|
750 |
+
}
|
751 |
+
|
752 |
+
#add-ons .add-on.bundle-plan .footer,
|
753 |
+
#add-ons .add-on.spotlight .footer {
|
754 |
+
background: transparent;
|
755 |
+
border-top: 0;
|
756 |
+
}
|
757 |
+
|
758 |
+
|
759 |
+
#add-ons .add-on-active .button-disabled:focus,
|
760 |
+
#add-ons .add-on-active .button-disabled:active {
|
761 |
+
background: #fafafa;
|
762 |
+
}
|
763 |
+
|
764 |
+
#add-ons .add-on-title {
|
765 |
+
float: left;
|
766 |
+
width: 100%;
|
767 |
+
margin: 25px 0 25px;
|
768 |
+
border-top: #F5F5F5 solid 1px;
|
769 |
+
}
|
770 |
+
|
771 |
+
/*== BLACKLIST */
|
772 |
+
body.post-type-wprss_blacklist .add-new-h2,
|
773 |
+
body.post-type-wprss_blacklist ul.subsubsub,
|
774 |
+
body.post-type-wprss_blacklist .alignleft.actions {
|
775 |
+
display: none;
|
776 |
+
}
|
777 |
+
|
778 |
+
body.post-type-wprss_blacklist .alignleft.actions.bulkactions {
|
779 |
+
display: inline-block;
|
780 |
+
}
|
781 |
+
|
782 |
+
.wprss-header-small {
|
783 |
+
color: #777;
|
784 |
+
font-size: 0.7em;
|
785 |
+
}
|
786 |
+
|
787 |
+
/* Inline Help ============================================================== */
|
788 |
+
|
789 |
+
.wprss-tooltip-handle,
|
790 |
+
.wprss-tooltip-handle:hover,
|
791 |
+
.wprss-tooltip-handle:focus {
|
792 |
+
text-decoration: none;
|
793 |
+
color: #aaaaaa;
|
794 |
+
outline: none;
|
795 |
+
}
|
796 |
+
|
797 |
+
.wprss-tooltip-handle {
|
798 |
+
margin-left: 5px;
|
799 |
+
font-size: 15px;
|
800 |
+
color: rgb(190, 190, 190);
|
801 |
+
vertical-align: middle;
|
802 |
+
}
|
803 |
+
|
804 |
+
.wprss-tooltip-handle-side {
|
805 |
+
float: right;
|
806 |
+
}
|
807 |
+
|
808 |
+
.wprss-tooltip-content {
|
809 |
+
display: none;
|
810 |
+
}
|
811 |
+
|
812 |
+
.wprss-ui-tooltip {
|
813 |
+
color: #444 !important;
|
814 |
+
padding: 8px 10px !important;
|
815 |
+
background: #fefefe !important;
|
816 |
+
border: 1px solid #ccc !important;
|
817 |
+
border-radius: 1px !important;
|
818 |
+
font-family: "Open Sans", sans-serif !important;
|
819 |
+
box-shadow: 0 0 5px rgba(0, 0, 0, 0.17) !important;
|
820 |
+
}
|
821 |
+
.wprss-ui-tooltip p:first-child {
|
822 |
+
margin-top: 0;
|
823 |
+
}
|
824 |
+
.wprss-ui-tooltip p:last-child {
|
825 |
+
margin-bottom: 0;
|
826 |
+
}
|
827 |
+
.wprss-ui-tooltip p {
|
828 |
+
margin: 8px 0;
|
829 |
+
}
|
830 |
+
.wprss-ui-tooltip p, code {
|
831 |
+
font-size: 0.9em !important;
|
832 |
+
}
|
833 |
+
.wprss-ui-tooltip hr {
|
834 |
+
margin: 0;
|
835 |
+
}
|
836 |
+
|
837 |
+
.wprss-section-tooltip-handle,
|
838 |
+
.wprss-section-tooltip-handle:hover,
|
839 |
+
.wprss-section-tooltip-handle:active,
|
840 |
+
.wprss-section-tooltip-handle:visited,
|
841 |
+
.wprss-section-tooltip-handle:link,
|
842 |
+
.wprss-section-tooltip-handle:focus {
|
843 |
+
color: #006799;
|
844 |
+
margin-left: 5px;
|
845 |
+
text-decoration: none;
|
846 |
+
outline: none;
|
847 |
+
cursor: help;
|
848 |
+
font-size: 15px;
|
849 |
+
}
|
850 |
+
|
851 |
+
/* For non settings page screens */
|
852 |
+
@media only screen and (max-width: 850px) {
|
853 |
+
|
854 |
+
body:not(.wprss_feed_page_wprss-aggregator-settings) .wprss-tooltip-handle {
|
855 |
+
color: #999;
|
856 |
+
font-size: 1em;
|
857 |
+
padding: 6px 10px;
|
858 |
+
margin-left: 0;
|
859 |
+
background: #e5e5e5;
|
860 |
+
border-radius: 3px;
|
861 |
+
vertical-align: middle;
|
862 |
+
}
|
863 |
+
|
864 |
+
body:not(.wprss_feed_page_wprss-aggregator-settings) select + .wprss-tooltip-handle,
|
865 |
+
body:not(.wprss_feed_page_wprss-aggregator-settings) input[type="input"] + .wprss-tooltip-handle,
|
866 |
+
body:not(.wprss_feed_page_wprss-aggregator-settings) input[type="password"] + .wprss-tooltip-handle {
|
867 |
+
margin-top: 5px;
|
868 |
+
}
|
869 |
+
|
870 |
+
body:not(.wprss_feed_page_wprss-aggregator-settings) .wprss-tooltip-handle:after {
|
871 |
+
content: 'Help';
|
872 |
+
margin-left: 5px;
|
873 |
+
font-family: 'Open Sans', sans-serif;
|
874 |
+
}
|
875 |
+
|
876 |
+
}
|
877 |
+
|
878 |
+
|
879 |
+
/* For settings page screens */
|
880 |
+
@media only screen and (max-width: 782px) {
|
881 |
+
|
882 |
+
body.wprss_feed_page_wprss-aggregator-settings .wprss-tooltip-handle {
|
883 |
+
color: #999;
|
884 |
+
font-size: 1em;
|
885 |
+
padding: 6px 10px;
|
886 |
+
margin-left: 0;
|
887 |
+
background: #e5e5e5;
|
888 |
+
border-radius: 3px;
|
889 |
+
vertical-align: middle;
|
890 |
+
}
|
891 |
+
|
892 |
+
body.wprss_feed_page_wprss-aggregator-settings select + .wprss-tooltip-handle,
|
893 |
+
body.wprss_feed_page_wprss-aggregator-settings input[type="input"] + .wprss-tooltip-handle,
|
894 |
+
body.wprss_feed_page_wprss-aggregator-settings input[type="password"] + .wprss-tooltip-handle {
|
895 |
+
margin-top: 5px;
|
896 |
+
}
|
897 |
+
|
898 |
+
body.wprss_feed_page_wprss-aggregator-settings .wprss-tooltip-handle:after {
|
899 |
+
content: 'Help';
|
900 |
+
margin-left: 5px;
|
901 |
+
font-family: 'Open Sans', sans-serif;
|
902 |
+
}
|
903 |
+
|
904 |
+
}
|
905 |
+
|
906 |
+
|
907 |
+
@media only screen and (max-width: 1026px) {
|
908 |
+
.wprss-tr-hr th {
|
909 |
+
padding-top: 10px;
|
910 |
+
}
|
911 |
+
}
|
912 |
+
|
913 |
+
.ajax-error,
|
914 |
+
.ajax-error:hover,
|
915 |
+
.ajax-error:visited,
|
916 |
+
.ajax-error:link,
|
917 |
+
.ajax-error:active {
|
918 |
+
color: #a00;
|
919 |
+
}
|
920 |
+
|
921 |
+
/* Removes the "Add New" button for Feed Items */
|
922 |
+
.post-type-wprss_feed_item .page-title-action {
|
923 |
+
display: none
|
924 |
+
}
|
925 |
+
|
926 |
+
/* Changelog styles */
|
927 |
+
.wpra-changelog-container h2 {
|
928 |
+
font-size: 1.4em;
|
929 |
+
}
|
930 |
+
.wpra-changelog-container h3 {
|
931 |
+
font-weight: normal;
|
932 |
+
font-size: 1.2em;
|
933 |
+
}
|
934 |
+
.wpra-changelog-container ul {
|
935 |
+
list-style: disc;
|
936 |
+
list-style-position: inside;
|
937 |
+
}
|
938 |
+
|
939 |
+
.wpra_ft_image_option {
|
940 |
+
margin-top: 10px;
|
941 |
+
}
|
942 |
+
|
943 |
+
#wpra_image_min_size_row {
|
944 |
+
display: none;
|
945 |
+
}
|
946 |
+
|
947 |
+
/* Spacing between image width and height fields */
|
948 |
+
#wpra_image_min_size_row > td > label {
|
949 |
+
margin-right: 10px;
|
950 |
+
}
|
951 |
+
|
952 |
+
#wprss-feed-def-ft-image-preview {
|
953 |
+
width: 220px;
|
954 |
+
}
|
955 |
+
|
956 |
+
#wprss-feed-def-ft-image-preview-hint {
|
957 |
+
margin-bottom: 8px;
|
958 |
+
}
|
959 |
+
|
960 |
+
|
961 |
+
/*
|
962 |
+
* The Feed Source List Table styles that mimic the plugins table
|
963 |
+
*/
|
964 |
+
|
965 |
+
.post-type-wprss_feed table.wp-list-table.posts tbody tr th,
|
966 |
+
.post-type-wprss_feed table.wp-list-table.posts tbody tr td
|
967 |
+
{
|
968 |
+
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .1);
|
969 |
+
}
|
970 |
+
|
971 |
+
/* Feed updating/deleting animation in feed sources table */
|
972 |
+
.post-type-wprss_feed table.wp-list-table.posts tbody tr.wpra-feed-is-updating,
|
973 |
+
.post-type-wprss_feed table.wp-list-table.posts tbody tr.wpra-feed-is-deleting {
|
974 |
+
/*background-image: linear-gradient(-45deg, rgba(30, 30, 30, 0.05) 25%, transparent 0, transparent 50%, rgba(50, 50, 50, 0.05) 50%, rgba(30, 30, 30, 0.05) 75%, transparent 0, #0000);*/
|
975 |
+
/*background-image: linear-gradient(*/
|
976 |
+
/* -45deg, rgba(0, 0, 0, 0.9) 25%,*/
|
977 |
+
/* transparent 0,*/
|
978 |
+
/* transparent 50%,*/
|
979 |
+
/* rgba(0, 0, 0, 0.9) 50%,*/
|
980 |
+
/* rgba(0, 0, 0, 0.9) 75%,*/
|
981 |
+
/* transparent 0, #0000*/
|
982 |
+
/*);*/
|
983 |
+
background-size: 80px 80px;
|
984 |
+
background-blend-mode: overlay;
|
985 |
+
}
|
986 |
+
|
987 |
+
.post-type-wprss_feed table.wp-list-table.posts tbody tr.wpra-feed-is-updating > *,
|
988 |
+
.post-type-wprss_feed table.wp-list-table.posts tbody tr.wpra-feed-is-deleting > * {
|
989 |
+
background: transparent !important;
|
990 |
+
}
|
991 |
+
|
992 |
+
.post-type-wprss_feed table.wp-list-table.posts tbody tr.wpra-feed-is-updating {
|
993 |
+
animation: wpra-feed-updating-animation 1.3s linear infinite;
|
994 |
+
background-color: #e9f9ee;
|
995 |
+
}
|
996 |
+
.post-type-wprss_feed table.wp-list-table.posts tbody tr.wpra-feed-is-deleting {
|
997 |
+
animation: wpra-feed-updating-animation 1s linear infinite;
|
998 |
+
background-color: #f8eaea;
|
999 |
+
}
|
1000 |
+
|
1001 |
+
@keyframes wpra-feed-updating-animation {
|
1002 |
+
0% {
|
1003 |
+
background-position: 0 0;
|
1004 |
+
}
|
1005 |
+
50% {
|
1006 |
+
background-position: 80px 80px;
|
1007 |
+
}
|
1008 |
+
100% {
|
1009 |
+
background-position: 160px 160px;
|
1010 |
+
}
|
1011 |
+
}
|
1012 |
+
|
1013 |
+
/*
|
1014 |
+
* Styles for the Feed Source List Table "State" column
|
1015 |
+
*/
|
1016 |
+
div.wprss-feed-state-container,
|
1017 |
+
div.wprss-feed-source-type
|
1018 |
+
{
|
1019 |
+
display: inline-block;
|
1020 |
+
}
|
1021 |
+
|
1022 |
+
/* the feed type icon */
|
1023 |
+
div.wprss-feed-source-type {
|
1024 |
+
float: right;
|
1025 |
+
}
|
1026 |
+
/* inactive color */
|
1027 |
+
.post-type-wprss_feed table.wp-list-table tr div.wprss-feed-source-type {
|
1028 |
+
color: #aaa;
|
1029 |
+
}
|
1030 |
+
/* active color */
|
1031 |
+
.post-type-wprss_feed table.wp-list-table tr.active div.wprss-feed-source-type {
|
1032 |
+
color: #ff792b;
|
1033 |
+
}
|
1034 |
+
/* youtube color */
|
1035 |
+
.post-type-wprss_feed table.wp-list-table tr.active div.wprss-feed-source-type.wprss-feed-source-type-yt {
|
1036 |
+
color: #ff0000;
|
1037 |
+
}
|
1038 |
+
|
1039 |
+
.post-type-wprss_feed table.wp-list-table tbody td.column-state {
|
1040 |
+
padding-right: 0;
|
1041 |
+
}
|
1042 |
+
|
1043 |
+
.column-updates > p {
|
1044 |
+
margin: 0 !important;
|
1045 |
+
}
|
1046 |
+
.post-type-wprss_feed table.wp-list-table.posts tbody tr .next-update-container {
|
1047 |
+
font-weight: bold;
|
1048 |
+
}
|
1049 |
+
.post-type-wprss_feed table.wp-list-table.posts tbody tr:not(.active) .next-update-container {
|
1050 |
+
display: none;
|
1051 |
+
}
|
1052 |
+
|
1053 |
+
/* The last update time in the feed sources page table */
|
1054 |
+
.post-type-wprss_feed table.wp-list-table.posts .last-update-num-items-container {
|
1055 |
+
color: #666;
|
1056 |
+
font-style: italic;
|
1057 |
+
font-size: 90%;
|
1058 |
+
}
|
1059 |
+
|
1060 |
+
/* The imported items link in the feed sources page - disabled when 0 items */
|
1061 |
+
.post-type-wprss_feed table.wp-list-table.posts .items-imported-link.has-imported-items {
|
1062 |
+
font-weight: bold;
|
1063 |
+
line-height: 20px;
|
1064 |
+
}
|
1065 |
+
.post-type-wprss_feed table.wp-list-table.posts .items-imported-link:not(.has-imported-items) {
|
1066 |
+
color: #777;
|
1067 |
+
pointer-events: none;
|
1068 |
+
}
|
1069 |
+
|
1070 |
+
/* The delete items row action in the feed sources page - hidden when 0 items */
|
1071 |
+
.post-type-wprss_feed table.wp-list-table.posts .row-actions .purge-posts:not(.has-imported-items) {
|
1072 |
+
display: none;
|
1073 |
+
}
|
1074 |
+
|
1075 |
+
/* Styles for the disabled "Fetch" and "Delete" feed source row actions */
|
1076 |
+
.post-type-wprss_feed table.wp-list-table.posts .row-actions a.wprss_fetch_items_ajax_action[disabled] {
|
1077 |
+
color: #555;
|
1078 |
+
}
|
1079 |
+
.post-type-wprss_feed table.wp-list-table.posts .row-actions a.wprss_delete_items_ajax_action[disabled] {
|
1080 |
+
color: #666;
|
1081 |
+
}
|
1082 |
+
|
1083 |
+
/* The feed updating/deleting spinner icon */
|
1084 |
+
.post-type-wprss_feed table.wp-list-table.posts .column-feed-count .spinner {
|
1085 |
+
float: none;
|
1086 |
+
vertical-align: bottom;
|
1087 |
+
}
|
1088 |
+
.post-type-wprss_feed table.wp-list-table.posts tr.wpra-feed-is-updating .column-feed-count .spinner,
|
1089 |
+
.post-type-wprss_feed table.wp-list-table.posts tr.wpra-feed-is-deleting .column-feed-count .spinner {
|
1090 |
+
visibility: visible;
|
1091 |
+
}
|
1092 |
+
|
1093 |
+
/*
|
1094 |
+
* TOGGLE SWITCH
|
1095 |
+
*/
|
1096 |
+
.wprss-switch {
|
1097 |
+
position: relative;
|
1098 |
+
display: inline-block;
|
1099 |
+
width: 34px;
|
1100 |
+
height: 18px;
|
1101 |
+
}
|
1102 |
+
.wprss-switch input {
|
1103 |
+
opacity: 0;
|
1104 |
+
width: 0;
|
1105 |
+
height: 0;
|
1106 |
+
}
|
1107 |
+
.wprss-switch-slider {
|
1108 |
+
position: absolute;
|
1109 |
+
cursor: pointer;
|
1110 |
+
top: 0;
|
1111 |
+
left: 0;
|
1112 |
+
right: 0;
|
1113 |
+
bottom: 0;
|
1114 |
+
border-radius: 34px;
|
1115 |
+
background-color: #ccc;
|
1116 |
+
transition: .2s;
|
1117 |
+
-webkit-transition: .2s;
|
1118 |
+
}
|
1119 |
+
.wprss-switch-slider:before {
|
1120 |
+
position: absolute;
|
1121 |
+
content: "";
|
1122 |
+
width: 12px;
|
1123 |
+
height: 12px;
|
1124 |
+
left: 4px;
|
1125 |
+
bottom: 3px;
|
1126 |
+
border-radius: 50%;
|
1127 |
+
background-color: white;
|
1128 |
+
transition: .2s;
|
1129 |
+
-webkit-transition: .2s;
|
1130 |
+
}
|
1131 |
+
input:checked + .wprss-switch-slider {
|
1132 |
+
background-color: #0baa3c;
|
1133 |
+
}
|
1134 |
+
input:focus + .wprss-switch-slider {
|
1135 |
+
box-shadow: 0 0 1px #2196F3;
|
1136 |
+
}
|
1137 |
+
input:checked + .wprss-switch-slider:before {
|
1138 |
+
-webkit-transform: translateX(14px);
|
1139 |
+
-ms-transform: translateX(14px);
|
1140 |
+
transform: translateX(14px);
|
1141 |
+
}
|
1142 |
+
|
1143 |
+
.postbox .inside .wpra-feed-save-meta-box {
|
1144 |
+
border-bottom: 1px solid #ccc;
|
1145 |
+
padding: 10px;
|
1146 |
+
margin: 0 -10px;
|
1147 |
+
margin-top: -11px;
|
1148 |
+
margin-bottom: 10px;
|
1149 |
+
background: #fff;
|
1150 |
+
}
|
1151 |
+
|
1152 |
+
.postbox .inside .wpra-feed-save-meta-box label span {
|
1153 |
+
font-weight: bold;
|
1154 |
+
font-size: 14px;
|
1155 |
+
}
|
1156 |
+
|
1157 |
+
.postbox .inside .wpra-feed-save-meta-box input[type="text"] {
|
1158 |
+
text-align: left !important;
|
1159 |
+
}
|
1160 |
+
|
1161 |
+
/* -- INLINE STYLES -- */
|
1162 |
+
|
1163 |
+
form.wpra-inline-form {
|
1164 |
+
display: inline-block;
|
1165 |
+
}
|
1166 |
+
|
1167 |
+
form.wpra-header-form {
|
1168 |
+
display: inline-block;
|
1169 |
+
margin: 0;
|
1170 |
+
padding: 0;
|
1171 |
+
border: 0;
|
1172 |
+
}
|
1173 |
+
|
1174 |
+
h1.wpra-inline-header,
|
1175 |
+
h2.wpra-inline-header,
|
1176 |
+
h3.wpra-inline-header,
|
1177 |
+
h4.wpra-inline-header
|
1178 |
+
{
|
1179 |
+
display: inline-block;
|
1180 |
+
margin-right: 5px;
|
1181 |
+
}
|
1182 |
+
|
1183 |
+
button.button.wpra-header-button {
|
1184 |
+
position: relative;
|
1185 |
+
vertical-align: baseline;
|
1186 |
+
top: -1px;
|
1187 |
+
}
|
1188 |
+
|
1189 |
+
/* -- SLIDE BOX -- */
|
1190 |
+
|
1191 |
+
div.wpra-slide-box {
|
1192 |
+
display: none;
|
1193 |
+
margin: 10px 0;
|
1194 |
+
padding: 15px;
|
1195 |
+
background: #fff;
|
1196 |
+
border: 1px solid #ccc;
|
1197 |
+
border-radius: 2px;
|
1198 |
+
}
|
1199 |
+
|
1200 |
+
div.wpra-slide-box.wpra-slide-box-open {
|
1201 |
+
display: block;
|
1202 |
+
}
|
1203 |
+
|
1204 |
+
div.wpra-slide-box form {
|
1205 |
+
display: block;
|
1206 |
+
}
|
1207 |
+
|
1208 |
+
div.wpra-slide-box h4 {
|
1209 |
+
font-size: 16px;
|
1210 |
+
margin: 0;
|
1211 |
+
margin-bottom: 15px;
|
1212 |
+
padding-bottom: 5px;
|
1213 |
+
border-bottom: 1px solid #ddd;
|
1214 |
+
}
|
1215 |
+
|
1216 |
+
div.wpra-slide-box form label {
|
1217 |
+
display: flex;
|
1218 |
+
flex-direction: row;
|
1219 |
+
align-items: center;
|
1220 |
+
line-height: 1;
|
1221 |
+
font-size: 1em;
|
1222 |
+
margin: 5px 0;
|
1223 |
+
}
|
1224 |
+
|
1225 |
+
div.wpra-slide-box label > * {
|
1226 |
+
flex-grow: 1;
|
1227 |
+
}
|
1228 |
+
|
1229 |
+
div.wpra-slide-box label > span {
|
1230 |
+
display: inline-block;
|
1231 |
+
flex-grow: 0;
|
1232 |
+
width: 200px;
|
1233 |
+
font-size: 1em;
|
1234 |
+
}
|
1235 |
+
div.wpra-slide-box label input[type="text"],
|
1236 |
+
div.wpra-slide-box label input[type="number"],
|
1237 |
+
div.wpra-slide-box label input[type="text"]
|
1238 |
+
{
|
1239 |
+
height: 28px;
|
1240 |
+
min-height: 28px;
|
1241 |
+
}
|
1242 |
+
|
1243 |
+
div.wpra-slide-box div.wpra-submit-wrap {
|
1244 |
+
margin-top: 10px;
|
1245 |
+
}
|
1246 |
+
div.wpra-slide-box div.wpra-submit-wrap.right {
|
1247 |
+
text-align: right;
|
1248 |
+
}
|
1249 |
+
|
1250 |
+
div.wpra-slide-box div.wpra-submit-wrap > button {
|
1251 |
+
text-align: center;
|
1252 |
+
}
|
1253 |
+
|
1254 |
+
/* -- ERROR LOG OPTIONS (SLIDE BOX) -- */
|
1255 |
+
|
1256 |
+
#wprss-log-options-form input[name="logging_limit_days"] {
|
1257 |
+
width: 80px;
|
1258 |
+
}
|
1259 |
+
|
1260 |
+
/* -- BLACKLIST TOOL -- */
|
1261 |
+
|
1262 |
+
#wpra-add-blacklist-container form label span:first-child {
|
1263 |
+
width: 120px;
|
1264 |
+
}
|
1265 |
+
|
1266 |
+
/* -- LOG TOOL -- */
|
1267 |
+
|
1268 |
+
#wprss-error-log-options {
|
1269 |
+
margin: 15px 0;
|
1270 |
+
}
|
1271 |
+
|
1272 |
+
#wprss-clear-error-log-form {
|
1273 |
+
float: right;
|
1274 |
+
position: relative;
|
1275 |
+
top: -3px;
|
1276 |
+
}
|
1277 |
+
|
1278 |
+
.wpra-log-filters {
|
1279 |
+
padding: 2px 0;
|
1280 |
+
margin: 0;
|
1281 |
+
}
|
1282 |
+
p.wpra-logs-shown-msg {
|
1283 |
+
margin: 5px 0;
|
1284 |
+
}
|
1285 |
+
|
1286 |
+
/* -- MISC -- */
|
1287 |
+
.wpra-no-margin {
|
1288 |
+
margin: 0;
|
1289 |
+
}
|
css/build/templates.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.mobile-collapsed{display:inherit}.mobile-only{display:none!important}@media (max-width:782px){.mobile-only{display:inherit!important}.mobile-collapsed{display:none!important}}.wpra-bottom-panel{position:sticky;bottom:0;z-index:9;background-color:#fffce9;padding:1rem;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04)}.wpra-bottom-panel__title{font-size:1rem;font-weight:500;padding-bottom:8px}a.disabled{color:#9c9c9c;pointer-events:none}[v-cloak] .vcloak--visible{display:block}[v-cloak] .vcloak--hidden{display:none}.vcloak--visible{min-height:60px;display:none}.loading-container{min-height:5rem;position:relative}.loading-container:before{display:block;content:"";position:absolute;left:calc(50% - 20px);top:calc(50% - 20px);box-sizing:border-box;height:40px;width:40px;border:0 solid #d0d0d0;border-radius:50%;box-shadow:inset 0 -12px 0 16px #d0d0d0;animation:rotate 1s infinite linear;z-index:3}.loading-container:after{display:block;content:"";position:absolute;z-index:2;background-color:hsla(0,0%,95%,.5);width:100%;height:100%;left:0;top:0}.loading-container--white:after{background-color:#fff}.loading-button{pointer-events:none;position:relative}.loading-button:before{display:block;content:"";position:absolute;left:calc(50% - 8px);top:calc(50% - 8px);box-sizing:border-box;height:16px;width:16px;border:0 solid #
|
1 |
+
.mobile-collapsed{display:inherit}.mobile-only{display:none!important}@media (max-width:782px){.mobile-only{display:inherit!important}.mobile-collapsed{display:none!important}}.wpra-bottom-panel{position:sticky;bottom:0;z-index:9;background-color:#fffce9;padding:1rem;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04)}.wpra-bottom-panel__title{font-size:1rem;font-weight:500;padding-bottom:8px}a.disabled{color:#9c9c9c;pointer-events:none}[v-cloak] .vcloak--visible{display:block}[v-cloak] .vcloak--hidden{display:none}.vcloak--visible{min-height:60px;display:none}.loading-container{min-height:5rem;position:relative}.loading-container:before{display:block;content:"";position:absolute;left:calc(50% - 20px);top:calc(50% - 20px);box-sizing:border-box;height:40px;width:40px;border:0 solid #d0d0d0;border-radius:50%;box-shadow:inset 0 -12px 0 16px #d0d0d0;animation:rotate 1s infinite linear;z-index:3}.loading-container:after{display:block;content:"";position:absolute;z-index:2;background-color:hsla(0,0%,95%,.5);width:100%;height:100%;left:0;top:0}.loading-container--white:after{background-color:#fff}.loading-button{pointer-events:none;position:relative}.loading-button:before{display:block;content:"";position:absolute;left:calc(50% - 8px);top:calc(50% - 8px);box-sizing:border-box;height:16px;width:16px;border:0 solid #aaa;border-radius:50%;box-shadow:inset 0 -4px 0 6px #aaa;animation:rotate 1s infinite linear;z-index:3}.loading-button:after{display:block;content:"";position:absolute;z-index:2;background-color:inherit;width:100%;height:100%;left:0;top:0}.button-default.loading-button:before{box-shadow:inset 0 -4px 0 6px #6f6f6f}.loading-inline{display:inline-block;pointer-events:none;position:relative}.loading-inline:before{display:block;content:"";position:absolute;left:calc(50% + 1px);top:calc(50% - 11px);box-sizing:border-box;height:14px;width:14px;border:0 solid #d0d0d0;border-radius:50%;box-shadow:inset 0 -3px 0 5px #d0d0d0;animation:rotate 1s infinite linear;z-index:3}.loading-inline:after{display:block;content:"";position:absolute;z-index:2;background-color:inherit;width:100%;height:100%;left:0;top:0}@keyframes rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.table-loading{position:relative}.table-loading .table-loader-wrap{position:absolute;width:100%;height:100%;z-index:9}.table-loading .table-loader-wrap .table-loader-center{position:absolute;top:50%;transform:translateY(-50%);width:100%}.table-loading .tablenav,.table-loading .wp-list-table{opacity:.4}.table-loader{font-size:10px;margin:50px auto;text-indent:-9999em;width:11em;height:11em;border-radius:50%;background:#fff;background:-moz-linear-gradient(left,#fff 10%,hsla(0,0%,100%,0) 42%);background:-webkit-linear-gradient(left,#fff 10%,hsla(0,0%,100%,0) 42%);background:-o-linear-gradient(left,#fff 10%,hsla(0,0%,100%,0) 42%);background:-ms-linear-gradient(left,#fff 10%,hsla(0,0%,100%,0) 42%);background:linear-gradient(90deg,#fff 10%,hsla(0,0%,100%,0) 42%);position:relative;-webkit-animation:tableLoading 1s infinite linear;animation:tableLoading 1s infinite linear;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0)}.table-loader:before{width:50%;height:50%;background:#fff;border-radius:100% 0 0 0}.table-loader:after,.table-loader:before{position:absolute;top:0;left:0;content:""}.table-loader:after{background:#f4f4f4;width:75%;height:75%;border-radius:50%;margin:auto;bottom:0;right:0}@-webkit-keyframes tableLoading{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes tableLoading{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.toasted-container.top-center{top:44px!important}.toasted{background:#23282d!important;color:#e5e5e5!important;font-size:inherit!important;font-weight:inherit!important;justify-content:start!important;border-left:none!important}.toasted.error .dashicons{color:#ff7781}.toasted .dashicons{margin-right:12px;margin-left:-8px;display:inline-block;opacity:.65}.flex-row{display:flex}.flex-col{box-sizing:border-box;padding:0 10px;flex:1 1 0}.flex-col:first-child{padding-left:0}.flex-col:last-child{padding-right:0}.wpra-postbox .hndle{cursor:unset!important}.wpra-shortcode-copy{font-size:13px;background-color:#fff;margin-left:auto;padding:9px 14px;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);border-left:4px solid #0085ba;display:flex;align-items:center}@media (max-width:782px){.wpra-shortcode-copy{display:block}}.wpra-shortcode-copy__icon{padding-left:16px}@media (max-width:782px){.wpra-shortcode-copy__icon{padding-left:0;margin-top:1rem}}.page-title{display:flex;align-items:center;padding:9px 0 4px}@media (max-width:782px){.page-title{display:block}}.page-title a:focus{text-decoration:none}.page-title h1{margin-left:6px;padding:0}.back-button{opacity:.75;text-decoration:none;font-size:20px;display:flex;align-items:center;padding-right:10px;margin-right:4px;border-right:1px solid #b4b4b4}@media (max-width:782px){.back-button{border-right:none;margin-bottom:.5rem}}.back-button .dashicons{margin-right:8px}.tippy-tooltip.light-theme{font-size:13px!important;font-family:unset!important;text-align:left!important}.tippy-tooltip.light-theme hr{border:none;height:1px;background-color:#efefef}.form-input{display:flex;margin:.75rem 0}.form-input--disabled{pointer-events:none}.form-input--disabled .form-input__label :not(.disable-ignored){opacity:.5;user-select:none}.form-input .disable-ignored{opacity:1}.form-input--vertical{flex-direction:column}.form-input--vertical .form-input__label{padding-right:0;padding-bottom:4px;flex-basis:100%}@media (max-width:782px){.form-input{flex-direction:column}.form-input .form-input__label{padding-right:0;padding-bottom:4px;flex-basis:100%}}.form-input:last-child{margin-bottom:0}.form-input__tip{cursor:pointer;display:inline-block;margin-left:4px;opacity:.25;vertical-align:middle}.form-input__tip:hover{opacity:.85}.form-input__tip .dashicons{font-size:18px}.form-input__label{padding-right:12px;flex-basis:260px}.form-input__label-description{padding-top:2px;padding-right:10px;line-height:1.65;opacity:.6;font-size:12px}.form-input__label-description a{pointer-events:auto!important}.form-input__field{flex-grow:1}.form-input__field input:not([type=checkbox]),.form-input__field select,.form-input__field textarea{width:100%;max-width:325px}.built-in{background:#f1f1f1}.built-in [type=checkbox]{display:none}.wpra-preview-link{vertical-align:middle}.wpra-preview-link span.dashicons{opacity:.75;font-size:16px;vertical-align:middle}.wpra-no-cb .column-cb input[type=checkbox]{display:none}@media (max-width:782px){.column.name small{display:block}}@media (max-width:782px){.inside .wpra-preview-link{float:none}}@media (max-width:782px){.wpra-postbox-container{display:flex;flex-direction:column}.wpra-postbox-container .wpra-postbox-last{order:100}}
|
css/templates/list/styles.css
CHANGED
@@ -27,6 +27,16 @@ div.wpra-list-template .wpra-item-list > li.wpra-item > div.wprss-feed-meta > sp
|
|
27 |
list-style: decimal;
|
28 |
}
|
29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
/**
|
31 |
* Old styles
|
32 |
*/
|
27 |
list-style: decimal;
|
28 |
}
|
29 |
|
30 |
+
/* Audio player */
|
31 |
+
.wpra-feed-audio {
|
32 |
+
display: block;
|
33 |
+
margin: 0 5px;
|
34 |
+
}
|
35 |
+
|
36 |
+
.wpra-feed-audio audio {
|
37 |
+
width: 100%;
|
38 |
+
}
|
39 |
+
|
40 |
/**
|
41 |
* Old styles
|
42 |
*/
|
includes/admin-heartbeat.php
CHANGED
@@ -1,88 +1,64 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
add_action(
|
4 |
-
|
5 |
-
*
|
6 |
-
*/
|
7 |
-
function wprss_feed_source_updates() {
|
8 |
-
$response = array();
|
9 |
-
|
10 |
-
if ( ! current_user_can( 'edit_feed_sources' ) ) return $response;
|
11 |
|
12 |
-
|
|
|
|
|
13 |
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
$params = $wprss_heartbeat['params'];
|
18 |
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
*/
|
24 |
-
case 'feed_sources':
|
25 |
-
// Prepare array of IDs for feed sources currently updating
|
26 |
-
$feed_sources_data = array();
|
27 |
-
// Iterate all feed sources
|
28 |
-
foreach ( $params as $feed_id ) {
|
29 |
-
$feed_sources_data[$feed_id] = array();
|
30 |
-
$feed_source_data = &$feed_sources_data[$feed_id];
|
31 |
|
32 |
-
|
33 |
-
|
34 |
-
$
|
35 |
-
|
36 |
-
$
|
37 |
-
$
|
38 |
-
$
|
|
|
|
|
|
|
39 |
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
|
|
|
|
|
|
|
|
45 |
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
}
|
57 |
-
elseif( $next_update === FALSE ) {
|
58 |
-
$feed_source_data['next-update'] = __( 'None', 'wprss' );
|
59 |
-
wprss_activate_feed_source( $feed_id );
|
60 |
-
}
|
61 |
-
else {
|
62 |
-
$time_diff = absint($next_update - time());
|
63 |
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
}
|
68 |
-
// Update the meta field
|
69 |
-
update_post_meta( $feed_id, 'wprss_next_update', $feed_source_data['next-update'] );
|
70 |
|
71 |
-
|
72 |
-
|
73 |
-
|
|
|
|
|
|
|
74 |
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
// Add any error info
|
79 |
-
$errors = get_post_meta( $feed_id, 'wprss_error_last_import', true );
|
80 |
-
$feed_source_data['errors'] = $errors;
|
81 |
-
}
|
82 |
-
// Send back all the IDs
|
83 |
-
$response['wprss_feed_sources_data'] = $feed_sources_data;
|
84 |
-
break;
|
85 |
-
}
|
86 |
-
// Return the response
|
87 |
-
die( json_encode($response) );
|
88 |
-
}
|
1 |
<?php
|
2 |
|
3 |
+
add_action('wp_ajax_wprss_feed_source_table_ajax', function () {
|
4 |
+
$response = [];
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
|
6 |
+
if (!current_user_can('edit_feed_sources') || empty($_POST['wprss_heartbeat'])) {
|
7 |
+
return [];
|
8 |
+
}
|
9 |
|
10 |
+
$request = $_POST['wprss_heartbeat'];
|
11 |
+
$action = isset($request['action']) ? $request['action'] : '';
|
12 |
+
$params = isset($request['params']) ? $request['params'] : '';
|
|
|
13 |
|
14 |
+
switch ($action) {
|
15 |
+
case 'feed_sources':
|
16 |
+
{
|
17 |
+
$feeds = [];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
|
19 |
+
foreach ($params as $feedId) {
|
20 |
+
$nextFetch = wprss_get_next_feed_source_update($feedId, false);
|
21 |
+
$isFetching = wprss_is_feed_source_updating($feedId);
|
22 |
+
$isDeleting = wprss_is_feed_source_deleting($feedId);
|
23 |
+
$fetchesSoon = $nextFetch !== false && $nextFetch < 2 && $nextFetch > 0;
|
24 |
+
$isActive = wprss_is_feed_source_active($feedId);
|
25 |
+
$numItems = wprss_get_feed_items_for_source($feedId)->post_count;
|
26 |
+
$lastUpdateTime = get_post_meta($feedId, 'wprss_last_update', true);
|
27 |
+
$lastUpdateItems = get_post_meta($feedId, 'wprss_last_update_items', true);
|
28 |
+
$errors = get_post_meta($feedId, 'wprss_error_last_import', true);
|
29 |
|
30 |
+
if ($nextFetch === false) {
|
31 |
+
$nextFetchText = __('None', 'wprss');
|
32 |
+
} elseif ($isActive) {
|
33 |
+
$nextFetchText = $fetchesSoon
|
34 |
+
? _x('now', 'Next update: now', 'wprss')
|
35 |
+
: human_time_diff($nextFetch, time());
|
36 |
+
} else {
|
37 |
+
$nextFetchText = __('...', 'wprss');
|
38 |
+
}
|
39 |
|
40 |
+
$feeds[$feedId] = [
|
41 |
+
'active' => $isActive,
|
42 |
+
'fetching' => $isFetching || $fetchesSoon,
|
43 |
+
'deleting' => $isDeleting,
|
44 |
+
'items' => $numItems,
|
45 |
+
'next-update' => $nextFetchText,
|
46 |
+
'last-update' => empty($lastUpdateTime) ? '' : human_time_diff($lastUpdateTime, time()),
|
47 |
+
'last-update-imported' => $lastUpdateItems,
|
48 |
+
'errors' => $errors,
|
49 |
+
];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
|
51 |
+
update_post_meta($feedId, 'wprss_items_imported', $numItems);
|
52 |
+
update_post_meta($feedId, 'wprss_next_update', $nextFetchText);
|
53 |
+
}
|
|
|
|
|
|
|
54 |
|
55 |
+
$response = [
|
56 |
+
'wprss_feed_sources_data' => $feeds,
|
57 |
+
];
|
58 |
+
break;
|
59 |
+
}
|
60 |
+
}
|
61 |
|
62 |
+
echo json_encode($response);
|
63 |
+
die;
|
64 |
+
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/cron-jobs.php
CHANGED
@@ -1,361 +1,384 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
define('WPRA_FETCH_ALL_FEEDS_HOOK', 'wprss_fetch_all_feeds_hook');
|
4 |
-
define('WPRA_FETCH_FEED_HOOK', 'wprss_fetch_single_feed_hook');
|
5 |
-
define('WPRA_TRUNCATE_ITEMS_HOOK', 'wprss_truncate_posts_hook');
|
6 |
-
define('WPRA_ACTIVATE_FEED_HOOK', 'wprss_activate_feed_schedule_hook');
|
7 |
-
define('WPRA_PAUSE_FEED_HOOK', 'wprss_pause_feed_schedule_hook');
|
8 |
-
|
9 |
-
define('WPRA_TRUNCATE_ITEMS_INTERVAL', 'daily');
|
10 |
-
|
11 |
-
/**
|
12 |
-
* Alias for add_action, primarily used for readability to distinguish between cron-events and normal hooks.
|
13 |
-
*
|
14 |
-
* @since 4.17
|
15 |
-
*
|
16 |
-
* @param string $cron The cron hook event.
|
17 |
-
* @param callable $callback The callback to invoke for the cron.
|
18 |
-
*/
|
19 |
-
function wpra_on_cron_do($cron, $callback)
|
20 |
-
{
|
21 |
-
add_action($cron, $callback);
|
22 |
-
}
|
23 |
-
|
24 |
-
// Cron events
|
25 |
-
wpra_on_cron_do(WPRA_FETCH_ALL_FEEDS_HOOK, 'wprss_fetch_insert_all_feed_items_from_cron');
|
26 |
-
wpra_on_cron_do(WPRA_TRUNCATE_ITEMS_HOOK, 'wprss_truncate_posts');
|
27 |
-
wpra_on_cron_do(WPRA_ACTIVATE_FEED_HOOK, 'wprss_activate_feed_source');
|
28 |
-
wpra_on_cron_do(WPRA_PAUSE_FEED_HOOK, 'wprss_pause_feed_source');
|
29 |
-
|
30 |
-
// Initialize crons that must always be scheduled
|
31 |
-
add_action('init', 'wpra_init_crons');
|
32 |
-
|
33 |
-
// When a feed source is activated, schedule its fetch cron
|
34 |
-
add_action('wprss_on_feed_source_activated', 'wprss_feed_source_update_start_schedule');
|
35 |
-
|
36 |
-
// When a feed source is paused, cancel its fetch cron
|
37 |
-
add_action('wprss_on_feed_source_paused', 'wprss_feed_source_update_stop_schedule');
|
38 |
-
|
39 |
-
// Filter the possible cron intervals to add more options
|
40 |
-
add_filter('cron_schedules', 'wprss_filter_cron_schedules');
|
41 |
-
|
42 |
-
/**
|
43 |
-
* Initializes the cron jobs.
|
44 |
-
*
|
45 |
-
* @since 4.17
|
46 |
-
*/
|
47 |
-
function wpra_init_crons()
|
48 |
-
{
|
49 |
-
wprss_schedule_fetch_all_feeds_cron();
|
50 |
-
wprss_schedule_truncate_posts_cron();
|
51 |
-
}
|
52 |
-
|
53 |
-
/**
|
54 |
-
* Creates the cron to fetch feeds.
|
55 |
-
*
|
56 |
-
* @since 2.0
|
57 |
-
*/
|
58 |
-
function wprss_schedule_fetch_all_feeds_cron()
|
59 |
-
{
|
60 |
-
// Check if the global fetch is scheduled
|
61 |
-
if (wp_next_scheduled(WPRA_FETCH_ALL_FEEDS_HOOK)) {
|
62 |
-
return;
|
63 |
-
}
|
64 |
-
|
65 |
-
// If the event is not scheduled, schedule it
|
66 |
-
$interval = wprss_get_general_setting('cron_interval');
|
67 |
-
wp_schedule_event(time(), $interval, WPRA_FETCH_ALL_FEEDS_HOOK);
|
68 |
-
}
|
69 |
-
|
70 |
-
/**
|
71 |
-
* Gets the time of the global fetch cron.
|
72 |
-
*
|
73 |
-
* @since 4.17
|
74 |
-
*
|
75 |
-
* @return false|string A time string in the form `H:i`
|
76 |
-
*/
|
77 |
-
function wprss_get_global_update_time()
|
78 |
-
{
|
79 |
-
// If the global fetch cron is not scheduled, schedule it
|
80 |
-
wprss_schedule_fetch_all_feeds_cron();
|
81 |
-
|
82 |
-
// Get the timestamp for the next run
|
83 |
-
$next = wp_next_scheduled(WPRA_FETCH_ALL_FEEDS_HOOK);
|
84 |
-
|
85 |
-
return date('H:i', $next);
|
86 |
-
}
|
87 |
-
|
88 |
-
/**
|
89 |
-
* Creates the cron to truncate wprss_feed_item posts daily
|
90 |
-
*
|
91 |
-
* @since 2.0
|
92 |
-
*/
|
93 |
-
function wprss_schedule_truncate_posts_cron()
|
94 |
-
{
|
95 |
-
// Check if the truncatation cron is scheduled
|
96 |
-
if (wp_next_scheduled(WPRA_TRUNCATE_ITEMS_HOOK)) {
|
97 |
-
return;
|
98 |
-
}
|
99 |
-
|
100 |
-
// If not, schedule it
|
101 |
-
wp_schedule_event(time(), WPRA_TRUNCATE_ITEMS_INTERVAL, WPRA_TRUNCATE_ITEMS_HOOK);
|
102 |
-
}
|
103 |
-
|
104 |
-
/**
|
105 |
-
* Updates the feed processing cron job schedules.
|
106 |
-
* Removes the current schedules and adds the ones in the feed source's meta.
|
107 |
-
*
|
108 |
-
* @since 3.8
|
109 |
-
*
|
110 |
-
* @param int $feed_id The id of the wprss_feed
|
111 |
-
*/
|
112 |
-
function wprss_update_feed_processing_schedules($feed_id)
|
113 |
-
{
|
114 |
-
// Get the feed's activate and pause times
|
115 |
-
$activate = get_post_meta($feed_id, 'wprss_activate_feed', true);
|
116 |
-
$pause = get_post_meta($feed_id, 'wprss_pause_feed', true);
|
117 |
-
|
118 |
-
// Parse as time strings
|
119 |
-
$activate = wprss_strtotime($activate);
|
120 |
-
$pause = wprss_strtotime($pause);
|
121 |
-
|
122 |
-
if (!empty($activate)) {
|
123 |
-
wpra_reschedule($activate, WPRA_ACTIVATE_FEED_HOOK, null, [$feed_id]);
|
124 |
-
}
|
125 |
-
|
126 |
-
if ($pause !== '') {
|
127 |
-
wpra_reschedule($pause, WPRA_PAUSE_FEED_HOOK, null, [$feed_id]);
|
128 |
-
}
|
129 |
-
}
|
130 |
-
|
131 |
-
/**
|
132 |
-
* Starts the looping schedule for a feed source. Runs on a schedule
|
133 |
-
*
|
134 |
-
* @since 3.9
|
135 |
-
*
|
136 |
-
* @param int $feed_id The ID of the feed source
|
137 |
-
*/
|
138 |
-
function wprss_feed_source_update_start_schedule($feed_id)
|
139 |
-
{
|
140 |
-
// Stop any currently scheduled update operations
|
141 |
-
wprss_feed_source_update_stop_schedule($feed_id);
|
142 |
-
|
143 |
-
// Get the interval
|
144 |
-
$interval = get_post_meta($feed_id, 'wprss_update_interval', true);
|
145 |
-
// Do nothing if the feed source has no update interval (not sure if possible) or if the interval
|
146 |
-
// is set to global
|
147 |
-
if ($interval === '' || $interval === wprss_get_default_feed_source_update_interval()) {
|
148 |
-
return;
|
149 |
-
}
|
150 |
-
|
151 |
-
wp_schedule_event(time(), $interval, WPRA_FETCH_FEED_HOOK, [strval($feed_id)]);
|
152 |
-
}
|
153 |
-
|
154 |
-
/**
|
155 |
-
* Stops any scheduled update operations for a feed source. Runs on a schedule.
|
156 |
-
*
|
157 |
-
* @since 3.9
|
158 |
-
*
|
159 |
-
* @param int $feed_id The ID of the feed source ( wprss_feed )
|
160 |
-
*/
|
161 |
-
function wprss_feed_source_update_stop_schedule($feed_id)
|
162 |
-
{
|
163 |
-
$timestamp = wprss_get_next_feed_source_update($feed_id);
|
164 |
-
|
165 |
-
// If a schedule exists, unschedule it
|
166 |
-
if ($timestamp !== false) {
|
167 |
-
wp_unschedule_event($timestamp, WPRA_FETCH_FEED_HOOK, [strval($feed_id)]);
|
168 |
-
}
|
169 |
-
}
|
170 |
-
|
171 |
-
/**
|
172 |
-
* Returns the timestamp for the next
|
173 |
-
*
|
174 |
-
* @since
|
175 |
-
*
|
176 |
-
* @
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
*
|
188 |
-
*
|
189 |
-
* @
|
190 |
-
*
|
191 |
-
*
|
192 |
-
* @
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
*
|
213 |
-
*
|
214 |
-
* @
|
215 |
-
*
|
216 |
-
* @param string $
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
*
|
255 |
-
*
|
256 |
-
*
|
257 |
-
*
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
*
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
$
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
define('WPRA_FETCH_ALL_FEEDS_HOOK', 'wprss_fetch_all_feeds_hook');
|
4 |
+
define('WPRA_FETCH_FEED_HOOK', 'wprss_fetch_single_feed_hook');
|
5 |
+
define('WPRA_TRUNCATE_ITEMS_HOOK', 'wprss_truncate_posts_hook');
|
6 |
+
define('WPRA_ACTIVATE_FEED_HOOK', 'wprss_activate_feed_schedule_hook');
|
7 |
+
define('WPRA_PAUSE_FEED_HOOK', 'wprss_pause_feed_schedule_hook');
|
8 |
+
|
9 |
+
define('WPRA_TRUNCATE_ITEMS_INTERVAL', 'daily');
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Alias for add_action, primarily used for readability to distinguish between cron-events and normal hooks.
|
13 |
+
*
|
14 |
+
* @since 4.17
|
15 |
+
*
|
16 |
+
* @param string $cron The cron hook event.
|
17 |
+
* @param callable $callback The callback to invoke for the cron.
|
18 |
+
*/
|
19 |
+
function wpra_on_cron_do($cron, $callback)
|
20 |
+
{
|
21 |
+
add_action($cron, $callback);
|
22 |
+
}
|
23 |
+
|
24 |
+
// Cron events
|
25 |
+
wpra_on_cron_do(WPRA_FETCH_ALL_FEEDS_HOOK, 'wprss_fetch_insert_all_feed_items_from_cron');
|
26 |
+
wpra_on_cron_do(WPRA_TRUNCATE_ITEMS_HOOK, 'wprss_truncate_posts');
|
27 |
+
wpra_on_cron_do(WPRA_ACTIVATE_FEED_HOOK, 'wprss_activate_feed_source');
|
28 |
+
wpra_on_cron_do(WPRA_PAUSE_FEED_HOOK, 'wprss_pause_feed_source');
|
29 |
+
|
30 |
+
// Initialize crons that must always be scheduled
|
31 |
+
add_action('init', 'wpra_init_crons');
|
32 |
+
|
33 |
+
// When a feed source is activated, schedule its fetch cron
|
34 |
+
add_action('wprss_on_feed_source_activated', 'wprss_feed_source_update_start_schedule');
|
35 |
+
|
36 |
+
// When a feed source is paused, cancel its fetch cron
|
37 |
+
add_action('wprss_on_feed_source_paused', 'wprss_feed_source_update_stop_schedule');
|
38 |
+
|
39 |
+
// Filter the possible cron intervals to add more options
|
40 |
+
add_filter('cron_schedules', 'wprss_filter_cron_schedules');
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Initializes the cron jobs.
|
44 |
+
*
|
45 |
+
* @since 4.17
|
46 |
+
*/
|
47 |
+
function wpra_init_crons()
|
48 |
+
{
|
49 |
+
wprss_schedule_fetch_all_feeds_cron();
|
50 |
+
wprss_schedule_truncate_posts_cron();
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Creates the cron to fetch feeds.
|
55 |
+
*
|
56 |
+
* @since 2.0
|
57 |
+
*/
|
58 |
+
function wprss_schedule_fetch_all_feeds_cron()
|
59 |
+
{
|
60 |
+
// Check if the global fetch is scheduled
|
61 |
+
if (wp_next_scheduled(WPRA_FETCH_ALL_FEEDS_HOOK)) {
|
62 |
+
return;
|
63 |
+
}
|
64 |
+
|
65 |
+
// If the event is not scheduled, schedule it
|
66 |
+
$interval = wprss_get_general_setting('cron_interval');
|
67 |
+
wp_schedule_event(time(), $interval, WPRA_FETCH_ALL_FEEDS_HOOK);
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Gets the time of the global fetch cron.
|
72 |
+
*
|
73 |
+
* @since 4.17
|
74 |
+
*
|
75 |
+
* @return false|string A time string in the form `H:i`
|
76 |
+
*/
|
77 |
+
function wprss_get_global_update_time()
|
78 |
+
{
|
79 |
+
// If the global fetch cron is not scheduled, schedule it
|
80 |
+
wprss_schedule_fetch_all_feeds_cron();
|
81 |
+
|
82 |
+
// Get the timestamp for the next run
|
83 |
+
$next = wp_next_scheduled(WPRA_FETCH_ALL_FEEDS_HOOK);
|
84 |
+
|
85 |
+
return date('H:i', $next);
|
86 |
+
}
|
87 |
+
|
88 |
+
/**
|
89 |
+
* Creates the cron to truncate wprss_feed_item posts daily
|
90 |
+
*
|
91 |
+
* @since 2.0
|
92 |
+
*/
|
93 |
+
function wprss_schedule_truncate_posts_cron()
|
94 |
+
{
|
95 |
+
// Check if the truncatation cron is scheduled
|
96 |
+
if (wp_next_scheduled(WPRA_TRUNCATE_ITEMS_HOOK)) {
|
97 |
+
return;
|
98 |
+
}
|
99 |
+
|
100 |
+
// If not, schedule it
|
101 |
+
wp_schedule_event(time(), WPRA_TRUNCATE_ITEMS_INTERVAL, WPRA_TRUNCATE_ITEMS_HOOK);
|
102 |
+
}
|
103 |
+
|
104 |
+
/**
|
105 |
+
* Updates the feed processing cron job schedules.
|
106 |
+
* Removes the current schedules and adds the ones in the feed source's meta.
|
107 |
+
*
|
108 |
+
* @since 3.8
|
109 |
+
*
|
110 |
+
* @param int $feed_id The id of the wprss_feed
|
111 |
+
*/
|
112 |
+
function wprss_update_feed_processing_schedules($feed_id)
|
113 |
+
{
|
114 |
+
// Get the feed's activate and pause times
|
115 |
+
$activate = get_post_meta($feed_id, 'wprss_activate_feed', true);
|
116 |
+
$pause = get_post_meta($feed_id, 'wprss_pause_feed', true);
|
117 |
+
|
118 |
+
// Parse as time strings
|
119 |
+
$activate = wprss_strtotime($activate);
|
120 |
+
$pause = wprss_strtotime($pause);
|
121 |
+
|
122 |
+
if (!empty($activate)) {
|
123 |
+
wpra_reschedule($activate, WPRA_ACTIVATE_FEED_HOOK, null, [$feed_id]);
|
124 |
+
}
|
125 |
+
|
126 |
+
if ($pause !== '') {
|
127 |
+
wpra_reschedule($pause, WPRA_PAUSE_FEED_HOOK, null, [$feed_id]);
|
128 |
+
}
|
129 |
+
}
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Starts the looping schedule for a feed source. Runs on a schedule
|
133 |
+
*
|
134 |
+
* @since 3.9
|
135 |
+
*
|
136 |
+
* @param int $feed_id The ID of the feed source
|
137 |
+
*/
|
138 |
+
function wprss_feed_source_update_start_schedule($feed_id)
|
139 |
+
{
|
140 |
+
// Stop any currently scheduled update operations
|
141 |
+
wprss_feed_source_update_stop_schedule($feed_id);
|
142 |
+
|
143 |
+
// Get the interval
|
144 |
+
$interval = get_post_meta($feed_id, 'wprss_update_interval', true);
|
145 |
+
// Do nothing if the feed source has no update interval (not sure if possible) or if the interval
|
146 |
+
// is set to global
|
147 |
+
if ($interval === '' || $interval === wprss_get_default_feed_source_update_interval()) {
|
148 |
+
return;
|
149 |
+
}
|
150 |
+
|
151 |
+
wp_schedule_event(time(), $interval, WPRA_FETCH_FEED_HOOK, [strval($feed_id)]);
|
152 |
+
}
|
153 |
+
|
154 |
+
/**
|
155 |
+
* Stops any scheduled update operations for a feed source. Runs on a schedule.
|
156 |
+
*
|
157 |
+
* @since 3.9
|
158 |
+
*
|
159 |
+
* @param int $feed_id The ID of the feed source ( wprss_feed )
|
160 |
+
*/
|
161 |
+
function wprss_feed_source_update_stop_schedule($feed_id)
|
162 |
+
{
|
163 |
+
$timestamp = wprss_get_next_feed_source_update($feed_id);
|
164 |
+
|
165 |
+
// If a schedule exists, unschedule it
|
166 |
+
if ($timestamp !== false) {
|
167 |
+
wp_unschedule_event($timestamp, WPRA_FETCH_FEED_HOOK, [strval($feed_id)]);
|
168 |
+
}
|
169 |
+
}
|
170 |
+
|
171 |
+
/**
|
172 |
+
* Returns the timestamp for the next global update
|
173 |
+
*
|
174 |
+
* @since 4.18
|
175 |
+
*
|
176 |
+
* @return int The timestamp of the next global update operation, or false if no update is scheduled.
|
177 |
+
*/
|
178 |
+
function wprss_get_next_global_update()
|
179 |
+
{
|
180 |
+
return wp_next_scheduled(WPRA_FETCH_ALL_FEEDS_HOOK, []);
|
181 |
+
}
|
182 |
+
|
183 |
+
/**
|
184 |
+
* Returns the timestamp for the next feed source update
|
185 |
+
*
|
186 |
+
* @since 3.9
|
187 |
+
*
|
188 |
+
* @param int $feed_id The ID of the feed source ( wprss_feed )
|
189 |
+
* @param bool $explicit If true, the function won't default to the global update if the feed doesn't use its own
|
190 |
+
* update interval.
|
191 |
+
*
|
192 |
+
* @return int The timestamp of the next update operation, or false if no update is scheduled.
|
193 |
+
*/
|
194 |
+
function wprss_get_next_feed_source_update($feed_id, $explicit = true)
|
195 |
+
{
|
196 |
+
$next = wp_next_scheduled(WPRA_FETCH_FEED_HOOK, [strval($feed_id)]);
|
197 |
+
|
198 |
+
if ($explicit) {
|
199 |
+
return $next;
|
200 |
+
}
|
201 |
+
|
202 |
+
$meta = get_post_meta($feed_id, 'wprss_update_interval', true);
|
203 |
+
|
204 |
+
return (empty($meta) || $meta === wprss_get_default_feed_source_update_interval())
|
205 |
+
? wprss_get_next_global_update()
|
206 |
+
: $next;
|
207 |
+
}
|
208 |
+
|
209 |
+
/**
|
210 |
+
* Reschedules a cron event, unscheduling any existing matching crons.
|
211 |
+
*
|
212 |
+
* @since 4.17
|
213 |
+
*
|
214 |
+
* @param int $timestamp The timestamp.
|
215 |
+
* @param string $event The hook event.
|
216 |
+
* @param string|null $recurrence The recurrence.
|
217 |
+
* @param array $args Additional args.
|
218 |
+
*/
|
219 |
+
function wpra_reschedule($timestamp, $event, $recurrence = null, $args = [])
|
220 |
+
{
|
221 |
+
$existing = wp_next_scheduled($event, $args);
|
222 |
+
|
223 |
+
if ($existing !== false) {
|
224 |
+
wp_unschedule_event($existing, $event, $args);
|
225 |
+
}
|
226 |
+
|
227 |
+
if ($recurrence === null) {
|
228 |
+
wp_schedule_single_event($timestamp, $event, $args);
|
229 |
+
} else {
|
230 |
+
wp_schedule_event($timestamp, $recurrence, $event, $args);
|
231 |
+
}
|
232 |
+
}
|
233 |
+
|
234 |
+
/**
|
235 |
+
* Clears all events scheduled to a particular hook, regardless of their args.
|
236 |
+
*
|
237 |
+
* @since 4.17.9
|
238 |
+
*
|
239 |
+
* @param string $hook
|
240 |
+
*/
|
241 |
+
function wpra_clear_all_scheduled_hooks($hook)
|
242 |
+
{
|
243 |
+
foreach (wpra_get_crons() as $key => $events) {
|
244 |
+
if ($key === $hook) {
|
245 |
+
foreach ($events as $event) {
|
246 |
+
wp_clear_scheduled_hook($key, $event->args);
|
247 |
+
}
|
248 |
+
}
|
249 |
+
}
|
250 |
+
}
|
251 |
+
|
252 |
+
/**
|
253 |
+
* Retrieves all cron jobs from WordPress.
|
254 |
+
*
|
255 |
+
* @since 4.17.9
|
256 |
+
*
|
257 |
+
* @return array A mapping of hook names to sub-arrays of even objects.
|
258 |
+
*/
|
259 |
+
function wpra_get_crons()
|
260 |
+
{
|
261 |
+
$cronsArray = _get_cron_array();
|
262 |
+
$crons = [];
|
263 |
+
foreach ($cronsArray as $ts => $list) {
|
264 |
+
foreach ($list as $hook => $events) {
|
265 |
+
$crons[$hook] = isset($crons[$hook]) ? $crons[$hook] : [];
|
266 |
+
|
267 |
+
foreach ($events as $event) {
|
268 |
+
$crons[$hook][] = (object) $event;
|
269 |
+
}
|
270 |
+
}
|
271 |
+
}
|
272 |
+
|
273 |
+
return $crons;
|
274 |
+
}
|
275 |
+
|
276 |
+
/**
|
277 |
+
* Retrieves the cron schedules that WPRA uses.
|
278 |
+
*
|
279 |
+
* @since 4.17
|
280 |
+
*
|
281 |
+
* @return array
|
282 |
+
*/
|
283 |
+
function wpra_get_cron_schedules()
|
284 |
+
{
|
285 |
+
return [
|
286 |
+
'five_min' => array(
|
287 |
+
'display' => __('Once every 5 minutes', 'wprss'),
|
288 |
+
'interval' => MINUTE_IN_SECONDS * 5,
|
289 |
+
),
|
290 |
+
'ten_min' => array(
|
291 |
+
'display' => __('Once every 10 minutes', 'wprss'),
|
292 |
+
'interval' => MINUTE_IN_SECONDS * 10,
|
293 |
+
),
|
294 |
+
'fifteen_min' => array(
|
295 |
+
'display' => __('Once every 15 minutes', 'wprss'),
|
296 |
+
'interval' => MINUTE_IN_SECONDS * 15,
|
297 |
+
),
|
298 |
+
'thirty_min' => array(
|
299 |
+
'display' => __('Once every 30 minutes', 'wprss'),
|
300 |
+
'interval' => MINUTE_IN_SECONDS * 30,
|
301 |
+
),
|
302 |
+
'two_hours' => array(
|
303 |
+
'display' => __('Once every 2 hours', 'wprss'),
|
304 |
+
'interval' => HOUR_IN_SECONDS * 2,
|
305 |
+
),
|
306 |
+
'weekly' => array(
|
307 |
+
'display' => __('Once weekly', 'wprss'),
|
308 |
+
'interval' => WEEK_IN_SECONDS,
|
309 |
+
),
|
310 |
+
];
|
311 |
+
}
|
312 |
+
|
313 |
+
/**
|
314 |
+
* Registers the cron schedules to WordPress, avoiding duplicates.
|
315 |
+
*
|
316 |
+
* @since 3.0
|
317 |
+
*/
|
318 |
+
function wprss_filter_cron_schedules($schedules)
|
319 |
+
{
|
320 |
+
// Pluck out the intervals
|
321 |
+
$intervals = array_map(function ($schedule) {
|
322 |
+
return $schedule['interval'];
|
323 |
+
}, $schedules);
|
324 |
+
// Get a map of intervals -> keys for fast interval lookup
|
325 |
+
$intervalsMap = array_flip($intervals);
|
326 |
+
|
327 |
+
// Register each WPRA schedule
|
328 |
+
$wpraSchedules = wpra_get_cron_schedules();
|
329 |
+
foreach ($wpraSchedules as $key => $schedule) {
|
330 |
+
// If the interval already exists, skip the schedule
|
331 |
+
if (array_key_exists($schedule['interval'], $intervalsMap)) {
|
332 |
+
continue;
|
333 |
+
}
|
334 |
+
|
335 |
+
$schedules[$key] = $schedule;
|
336 |
+
}
|
337 |
+
|
338 |
+
return $schedules;
|
339 |
+
}
|
340 |
+
|
341 |
+
/**
|
342 |
+
* Deletes a custom cron schedule.
|
343 |
+
*
|
344 |
+
* Credits: WPCrontrol
|
345 |
+
*
|
346 |
+
* @since 3.7
|
347 |
+
*
|
348 |
+
* @param string $name The internal_name of the schedule to delete.
|
349 |
+
*/
|
350 |
+
function wprss_delete_schedule($name)
|
351 |
+
{
|
352 |
+
$scheds = get_option('crontrol_schedules', array());
|
353 |
+
unset($scheds[$name]);
|
354 |
+
update_option('crontrol_schedules', $scheds);
|
355 |
+
}
|
356 |
+
|
357 |
+
/**
|
358 |
+
* Parses the date time string into a UTC timestamp.
|
359 |
+
* The string must be in the format: m/d/y h:m:s
|
360 |
+
*
|
361 |
+
* @since 3.9
|
362 |
+
*/
|
363 |
+
function wprss_strtotime($str)
|
364 |
+
{
|
365 |
+
if (empty($str)) {
|
366 |
+
return 0;
|
367 |
+
}
|
368 |
+
|
369 |
+
$parts = explode(' ', $str);
|
370 |
+
$date = explode('/', $parts[0]);
|
371 |
+
$time = explode(':', $parts[1]);
|
372 |
+
|
373 |
+
return mktime($time[0], $time[1], $time[2], $date[1], $date[0], $date[2]);
|
374 |
+
}
|
375 |
+
|
376 |
+
/**
|
377 |
+
* Returns the default value for the per feed source update interval
|
378 |
+
*
|
379 |
+
* @since 3.9
|
380 |
+
*/
|
381 |
+
function wprss_get_default_feed_source_update_interval()
|
382 |
+
{
|
383 |
+
return 'global';
|
384 |
+
}
|
includes/feed-importing-images.php
CHANGED
@@ -451,7 +451,7 @@ function wpra_get_item_content_images($item)
|
|
451 |
$i = 0;
|
452 |
$images = [];
|
453 |
while (!empty($matches[1][$i])) {
|
454 |
-
$imageUrl = urldecode(trim($matches[1][$i]));
|
455 |
// Increment early to allow the iteration body to use "continue" statements
|
456 |
$i++;
|
457 |
|
@@ -703,6 +703,9 @@ function wpra_media_sideload_image($url = null, $post_id = null, $attach = null,
|
|
703 |
return new WP_Error('missing', "Need a valid URL and post ID...");
|
704 |
}
|
705 |
|
|
|
|
|
|
|
706 |
// Check if the image already exists in the media library
|
707 |
$existing = get_posts([
|
708 |
'post_type' => 'attachment',
|
@@ -724,6 +727,9 @@ function wpra_media_sideload_image($url = null, $post_id = null, $attach = null,
|
|
724 |
/* @var $img WPRSS_Image_Cache_Image */
|
725 |
$url = apply_filters('wpra/images/url_to_download', $url);
|
726 |
|
|
|
|
|
|
|
727 |
$img = $images->get($url);
|
728 |
} catch (Exception $e) {
|
729 |
return new WP_Error('could_not_load_image', $e->getMessage(), $url);
|
@@ -786,6 +792,9 @@ function wpra_media_sideload_image($url = null, $post_id = null, $attach = null,
|
|
786 |
}
|
787 |
}
|
788 |
|
|
|
|
|
|
|
789 |
$file_array['name'] = $baseName;
|
790 |
|
791 |
// set additional wp_posts columns
|
@@ -849,6 +858,9 @@ function wpra_media_sideload_image($url = null, $post_id = null, $attach = null,
|
|
849 |
// For some reason, deep down filesize() returned 0 for the temporary file without this
|
850 |
clearstatcache(false, $file_array['tmp_name']);
|
851 |
|
|
|
|
|
|
|
852 |
// $post_data can override the items saved to wp_posts table,
|
853 |
// like post_mime_type, guid, post_parent, post_title, post_content, post_status
|
854 |
$att_id = media_handle_sideload($file_array, $post_id, '', $post_data);
|
451 |
$i = 0;
|
452 |
$images = [];
|
453 |
while (!empty($matches[1][$i])) {
|
454 |
+
$imageUrl = urldecode(trim(html_entity_decode($matches[1][$i])));
|
455 |
// Increment early to allow the iteration body to use "continue" statements
|
456 |
$i++;
|
457 |
|
703 |
return new WP_Error('missing', "Need a valid URL and post ID...");
|
704 |
}
|
705 |
|
706 |
+
// Allow 10 seconds prior to beginning the actual download
|
707 |
+
set_time_limit(10);
|
708 |
+
|
709 |
// Check if the image already exists in the media library
|
710 |
$existing = get_posts([
|
711 |
'post_type' => 'attachment',
|
727 |
/* @var $img WPRSS_Image_Cache_Image */
|
728 |
$url = apply_filters('wpra/images/url_to_download', $url);
|
729 |
|
730 |
+
// Allow 30 seconds for the download process
|
731 |
+
set_time_limit(30);
|
732 |
+
|
733 |
$img = $images->get($url);
|
734 |
} catch (Exception $e) {
|
735 |
return new WP_Error('could_not_load_image', $e->getMessage(), $url);
|
792 |
}
|
793 |
}
|
794 |
|
795 |
+
// Fix for Facebook images that come from a PHP endpoint
|
796 |
+
$baseName = str_replace($baseName, 'safe_image.php', 'fb_image.jpeg');
|
797 |
+
|
798 |
$file_array['name'] = $baseName;
|
799 |
|
800 |
// set additional wp_posts columns
|
858 |
// For some reason, deep down filesize() returned 0 for the temporary file without this
|
859 |
clearstatcache(false, $file_array['tmp_name']);
|
860 |
|
861 |
+
// Allocate 10 for WordPress to copy and process the image
|
862 |
+
set_time_limit(10);
|
863 |
+
|
864 |
// $post_data can override the items saved to wp_posts table,
|
865 |
// like post_mime_type, guid, post_parent, post_title, post_content, post_status
|
866 |
$att_id = media_handle_sideload($file_array, $post_id, '', $post_data);
|
includes/feed-importing-new.php
ADDED
@@ -0,0 +1,407 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace RebelCode\Wpra\Core\Importer;
|
4 |
+
|
5 |
+
use SimplePie_Item;
|
6 |
+
use WP_Post;
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Fetches new items from a feed.
|
10 |
+
*
|
11 |
+
* @since [*next-version*]
|
12 |
+
*
|
13 |
+
* @param int|string $feedId The ID of the feed source.
|
14 |
+
*
|
15 |
+
* @return SimplePie_Item[]
|
16 |
+
*/
|
17 |
+
function fetchNewItems($feedId)
|
18 |
+
{
|
19 |
+
$feed = get_post($feedId);
|
20 |
+
$logger = wpra_get_logger($feedId);
|
21 |
+
|
22 |
+
if ($feed instanceof WP_Post) {
|
23 |
+
$logger->info('Fetching items');
|
24 |
+
} else {
|
25 |
+
$logger->error('Feed source #{0} does not exist', [$feedId]);
|
26 |
+
}
|
27 |
+
|
28 |
+
// Filter the URL
|
29 |
+
$feedUrl = apply_filters('wprss_feed_source_url', $feed->wprss_url, $feedId);
|
30 |
+
if ($feedUrl !== $feed->wprss_url) {
|
31 |
+
$logger->debug('Filtered RSS URL: {0}', [$feedUrl]);
|
32 |
+
}
|
33 |
+
|
34 |
+
// Validate the URL
|
35 |
+
if (!wprss_validate_url($feedUrl)) {
|
36 |
+
$logger->error('Feed URL is not valid!');
|
37 |
+
|
38 |
+
return [];
|
39 |
+
}
|
40 |
+
|
41 |
+
// Get the feed items from the source
|
42 |
+
$items = wprss_get_feed_items($feedUrl, $feedId);
|
43 |
+
$items = (empty($items) || !is_array($items)) ? [] : $items;
|
44 |
+
|
45 |
+
// See `wprss_item_comparators` filter
|
46 |
+
wprss_sort_items($items);
|
47 |
+
|
48 |
+
// Apply fixed limit
|
49 |
+
{
|
50 |
+
$feedLimit = $feed->wprss_limit;
|
51 |
+
$globalLimit = wprss_get_general_setting('limit_feed_items_imported');
|
52 |
+
$filteredLimits = array_filter([$feedLimit, $globalLimit], function ($limit) {
|
53 |
+
return !empty($limit) && intval($limit) > 0;
|
54 |
+
});
|
55 |
+
$limit = (int) reset($filteredLimits);
|
56 |
+
|
57 |
+
if ($limit > 0) {
|
58 |
+
$preLimitCount = count($items);
|
59 |
+
$items = array_slice($items, 0, $limit);
|
60 |
+
|
61 |
+
$logger->debug('{0} items in the feed, {1} items after applying limit', [
|
62 |
+
$preLimitCount,
|
63 |
+
$limit,
|
64 |
+
]);
|
65 |
+
}
|
66 |
+
}
|
67 |
+
|
68 |
+
// Process "unique titles only" option
|
69 |
+
{
|
70 |
+
$feedUto = $feed->wprss_unique_titles;
|
71 |
+
$globalUto = wprss_get_general_setting('unique_titles');
|
72 |
+
$uto = empty($feedUto) ? $globalUto : $feedUto;
|
73 |
+
$uto = filter_var($uto, FILTER_VALIDATE_BOOLEAN);
|
74 |
+
}
|
75 |
+
|
76 |
+
$items = apply_filters('wpra/importer/items/before_filters', $items, $feed, $logger);
|
77 |
+
|
78 |
+
// Gather the titles and permalinks of the items that are being fetched
|
79 |
+
$existingTitles = [];
|
80 |
+
$existingPermalinks = wprss_get_existing_permalinks($feedId);
|
81 |
+
|
82 |
+
$newItems = [];
|
83 |
+
foreach ($items as $item) {
|
84 |
+
// Filter the item
|
85 |
+
$item = apply_filters('wpra/importer/item', $item, $feed, $logger);
|
86 |
+
|
87 |
+
$title = $item->get_title();
|
88 |
+
$permalink = wprss_normalize_permalink($item->get_permalink(), $item, $feedId);
|
89 |
+
|
90 |
+
// Check if already imported
|
91 |
+
if (array_key_exists($permalink, $existingPermalinks)) {
|
92 |
+
$logger->debug('Skipping item "{0}": already imported', [$title]);
|
93 |
+
|
94 |
+
continue;
|
95 |
+
}
|
96 |
+
|
97 |
+
// Check if blacklisted
|
98 |
+
if (wprss_is_blacklisted($permalink)) {
|
99 |
+
$logger->debug('Skipping item "{0}": blacklisted', [$title]);
|
100 |
+
|
101 |
+
continue;
|
102 |
+
}
|
103 |
+
|
104 |
+
// Check if title exists
|
105 |
+
if ($uto) {
|
106 |
+
$existingTitles[$title] = 1;
|
107 |
+
|
108 |
+
if (wprss_item_title_exists($title) || array_key_exists($title, $existingTitles)) {
|
109 |
+
$logger->debug('Skipping item "{0}": title is not unique', [$title]);
|
110 |
+
|
111 |
+
continue;
|
112 |
+
}
|
113 |
+
}
|
114 |
+
|
115 |
+
if (apply_filters('wpra/importer/filter_item', true, $item, $feed, $logger)) {
|
116 |
+
$newItems[] = $item;
|
117 |
+
}
|
118 |
+
}
|
119 |
+
|
120 |
+
$items = apply_filters('wpra/importer/items/after_filters', $items, $feed, $logger);
|
121 |
+
|
122 |
+
$numOgItems = count($items);
|
123 |
+
$numNewItems = count($newItems);
|
124 |
+
if ($numOgItems !== $numNewItems) {
|
125 |
+
$logger->debug('{0} items were skipped', [$numOgItems - $numNewItems]);
|
126 |
+
}
|
127 |
+
|
128 |
+
// Apply the "per-import" limit
|
129 |
+
$importLimit = (int) wprss_get_general_setting('limit_feed_items_per_import');
|
130 |
+
if ($importLimit > 0) {
|
131 |
+
$items = array_slice($items, 0, $importLimit);
|
132 |
+
}
|
133 |
+
|
134 |
+
return $items;
|
135 |
+
}
|
136 |
+
|
137 |
+
/**
|
138 |
+
* Imports a feed item.
|
139 |
+
*
|
140 |
+
* @since [*next-version*]
|
141 |
+
*
|
142 |
+
* @param SimplePie_Item $item The item to import.
|
143 |
+
* @param int|string $feedId The ID of the feed source.
|
144 |
+
*
|
145 |
+
* @return bool True if the item was imported successfully, false if importing failed.
|
146 |
+
*/
|
147 |
+
function importItem(SimplePie_Item $item, $feedId)
|
148 |
+
{
|
149 |
+
$logger = wpra_get_logger($feedId);
|
150 |
+
$logger->debug('Importing item "{0}"', [$item->get_title()]);
|
151 |
+
|
152 |
+
set_time_limit(wprss_get_item_import_time_limit());
|
153 |
+
|
154 |
+
$lcc = legacyConditionalCheck($item, $feedId);
|
155 |
+
$item = $lcc[0];
|
156 |
+
$import = $lcc[1];
|
157 |
+
|
158 |
+
// If item should not be imported,
|
159 |
+
// -> return true if the item was imported by other means (not null)
|
160 |
+
// -> return false if the item was blocked (is null)
|
161 |
+
if (!$import) {
|
162 |
+
return $item !== null;
|
163 |
+
}
|
164 |
+
|
165 |
+
$title = trim(html_entity_decode($item->get_title()));
|
166 |
+
$title = empty($title) ? $item->get_id() : $title;
|
167 |
+
|
168 |
+
$enclosure = $item->get_enclosure();
|
169 |
+
$enclosureUrl = $enclosure ? $enclosure->get_link() : null;
|
170 |
+
|
171 |
+
$permalink = htmlspecialchars_decode($item->get_permalink());
|
172 |
+
$permalink = wprss_normalize_permalink($permalink, $item, $feedId);
|
173 |
+
|
174 |
+
$dates = getImportDates($item, $feedId);
|
175 |
+
$date = $dates[0];
|
176 |
+
$dateGmt = $dates[1];
|
177 |
+
$isFuture = $dates[2];
|
178 |
+
$status = $isFuture ? 'future' : 'publish';
|
179 |
+
|
180 |
+
$excerpt = wprss_sanitize_excerpt($item->get_description());
|
181 |
+
$content = $item->get_content();
|
182 |
+
|
183 |
+
$source = getSourceInfo($item);
|
184 |
+
$author = getAuthorInfo($item);
|
185 |
+
|
186 |
+
// Do not let WordPress sanitize the excerpt
|
187 |
+
// WordPress sanitizes the excerpt because it's expected to be typed by a user and sent in a POST
|
188 |
+
// request. However, our excerpt is being inserted as a raw string with custom sanitization.
|
189 |
+
remove_all_filters('excerpt_save_pre');
|
190 |
+
|
191 |
+
$postData = apply_filters(
|
192 |
+
'wprss_populate_post_data',
|
193 |
+
[
|
194 |
+
'post_title' => $title,
|
195 |
+
'post_content' => $content,
|
196 |
+
'post_excerpt' => $excerpt,
|
197 |
+
'post_status' => $status,
|
198 |
+
'post_type' => 'wprss_feed_item',
|
199 |
+
'post_date' => $date,
|
200 |
+
'post_date_gmt' => $dateGmt,
|
201 |
+
'meta_input' => [
|
202 |
+
'wprss_feed_id' => $feedId,
|
203 |
+
'wprss_item_date' => $item->get_date(DATE_ISO8601),
|
204 |
+
'wprss_item_permalink' => $permalink,
|
205 |
+
'wprss_item_enclosure' => $enclosureUrl,
|
206 |
+
'wprss_item_source_name' => $source[0],
|
207 |
+
'wprss_item_source_url' => $source[1],
|
208 |
+
'wprss_item_author' => $author[0],
|
209 |
+
'wprss_item_author_email' => $author[1],
|
210 |
+
'wprss_item_author_link' => $author[2],
|
211 |
+
],
|
212 |
+
],
|
213 |
+
$item
|
214 |
+
);
|
215 |
+
|
216 |
+
$postData = apply_filters('wpra/importer/item/post_data', $postData, $item, $feedId);
|
217 |
+
|
218 |
+
if (defined('ICL_SITEPRESS_VERSION')) {
|
219 |
+
@include_once(WP_PLUGIN_DIR . '/sitepress-multilingual-cms/inc/wpml-api.php');
|
220 |
+
}
|
221 |
+
if (defined('ICL_LANGUAGE_CODE')) {
|
222 |
+
$_POST['icl_post_language'] = $language_code = ICL_LANGUAGE_CODE;
|
223 |
+
}
|
224 |
+
|
225 |
+
// Create and insert post object into the DB
|
226 |
+
$postId = wp_insert_post($postData);
|
227 |
+
|
228 |
+
if (is_wp_error($postId)) {
|
229 |
+
update_post_meta(
|
230 |
+
$feedId,
|
231 |
+
'wprss_error_last_import',
|
232 |
+
'An error occurred while inserting a feed item into the database.'
|
233 |
+
);
|
234 |
+
|
235 |
+
$logger->error('Failed to insert item into the database');
|
236 |
+
|
237 |
+
return false;
|
238 |
+
}
|
239 |
+
|
240 |
+
do_action('wprss_items_create_post_meta', $postId, $item, $feedId);
|
241 |
+
do_action('wpra/importer/item/inserted', $item, $feedId);
|
242 |
+
|
243 |
+
$logger->notice('Imported item {0}. ID: {1}', [$title, $postId]);
|
244 |
+
|
245 |
+
return true;
|
246 |
+
}
|
247 |
+
|
248 |
+
/**
|
249 |
+
* Runs the legacy "post item conditionals" filter for a feed item.
|
250 |
+
*
|
251 |
+
* @since [*next-version*]
|
252 |
+
*
|
253 |
+
* @param SimplePie_Item $item The item.
|
254 |
+
* @param int|string $feedId The ID of the feed source.
|
255 |
+
*
|
256 |
+
* @return array An array with 2 elements:
|
257 |
+
* 1. the filtered item, or null if the item was rejected.
|
258 |
+
* 2. a boolean that signifies whether the item should be imported or not.
|
259 |
+
* A return value containing a non-null item and a false boolean signifies a non-rejected item, but that
|
260 |
+
* should still not be imported because it was imported using a non-Core mechanism (ex. Feed to Post).
|
261 |
+
*/
|
262 |
+
function legacyConditionalCheck(SimplePie_Item $item, $feedId)
|
263 |
+
{
|
264 |
+
$logger = wpra_get_logger($feedId);
|
265 |
+
|
266 |
+
// Log the callbacks that are hooked into the filter
|
267 |
+
$condCallbacks = wpra_get_hook_callbacks('wprss_insert_post_item_conditionals');
|
268 |
+
if (count($condCallbacks) > 0) {
|
269 |
+
$logger->debug('Hooks for `wprss_insert_post_item_conditionals`:');
|
270 |
+
|
271 |
+
foreach ($condCallbacks as $callback) {
|
272 |
+
$logger->debug('-> {0}', [wprss_format_hook_callback($callback)]);
|
273 |
+
}
|
274 |
+
}
|
275 |
+
|
276 |
+
$title = $item->get_title();
|
277 |
+
$permalink = htmlspecialchars_decode($item->get_permalink());
|
278 |
+
$permalink = wprss_normalize_permalink($permalink, $item, $feedId);
|
279 |
+
|
280 |
+
$preItem = $item;
|
281 |
+
$postItem = apply_filters('wprss_insert_post_item_conditionals', $item, $feedId, $permalink);
|
282 |
+
$updateCount = apply_filters('wprss_still_update_import_count', false);
|
283 |
+
|
284 |
+
if (is_bool($postItem) || $postItem === null) {
|
285 |
+
// Item is TRUE, or it's FALSE/NULL but it still counts
|
286 |
+
if ($postItem || $updateCount) {
|
287 |
+
$logger->debug('Item "{0}" was imported by an add-on or filter', [$title]);
|
288 |
+
|
289 |
+
return [$preItem, false];
|
290 |
+
}
|
291 |
+
|
292 |
+
// Item was filtered
|
293 |
+
if (has_filter('wprss_insert_post_item_conditionals', 'wprss_kf_check_post_item_keywords')) {
|
294 |
+
$logger->info('Item "{0}" was rejected by your keyword or tag filtering.', [$title]);
|
295 |
+
} else {
|
296 |
+
$logger->notice('Item "{0}" was rejected by an add-on or filter.', [$title]);
|
297 |
+
}
|
298 |
+
|
299 |
+
return [null, false];
|
300 |
+
} else {
|
301 |
+
return [$postItem, true];
|
302 |
+
}
|
303 |
+
}
|
304 |
+
|
305 |
+
function getImportDates(SimplePie_Item $item, $feedId)
|
306 |
+
{
|
307 |
+
$logger = wpra_get_logger($feedId);
|
308 |
+
|
309 |
+
$dateFormat = 'Y-m-d H:i:s';
|
310 |
+
$timestamp = $item->get_gmdate('U');
|
311 |
+
$isFuture = false;
|
312 |
+
|
313 |
+
if ($timestamp) {
|
314 |
+
if ($timestamp > time()) {
|
315 |
+
$scheduleItemsFilter = apply_filters('wpra/importer/allow_scheduled_items', false);
|
316 |
+
$scheduleItemsOption = wprss_get_general_setting('schedule_future_items');
|
317 |
+
|
318 |
+
if ($scheduleItemsFilter || $scheduleItemsOption) {
|
319 |
+
// If can schedule future items, set the post status to "future" (aka scheduled)
|
320 |
+
$isFuture = true;
|
321 |
+
$logger->debug('Setting future status due to future date');
|
322 |
+
} else {
|
323 |
+
// If cannot schedule future items, clamp the timestamp to the current time
|
324 |
+
$timestamp = min(time(), $timestamp);
|
325 |
+
$logger->debug('Date clamped to present time');
|
326 |
+
}
|
327 |
+
}
|
328 |
+
} else {
|
329 |
+
// Item has no date ...
|
330 |
+
$logger->debug('Item has no date. Using current time');
|
331 |
+
$timestamp = time();
|
332 |
+
}
|
333 |
+
|
334 |
+
$date = $item->get_date($dateFormat);
|
335 |
+
$dateGmt = gmdate($dateFormat, $timestamp);
|
336 |
+
|
337 |
+
return [$date, $dateGmt, $isFuture];
|
338 |
+
}
|
339 |
+
|
340 |
+
function getSourceInfo(SimplePie_Item $item)
|
341 |
+
{
|
342 |
+
/* @var $item SimplePie_Item */
|
343 |
+
$feed = $item->get_feed();
|
344 |
+
|
345 |
+
// Get the source from the RSS item
|
346 |
+
$source = $item->get_source();
|
347 |
+
|
348 |
+
// Get the source name if available. If empty, default to the feed source CPT title
|
349 |
+
$name = ($source === null) ? '' : $source->get_title();
|
350 |
+
$name = empty($name) ? $feed->get_title() : $name;
|
351 |
+
|
352 |
+
// Get the source URL if available. If empty, default to the RSS feed's URL
|
353 |
+
$url = ($source === null) ? '' : $source->get_permalink();
|
354 |
+
$url = empty($url) ? $feed->get_permalink() : $url;
|
355 |
+
|
356 |
+
return [$name, $url];
|
357 |
+
}
|
358 |
+
|
359 |
+
function getAuthorInfo(SimplePie_Item $item)
|
360 |
+
{
|
361 |
+
$author = $item->get_author();
|
362 |
+
|
363 |
+
if ($author) {
|
364 |
+
$name = $author->get_name();
|
365 |
+
$email = $author->get_email();
|
366 |
+
$link = $author->get_link();
|
367 |
+
} else {
|
368 |
+
$name = '';
|
369 |
+
$email = '';
|
370 |
+
$link = '';
|
371 |
+
}
|
372 |
+
|
373 |
+
return [$name, $email, $link];
|
374 |
+
}
|
375 |
+
|
376 |
+
function getExcessItems($feedId, $add = 0)
|
377 |
+
{
|
378 |
+
$limit = getLimit($feedId);
|
379 |
+
|
380 |
+
if ($limit <= 0) {
|
381 |
+
return 0;
|
382 |
+
}
|
383 |
+
|
384 |
+
// Get existing items
|
385 |
+
$dbItems = wprss_get_feed_items_for_source($feedId);
|
386 |
+
$numDbItems = $dbItems->post_count + $add;
|
387 |
+
|
388 |
+
if ($numDbItems <= $limit) {
|
389 |
+
return 0;
|
390 |
+
}
|
391 |
+
|
392 |
+
$numExcess = $numDbItems - $limit;
|
393 |
+
|
394 |
+
return array_slice(array_reverse($dbItems->posts), 0, $numExcess);
|
395 |
+
}
|
396 |
+
|
397 |
+
function getLimit($feedId)
|
398 |
+
{
|
399 |
+
$feedLimit = get_post_meta($feedId, 'wprss_limit', true);
|
400 |
+
$globalLimit = wprss_get_general_setting('limit_feed_items_imported');
|
401 |
+
|
402 |
+
$filteredLimits = array_filter([$feedLimit, $globalLimit], function ($limit) {
|
403 |
+
return !empty($limit) && intval($limit) > 0;
|
404 |
+
});
|
405 |
+
|
406 |
+
return (int) reset($filteredLimits);
|
407 |
+
}
|
includes/feed-importing.php
CHANGED
@@ -1,257 +1,262 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
// Warning: Order may be important
|
10 |
-
add_filter('wprss_normalize_permalink', 'wprss_google_news_url_fix', 8);
|
11 |
-
add_filter('wprss_normalize_permalink', 'wprss_bing_news_url_fix', 9);
|
12 |
-
add_filter('wprss_normalize_permalink', 'wprss_google_alerts_url_fix', 10);
|
13 |
-
add_filter('wprss_normalize_permalink', 'wprss_convert_video_permalink', 100);
|
14 |
-
|
15 |
-
// Adds comparators for item sorting
|
16 |
-
add_filter('wprss_item_comparators', 'wprss_sort_comparators_default');
|
17 |
-
|
18 |
-
add_action( 'wprss_fetch_single_feed_hook', 'wprss_fetch_insert_single_feed_items' );
|
19 |
-
/**
|
20 |
-
* The main feed fetching function.
|
21 |
-
* Fetches the feed items from the source provided and inserts them into the DB.
|
22 |
-
*
|
23 |
-
* Called on hook 'wprss_fetch_single_feed_hook'.
|
24 |
-
*
|
25 |
-
* @since 3.2
|
26 |
-
*/
|
27 |
-
function wprss_fetch_insert_single_feed_items( $feed_ID ) {
|
28 |
-
set_transient('wpra/feeds/importing/' . $feed_ID, true, 0);
|
29 |
-
|
30 |
-
global $wprss_importing_feed;
|
31 |
-
$wprss_importing_feed = $feed_ID;
|
32 |
-
|
33 |
-
register_shutdown_function('wprss_detect_exec_timeout');
|
34 |
-
|
35 |
-
$importFn = function ($feed_ID) {
|
36 |
-
$logger = wpra_get_logger($feed_ID);
|
37 |
-
|
38 |
-
$logger->info('Starting import of feed {id}', ['id' => $feed_ID]);
|
39 |
-
|
40 |
-
// Check if the feed source is active.
|
41 |
-
if ( ! wprss_is_feed_source_active( $feed_ID ) && ! wprss_feed_source_force_next_fetch( $feed_ID ) ) {
|
42 |
-
$logger->info('Feed is not active. Finished');
|
43 |
-
return;
|
44 |
-
}
|
45 |
-
|
46 |
-
// If the feed source is forced for next fetch, remove the force next fetch data
|
47 |
-
if ( wprss_feed_source_force_next_fetch( $feed_ID ) ) {
|
48 |
-
delete_post_meta( $feed_ID, 'wprss_force_next_fetch' );
|
49 |
-
}
|
50 |
|
51 |
-
|
52 |
-
|
|
|
|
|
|
|
53 |
|
54 |
-
|
55 |
-
|
56 |
-
$feed_url = apply_filters( 'wprss_feed_source_url', $feed_url, $feed_ID );
|
57 |
-
$logger->debug('Feed source URL: {0}', [$feed_url]);
|
58 |
|
59 |
-
|
60 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
|
62 |
-
|
63 |
-
|
64 |
-
// Get the global limit
|
65 |
-
$global_limit = wprss_get_general_setting('limit_feed_items_imported');
|
66 |
-
// If no global limit is set, mark as NULL
|
67 |
-
if ( $global_limit === '' || intval($global_limit) <= 0 ) {
|
68 |
-
$feed_limit = NULL;
|
69 |
-
}
|
70 |
-
else $feed_limit = $global_limit;
|
71 |
-
}
|
72 |
|
73 |
-
|
74 |
-
if ( ! wprss_validate_url( $feed_url ) ) {
|
75 |
-
$logger->error('Feed URL is not valid!');
|
76 |
-
} else {
|
77 |
-
// Get the feed items from the source
|
78 |
-
$items = wprss_get_feed_items( $feed_url, $feed_ID );
|
79 |
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
} else {
|
84 |
-
// See `wprss_item_comparators` filter
|
85 |
-
wprss_sort_items($items);
|
86 |
-
|
87 |
-
// If using a limit ...
|
88 |
-
if ( $feed_limit === NULL ) {
|
89 |
-
$items_to_insert = $items;
|
90 |
-
} else {
|
91 |
-
$items_to_insert = array_slice( $items, 0, $feed_limit );
|
92 |
-
$logger->debug('{0} items in the feed, {1} items after applying limit', [
|
93 |
-
count($items),
|
94 |
-
count($items_to_insert)
|
95 |
-
]);
|
96 |
-
}
|
97 |
-
}
|
98 |
|
99 |
-
|
100 |
-
$unique_titles_only = ($unique_titles_only === '')
|
101 |
-
? wprss_get_general_setting('unique_titles')
|
102 |
-
: $unique_titles_only;
|
103 |
-
$unique_titles_only = filter_var($unique_titles_only, FILTER_VALIDATE_BOOLEAN);
|
104 |
-
// Gather the titles of the items that are imported
|
105 |
-
// The import process will check not only the titles in the DB but the titles currently in the feed
|
106 |
-
$existing_titles = [];
|
107 |
|
108 |
-
|
109 |
-
|
|
|
|
|
|
|
110 |
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
$permalink = wprss_normalize_permalink( $item->get_permalink(), $item, $feed_ID );
|
116 |
|
117 |
-
|
118 |
-
|
119 |
-
$logger->debug('Item "{0}" is blacklisted', [$item_title]);
|
120 |
|
121 |
-
|
122 |
-
|
|
|
|
|
123 |
|
124 |
-
|
125 |
-
|
126 |
-
$logger->debug('Item "{0}" already exists in the database', [$item_title]);
|
127 |
|
128 |
-
|
129 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
130 |
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
$existing_titles[$item_title] = 1;
|
138 |
|
139 |
-
|
140 |
-
|
|
|
|
|
|
|
|
|
141 |
|
142 |
-
|
143 |
-
|
144 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
145 |
|
146 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
147 |
}
|
148 |
|
149 |
-
|
150 |
-
|
|
|
151 |
|
152 |
-
|
153 |
-
$logger->debug('{0} will be skipped', [$original_count - $new_count]);
|
154 |
}
|
155 |
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
$
|
160 |
-
|
|
|
|
|
161 |
|
162 |
-
|
163 |
-
|
164 |
-
// Get the number of feed items in DB, and their count
|
165 |
-
$db_feed_items = wprss_get_feed_items_for_source( $feed_ID );
|
166 |
-
$num_db_feed_items = $db_feed_items->post_count;
|
167 |
-
|
168 |
-
// Get the number of feed items we can store until we reach the limit
|
169 |
-
$num_can_insert = $feed_limit - $num_db_feed_items;
|
170 |
-
// Calculate how many feed items we must delete before importing, to keep to the limit
|
171 |
-
$num_new_items = count( $new_items );
|
172 |
-
$num_feed_items_to_delete = $num_can_insert > $num_new_items
|
173 |
-
? 0
|
174 |
-
: $num_new_items - $num_can_insert;
|
175 |
-
|
176 |
-
// Get an array with the DB feed items in reverse order (oldest first)
|
177 |
-
$db_feed_items_reversed = array_reverse( $db_feed_items->posts );
|
178 |
-
// Cut the array to get only the first few that are to be deleted ( equal to $num_feed_items_to_delete )
|
179 |
-
$feed_items_to_delete = array_slice( $db_feed_items_reversed, 0, $num_feed_items_to_delete );
|
180 |
-
|
181 |
-
// Iterate the feed items and delete them
|
182 |
-
$num_items_deleted = 0;
|
183 |
-
foreach ( $feed_items_to_delete as $key => $post ) {
|
184 |
-
wp_delete_post( $post->ID, TRUE );
|
185 |
-
$num_items_deleted++;
|
186 |
-
}
|
187 |
|
188 |
-
|
189 |
-
$logger->info('Deleted the oldest {0} items', [$num_items_deleted]);
|
190 |
}
|
191 |
}
|
192 |
|
193 |
-
|
194 |
-
|
|
|
|
|
|
|
195 |
|
196 |
-
|
197 |
-
|
198 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
199 |
}
|
200 |
}
|
201 |
|
202 |
-
|
|
|
203 |
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
$logger->info('Scheduled next update');
|
208 |
}
|
|
|
209 |
|
210 |
-
|
211 |
|
212 |
-
|
|
|
|
|
|
|
|
|
213 |
|
214 |
-
|
215 |
|
216 |
-
|
217 |
-
|
218 |
-
$wprss_importing_feed = null;
|
219 |
-
}
|
220 |
|
|
|
221 |
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
*
|
227 |
-
* @since 3.0
|
228 |
-
*/
|
229 |
-
function wprss_get_feed_items( $feed_url, $source, $force_feed = FALSE ) {
|
230 |
-
// Add filters and actions prior to fetching the feed items
|
231 |
-
add_filter( 'wp_feed_cache_transient_lifetime' , 'wprss_feed_cache_lifetime' );
|
232 |
|
233 |
-
|
234 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
235 |
|
236 |
-
|
237 |
-
|
238 |
-
$feed_url,
|
239 |
-
$feed->get_error_message()
|
240 |
-
]);
|
241 |
|
242 |
-
|
243 |
-
|
|
|
|
|
|
|
244 |
|
245 |
-
|
246 |
-
|
247 |
|
248 |
-
|
249 |
-
|
250 |
|
251 |
-
|
252 |
-
|
253 |
|
254 |
-
|
|
|
|
|
|
|
|
|
|
|
255 |
|
256 |
/**
|
257 |
* Allow debugging of wp_cron jobs
|
@@ -261,7 +266,7 @@
|
|
261 |
*
|
262 |
* @return array $cron_request_array with the current XDEBUG_SESSION cookie added if set
|
263 |
*/
|
264 |
-
function wpse_cron_add_xdebug_cookie ($cron_request_array
|
265 |
{
|
266 |
if (empty ($_COOKIE['XDEBUG_SESSION'])) {
|
267 |
return ($cron_request_array) ;
|
@@ -316,798 +321,810 @@ function wprss_get_feed_cache_dir()
|
|
316 |
}
|
317 |
|
318 |
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
}
|
352 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
353 |
|
354 |
-
|
355 |
-
|
356 |
-
$feed->set_timeout($fetch_time_limit);
|
357 |
|
358 |
-
|
359 |
-
|
|
|
|
|
360 |
|
361 |
-
|
362 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
363 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
364 |
|
365 |
-
// Reference array action hook, for the feed object and the URL
|
366 |
-
do_action_ref_array('wp_feed_options', array(&$feed, $url));
|
367 |
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
372 |
|
373 |
-
do_action('wprss_fetch_feed_before', $feed, $source);
|
374 |
|
375 |
-
|
376 |
-
|
377 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
378 |
|
379 |
-
|
|
|
|
|
380 |
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
386 |
}
|
387 |
-
return new WP_Error('simplepie-error', $feed->error(), array('feed' => $feed));
|
388 |
}
|
389 |
-
|
390 |
-
delete_post_meta($source, 'wprss_error_last_import');
|
391 |
-
return $feed;
|
392 |
-
}
|
393 |
-
|
394 |
-
|
395 |
-
/**
|
396 |
-
* Normalizes the given permalink.
|
397 |
-
*
|
398 |
-
* @param $permalink The permalink to normalize
|
399 |
-
* @return string The normalized permalink
|
400 |
-
* @since 4.2.3
|
401 |
-
*/
|
402 |
-
function wprss_normalize_permalink( $permalink, $item, $feed_ID) {
|
403 |
-
// Apply normalization functions on the permalink
|
404 |
-
$permalink = trim( $permalink );
|
405 |
-
$permalink = apply_filters( 'wprss_normalize_permalink', $permalink, $item, $feed_ID);
|
406 |
-
// Return the normalized permalink
|
407 |
-
return $permalink;
|
408 |
-
}
|
409 |
-
|
410 |
-
|
411 |
-
/**
|
412 |
-
* Extracts the actual URL from a Google News permalink
|
413 |
-
*
|
414 |
-
* @param string $permalink The permalink to normalize.
|
415 |
-
* @since 4.2.3
|
416 |
-
*/
|
417 |
-
function wprss_google_news_url_fix($permalink) {
|
418 |
-
return wprss_tracking_url_fix($permalink, '!^(https?:\/\/)?' . preg_quote('news.google.com', '!') . '.*!');
|
419 |
-
}
|
420 |
-
|
421 |
-
|
422 |
-
/**
|
423 |
-
* Extracts the actual URL from a Google Alerts permalink
|
424 |
-
*
|
425 |
-
* @param string $permalink The permalink to normalize.
|
426 |
-
* @since 4.7.3
|
427 |
-
*/
|
428 |
-
function wprss_google_alerts_url_fix($permalink) {
|
429 |
-
return wprss_tracking_url_fix($permalink, '!^(https?:\/\/)?(www\.)?' . preg_quote('google.com/url', '!') . '.*!');
|
430 |
-
}
|
431 |
-
|
432 |
-
|
433 |
-
/**
|
434 |
-
* Extracts the actual URL from a Bing permalink
|
435 |
-
*
|
436 |
-
* @param string $permalink The permalink to normalize.
|
437 |
-
* @since 4.2.3
|
438 |
-
*/
|
439 |
-
function wprss_bing_news_url_fix($permalink) {
|
440 |
-
return wprss_tracking_url_fix($permalink, '!^(https?:\/\/)?(www\.)?' . preg_quote('bing.com/news', '!') . '.*!');
|
441 |
-
}
|
442 |
-
|
443 |
-
|
444 |
-
/**
|
445 |
-
* Checks if the permalink is a tracking permalink based on host, and if
|
446 |
-
* it is, returns the normalized URL of the proper feed item article,
|
447 |
-
* determined by the named query argument.
|
448 |
-
*
|
449 |
-
* Fixes the issue with equivalent Google News etc. items having
|
450 |
-
* different URLs, that contain randomly generated GET parameters.
|
451 |
-
* Example:
|
452 |
-
*
|
453 |
-
* http://news.google.com/news/url?sa=t&fd=R&ct2=us&ei=V3e9U6izMMnm1QaB1YHoDA&url=http://abcd...
|
454 |
-
* http://news.google.com/news/url?sa=t&fd=R&ct2=us&ei=One9U-HQLsTp1Aal-oDQBQ&url=http://abcd...
|
455 |
-
*
|
456 |
-
* @param string $permalink The permalink URL to check and/or normalize.
|
457 |
-
* @param string|array $patterns One or an array of host names, for which the URL should be fixed.
|
458 |
-
* @param string Name of the query argument that specifies the actual URL.
|
459 |
-
* @return string The normalized URL of the original article, as indicated by the `url`
|
460 |
-
* parameter in the URL query string.
|
461 |
-
* @since 4.2.3
|
462 |
-
*/
|
463 |
-
function wprss_tracking_url_fix( $permalink, $patterns, $argName = 'url' ) {
|
464 |
-
// Parse the url
|
465 |
-
$parsed = parse_url( urldecode( html_entity_decode( $permalink ) ) );
|
466 |
-
$patterns = is_array($patterns) ? $patterns :array($patterns);
|
467 |
-
|
468 |
-
// If parsing failed, return the permalink
|
469 |
-
if ( $parsed === FALSE || $parsed === NULL ) return $permalink;
|
470 |
-
|
471 |
-
// Determine if it's a tracking item
|
472 |
-
$isMatch = false;
|
473 |
-
foreach( $patterns as $_idx => $_pattern ) {
|
474 |
-
if( preg_match($_pattern, $permalink) ) {
|
475 |
-
$isMatch = true;
|
476 |
-
break;
|
477 |
-
}
|
478 |
-
}
|
479 |
-
|
480 |
-
if( !$isMatch ) return $permalink;
|
481 |
-
|
482 |
-
// Check if the url GET query string is present
|
483 |
-
if ( !isset( $parsed['query'] ) ) return $permalink;
|
484 |
-
|
485 |
-
// Parse the query string
|
486 |
-
$query = array();
|
487 |
-
parse_str( $parsed['query'], $query );
|
488 |
-
|
489 |
-
// Check if the url GET parameter is present in the query string
|
490 |
-
if ( !is_array($query) || !isset( $query[$argName] ) ) return $permalink;
|
491 |
-
|
492 |
-
return urldecode( $query[$argName] );
|
493 |
-
}
|
494 |
-
|
495 |
-
|
496 |
-
/**
|
497 |
-
* Converts YouTube, Vimeo and DailyMotion video urls
|
498 |
-
* into embedded video player urls.
|
499 |
-
* If the permalink is not a video url, the permalink is returned as is.
|
500 |
-
*
|
501 |
-
* @param $permalink The string permalink url to convert.
|
502 |
-
* @return A string, with the convert permalink, or the same permalink passed as parameter if
|
503 |
-
* not a video url.
|
504 |
-
* @since 4.0
|
505 |
-
*/
|
506 |
-
function wprss_convert_video_permalink( $permalink ) {
|
507 |
-
// CHECK PERMALINK FOR VIDEO HOSTS : YOUTUBE, VIMEO AND DAILYMOTION
|
508 |
-
$found_video_host = preg_match( '/http[s]?:\/\/(www\.)?(youtube|dailymotion|vimeo)\.com\/(.*)/i', $permalink, $matches );
|
509 |
-
|
510 |
-
// If video host was found
|
511 |
-
if ( $found_video_host !== 0 && $found_video_host !== FALSE ) {
|
512 |
-
|
513 |
-
// Get general options
|
514 |
-
$options = get_option( 'wprss_settings_general' );
|
515 |
-
// Get the video link option entry, or false if it does not exist
|
516 |
-
$video_link = ( isset($options['video_link']) )? $options['video_link'] : 'false';
|
517 |
-
|
518 |
-
// If the video link option is true, change the video URL to its repective host's embedded
|
519 |
-
// video player URL. Otherwise, leave the permalink as is.
|
520 |
-
if ( strtolower( $video_link ) === 'true' ) {
|
521 |
-
$host = $matches[2];
|
522 |
-
switch( $host ) {
|
523 |
-
case 'youtube':
|
524 |
-
preg_match( '/(&|\?)v=([^&]+)/', $permalink, $yt_matches );
|
525 |
-
$permalink = 'https://www.youtube.com/embed/' . $yt_matches[2];
|
526 |
-
break;
|
527 |
-
case 'vimeo':
|
528 |
-
preg_match( '/(\d*)$/i', $permalink, $vim_matches );
|
529 |
-
$permalink = 'https://player.vimeo.com/video/' . $vim_matches[0];
|
530 |
-
break;
|
531 |
-
case 'dailymotion':
|
532 |
-
preg_match( '/(\.com\/)(video\/)(.*)/i', $permalink, $dm_matches );
|
533 |
-
$permalink = 'https://www.dailymotion.com/embed/video/' . $dm_matches[3];
|
534 |
-
break;
|
535 |
-
}
|
536 |
-
}
|
537 |
-
}
|
538 |
-
|
539 |
-
return $permalink;
|
540 |
-
}
|
541 |
-
|
542 |
-
|
543 |
-
/**
|
544 |
-
* Insert wprss_feed_item posts into the DB
|
545 |
-
*
|
546 |
-
* @since 3.0
|
547 |
-
*
|
548 |
-
* @param SimplePie_Item[] $items
|
549 |
-
* @param int|string $feed_ID
|
550 |
-
*/
|
551 |
-
function wprss_items_insert_post( $items, $feed_ID ) {
|
552 |
-
update_post_meta( $feed_ID, 'wprss_feed_is_updating', $update_started_at = time() );
|
553 |
-
$logger = wpra_get_logger($feed_ID);
|
554 |
-
|
555 |
-
// Gather the permalinks of existing feed item's related to this feed source
|
556 |
-
$existing_permalinks = wprss_get_existing_permalinks( $feed_ID );
|
557 |
-
|
558 |
-
// Count of items inserted
|
559 |
-
$items_inserted = 0;
|
560 |
-
|
561 |
-
foreach ( $items as $i => $item ) {
|
562 |
-
|
563 |
-
// Normalize the URL
|
564 |
-
$permalink = $item->get_permalink(); // Link or enclosure URL
|
565 |
-
$permalink = htmlspecialchars_decode( $permalink ); // SimplePie encodes HTML special chars
|
566 |
-
|
567 |
-
$logger->debug('Beginning import for item "{0}"', [$item->get_title()]);
|
568 |
-
|
569 |
-
$permalink = wprss_normalize_permalink( $permalink, $item, $feed_ID );
|
570 |
-
|
571 |
-
// Save the enclosure URL
|
572 |
-
$enclosure_url = '';
|
573 |
-
$enclosure = $item->get_enclosure(0);
|
574 |
-
|
575 |
-
if ($enclosure && $enclosure->get_link()) {
|
576 |
-
$enclosure_url = $enclosure->get_link();
|
577 |
-
}
|
578 |
-
|
579 |
-
// Check if newly fetched item already present in existing feed items,
|
580 |
-
// if not insert it into wp_posts and insert post meta.
|
581 |
-
if ( ! ( array_key_exists( $permalink, $existing_permalinks ) ) ) {
|
582 |
-
// Extend the importing time and refresh the feed's updating flag to reflect that it is active
|
583 |
-
$time_limit = wprss_get_item_import_time_limit();
|
584 |
-
set_time_limit( $time_limit );
|
585 |
-
|
586 |
-
global $wp_filter;
|
587 |
-
if (isset($wp_filter['wprss_insert_post_item_conditionals'])) {
|
588 |
-
$hook = $wp_filter['wprss_insert_post_item_conditionals'];
|
589 |
-
|
590 |
-
if (count($hook->callbacks) > 0) {
|
591 |
-
$logger->debug('Hooks for `wprss_insert_post_item_conditionals`:');
|
592 |
-
}
|
593 |
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
598 |
}
|
599 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
600 |
|
601 |
-
|
|
|
|
|
602 |
|
603 |
-
|
604 |
-
$ogItem = $item;
|
605 |
-
$item = apply_filters( 'wprss_insert_post_item_conditionals', $item, $feed_ID, $permalink );
|
606 |
-
/* @var $item SimplePie_Item */
|
607 |
|
608 |
-
|
609 |
-
$
|
|
|
|
|
610 |
|
611 |
-
|
612 |
-
|
613 |
-
$logger->debug('Resuming insertion into DB');
|
614 |
|
615 |
-
|
|
|
|
|
616 |
|
617 |
-
|
618 |
-
|
619 |
-
$timestamp = $item->get_date( 'U' );
|
620 |
-
$has_date = $timestamp ? true : false;
|
621 |
|
622 |
-
|
623 |
-
|
|
|
624 |
|
625 |
-
|
626 |
-
|
627 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
628 |
|
629 |
-
|
630 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
631 |
|
632 |
-
|
633 |
-
|
634 |
-
$post_status = 'future';
|
635 |
|
636 |
-
|
637 |
-
} else {
|
638 |
-
// If cannot schedule future items, clamp the timestamp to the current time minus
|
639 |
-
// 1 second for each iteration done so far
|
640 |
-
$timestamp = min(time() - $i, $timestamp);
|
641 |
|
642 |
-
|
643 |
-
|
|
|
|
|
|
|
|
|
644 |
}
|
645 |
-
} else {
|
646 |
-
// Item has no date ...
|
647 |
-
$logger->debug('Item "{0}" has no date. Using current time', [$item->get_title()]);
|
648 |
-
$timestamp = time();
|
649 |
}
|
650 |
|
651 |
-
|
652 |
-
$date_gmt = gmdate( $format, $item->get_gmdate( 'U' ) );
|
653 |
-
|
654 |
-
$logger->debug('Date for "{0}" will be {1}', [$item->get_title(), $date]);
|
655 |
-
|
656 |
-
// Do not let WordPress sanitize the excerpt
|
657 |
-
// WordPress sanitizes the excerpt because it's expected to be typed by a user and sent in a POST
|
658 |
-
// request. However, our excerpt is being inserted as a raw string with custom sanitization.
|
659 |
-
remove_all_filters( 'excerpt_save_pre' );
|
660 |
-
|
661 |
-
$title = trim(html_entity_decode($item->get_title()));
|
662 |
-
$title = empty($title) ? $item->get_id() : $title;
|
663 |
-
|
664 |
-
// Prepare the item data
|
665 |
-
$feed_item = apply_filters(
|
666 |
-
'wprss_populate_post_data',
|
667 |
-
array(
|
668 |
-
'post_title' => $title,
|
669 |
-
'post_content' => $item->get_content(),
|
670 |
-
'post_excerpt' => wprss_sanitize_excerpt($item->get_description()),
|
671 |
-
'post_status' => $post_status,
|
672 |
-
'post_type' => 'wprss_feed_item',
|
673 |
-
'post_date' => $date,
|
674 |
-
'post_date_gmt' => $date_gmt
|
675 |
-
),
|
676 |
-
$item
|
677 |
-
);
|
678 |
-
|
679 |
-
if ( defined('ICL_SITEPRESS_VERSION') )
|
680 |
-
@include_once( WP_PLUGIN_DIR . '/sitepress-multilingual-cms/inc/wpml-api.php' );
|
681 |
-
if ( defined('ICL_LANGUAGE_CODE') ) {
|
682 |
-
$_POST['icl_post_language'] = $language_code = ICL_LANGUAGE_CODE;
|
683 |
-
}
|
684 |
-
|
685 |
-
// Create and insert post object into the DB
|
686 |
-
$inserted_ID = wp_insert_post( $feed_item );
|
687 |
-
|
688 |
-
if ( !is_wp_error( $inserted_ID ) ) {
|
689 |
-
|
690 |
-
if ( is_object( $inserted_ID ) ) {
|
691 |
-
if ( isset( $inserted_ID['ID'] ) ) {
|
692 |
-
$inserted_ID = $inserted_ID['ID'];
|
693 |
-
}
|
694 |
-
elseif ( isset( $inserted_ID->ID ) ) {
|
695 |
-
$inserted_ID = $inserted_ID->ID;
|
696 |
-
}
|
697 |
-
}
|
698 |
-
|
699 |
-
$logger->debug('Item "{0}" was inserted into DB, ID: {1}', [
|
700 |
-
$ogItem->get_title(),
|
701 |
-
$inserted_ID,
|
702 |
-
]);
|
703 |
-
|
704 |
-
// Create and insert post meta into the DB
|
705 |
-
wprss_items_insert_post_meta( $inserted_ID, $item, $feed_ID, $permalink, $enclosure_url );
|
706 |
-
|
707 |
-
$logger->debug('Inserted meta data for item #{0}', [
|
708 |
-
$inserted_ID,
|
709 |
-
]);
|
710 |
-
|
711 |
-
// Remember newly added permalink
|
712 |
-
$existing_permalinks[$permalink] = 1;
|
713 |
-
|
714 |
-
// Increment the inserted items counter
|
715 |
-
$items_inserted++;
|
716 |
-
|
717 |
-
$logger->notice('Finished import for item {0}, ID {1}', [
|
718 |
-
$ogItem->get_title(),
|
719 |
-
$inserted_ID,
|
720 |
-
]);
|
721 |
-
}
|
722 |
-
else {
|
723 |
-
update_post_meta( $feed_ID, 'wprss_error_last_import', 'An error occurred while inserting a feed item into the database.' );
|
724 |
-
|
725 |
-
$logger->error('Failed to save item "{0}" into the database', [$item->get_title()]);
|
726 |
-
}
|
727 |
-
}
|
728 |
-
// If the item is TRUE, then a hook function in the filter inserted the item.
|
729 |
-
// increment the inserted counter
|
730 |
-
elseif ( ( is_bool($item) && $item === TRUE ) || ( $still_update_count === TRUE && $item !== FALSE ) ) {
|
731 |
-
$logger->debug('Item "{0}" was imported by an add-on or filter', [
|
732 |
$ogItem->get_title(),
|
|
|
733 |
]);
|
734 |
-
|
735 |
-
|
736 |
-
|
737 |
-
|
|
|
|
|
738 |
]);
|
739 |
-
|
740 |
-
|
741 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
742 |
]);
|
743 |
}
|
744 |
-
|
745 |
-
|
746 |
|
747 |
-
|
748 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
749 |
|
750 |
-
|
751 |
-
|
752 |
-
*
|
753 |
-
* Called from 'wprss_items_insert_post'
|
754 |
-
*
|
755 |
-
* @since 2.3
|
756 |
-
*
|
757 |
-
* @param int $inserted_ID The inserted post ID.
|
758 |
-
* @param SimplePie_Item $item The SimplePie item object.
|
759 |
-
* @param string $permalink The item's permalink.
|
760 |
-
* @param string $enclosure_url The URL to the item's enclosure.
|
761 |
-
*/
|
762 |
-
function wprss_items_insert_post_meta( $inserted_ID, $item, $feed_ID, $permalink, $enclosure_url ) {
|
763 |
-
update_post_meta( $inserted_ID, 'wprss_item_date', $item->get_date(DATE_ISO8601) );
|
764 |
-
update_post_meta( $inserted_ID, 'wprss_item_permalink', $permalink );
|
765 |
-
update_post_meta( $inserted_ID, 'wprss_item_enclosure', $enclosure_url );
|
766 |
-
|
767 |
-
/* @var $item SimplePie_Item */
|
768 |
-
$feed = $item->get_feed();
|
769 |
-
|
770 |
-
// Get the source from the RSS item
|
771 |
-
$source = $item->get_source();
|
772 |
-
|
773 |
-
// Get the source name if available. If empty, default to the feed source CPT title
|
774 |
-
$source_name = ($source === null) ? '' : $source->get_title();
|
775 |
-
$source_name = empty($source_name) ? $feed->get_title() : $source_name;
|
776 |
-
|
777 |
-
// Get the source URL if available. If empty, default to the RSS feed's URL
|
778 |
-
$source_url = ($source === null) ? '' : $source->get_permalink();
|
779 |
-
$source_url = empty($source_url) ? $feed->get_permalink() : $source_url;
|
780 |
-
|
781 |
-
update_post_meta( $inserted_ID, 'wprss_item_source_name', $source_name);
|
782 |
-
update_post_meta( $inserted_ID, 'wprss_item_source_url', $source_url);
|
783 |
-
|
784 |
-
$author = $item->get_author();
|
785 |
-
if ($author instanceof SimplePie_Author) {
|
786 |
-
update_post_meta( $inserted_ID, 'wprss_item_author', $author->get_name() );
|
787 |
-
update_post_meta( $inserted_ID, 'wprss_item_author_email', $author->get_email() );
|
788 |
-
update_post_meta( $inserted_ID, 'wprss_item_author_link', $author->get_link() );
|
789 |
-
}
|
790 |
-
|
791 |
-
update_post_meta( $inserted_ID, 'wprss_feed_id', $feed_ID);
|
792 |
-
do_action( 'wprss_items_create_post_meta', $inserted_ID, $item, $feed_ID );
|
793 |
-
}
|
794 |
-
|
795 |
-
|
796 |
-
/**
|
797 |
-
* Returns the time limit for the importing of a single feed item.
|
798 |
-
* The value if filtered through 'wprss_item_import_time_limit'. The default value is WPRSS_ITEM_IMPORT_TIME_LIMIT.
|
799 |
-
*
|
800 |
-
* @since 4.6.6
|
801 |
-
* @return int The maximum amount of seconds allowed for a single feed item to import.
|
802 |
-
*/
|
803 |
-
function wprss_get_item_import_time_limit() {
|
804 |
-
return apply_filters( 'wprss_item_import_time_limit', WPRSS_ITEM_IMPORT_TIME_LIMIT );
|
805 |
-
}
|
806 |
-
|
807 |
-
/**
|
808 |
-
* Returns the time limit for a feed fetch operation.
|
809 |
-
* The value if filtered through 'wprss_feed_fetch_time_limit'. The default value is WPRSS_FEED_FETCH_TIME_LIMIT.
|
810 |
-
*
|
811 |
-
* @since 4.6.6
|
812 |
-
* @return int The maximum amount of seconds allowed for an RSS feed XML document to be fetched.
|
813 |
-
*/
|
814 |
-
function wprss_get_feed_fetch_time_limit() {
|
815 |
-
return apply_filters( 'wprss_feed_fetch_time_limit', WPRSS_FEED_FETCH_TIME_LIMIT );
|
816 |
-
}
|
817 |
-
|
818 |
-
|
819 |
-
/**
|
820 |
-
* Fetches all feed items from all feed sources.
|
821 |
-
* Iteratively calls 'wprss_fetch_insert_single_feed_items' for all feed sources.
|
822 |
-
*
|
823 |
-
* This function is used by the cron job or the debugging functions to get all feeds from all feed sources
|
824 |
-
*
|
825 |
-
* @param $all If set to TRUE, the function will pull from all feed sources, regardless of their individual
|
826 |
-
* update interval. If set to FALSE, only feed sources using the global update system will be updated.
|
827 |
-
* (Optional) Default: TRUE.
|
828 |
-
* @since 3.0
|
829 |
-
*/
|
830 |
-
function wprss_fetch_insert_all_feed_items( $all = TRUE ) {
|
831 |
-
wpra_get_logger()->info('Beginning import for all feed sources');
|
832 |
-
// Get all feed sources
|
833 |
-
$feed_sources = wprss_get_all_feed_sources();
|
834 |
-
|
835 |
-
if( $feed_sources->have_posts() ) {
|
836 |
-
// Start by getting one feed source, we will cycle through them one by one,
|
837 |
-
// fetching feed items and adding them to the database in each pass
|
838 |
-
while ( $feed_sources->have_posts() ) {
|
839 |
-
$feed_sources->the_post();
|
840 |
-
|
841 |
-
$interval = get_post_meta( get_the_ID(), 'wprss_update_interval', TRUE );
|
842 |
-
$using_global_interval = ( $interval === wprss_get_default_feed_source_update_interval() || $interval === '' );
|
843 |
-
|
844 |
-
// Check if fetching from all, or if feed source uses the global interval
|
845 |
-
if ( $all === TRUE || $using_global_interval ) {
|
846 |
-
wp_schedule_single_event( time(), 'wprss_fetch_single_feed_hook', array( get_the_ID() ) );
|
847 |
-
}
|
848 |
-
}
|
849 |
-
wp_reset_postdata(); // Restore the $post global to the current post in the main query
|
850 |
-
}
|
851 |
-
}
|
852 |
-
|
853 |
-
|
854 |
-
/**
|
855 |
-
* Runs the above function with parameter FALSE
|
856 |
-
*
|
857 |
-
* @since 3.9
|
858 |
-
*/
|
859 |
-
function wprss_fetch_insert_all_feed_items_from_cron() {
|
860 |
-
wprss_fetch_insert_all_feed_items( FALSE );
|
861 |
-
}
|
862 |
-
|
863 |
-
|
864 |
-
/**
|
865 |
-
* Shutdown function for detecting if the PHP script reaches the maximum execution time limit
|
866 |
-
* while importing a feed.
|
867 |
-
*
|
868 |
-
* @since 4.6.6
|
869 |
-
*/
|
870 |
-
function wprss_detect_exec_timeout() {
|
871 |
-
global $wprss_importing_feed;
|
872 |
-
$feed_ID = (isset($wprss_importing_feed) && !empty($wprss_importing_feed))
|
873 |
-
? $wprss_importing_feed
|
874 |
-
: null;
|
875 |
|
876 |
-
|
877 |
-
|
878 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
879 |
|
880 |
-
|
881 |
-
|
882 |
|
883 |
-
|
884 |
-
$
|
885 |
-
|
886 |
-
|
|
|
|
|
|
|
|
|
887 |
}
|
|
|
888 |
|
889 |
-
|
890 |
-
|
891 |
-
wprss_get_item_import_time_limit(),
|
892 |
-
$error['message']
|
893 |
-
);
|
894 |
-
// Save the error in the feed source's meta and the plugin log
|
895 |
-
update_post_meta($feed_ID, 'wprss_error_last_import', $msg);
|
896 |
-
wpra_get_logger($feed_ID)->error($msg);
|
897 |
-
}
|
898 |
|
899 |
-
|
900 |
-
|
901 |
-
|
902 |
-
|
903 |
-
|
904 |
-
|
905 |
-
|
906 |
-
|
907 |
-
|
908 |
-
|
909 |
-
|
910 |
-
|
911 |
-
|
912 |
-
|
|
|
|
|
|
|
|
|
|
|
913 |
}
|
914 |
|
915 |
-
|
916 |
-
|
917 |
-
|
918 |
-
|
919 |
-
|
920 |
-
|
921 |
-
|
922 |
-
|
923 |
-
|
924 |
-
|
925 |
-
|
926 |
-
|
927 |
-
|
928 |
-
|
929 |
-
|
930 |
-
|
931 |
-
|
932 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
933 |
|
934 |
-
|
935 |
-
|
936 |
-
|
937 |
-
|
938 |
-
|
939 |
-
|
940 |
-
|
941 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
942 |
}
|
|
|
943 |
}
|
|
|
944 |
|
945 |
-
/**
|
946 |
-
* Recursively compares two items using a list of comparators.
|
947 |
-
*
|
948 |
-
* If a comparator determines that two items are equal, then the items are
|
949 |
-
* evaluated using the next comparator in list, recursively until one of
|
950 |
-
* the comparators establishes a difference between items, or the list of
|
951 |
-
* comparators is exhausted.
|
952 |
-
*
|
953 |
-
* @since 4.11.2
|
954 |
-
*
|
955 |
-
* @param \SimplePie_Item|mixed $itemA The item being compared;
|
956 |
-
* @param \SimplePie_Item|mixed $itemB The item being compared to;
|
957 |
-
* @param callable[] $comparators A list of functions for item comparison.
|
958 |
-
*
|
959 |
-
* @return int A result usable as a return value for {@see usort()}.
|
960 |
-
*
|
961 |
-
* @throws \InvalidArgumentException If the comparator is not callable.
|
962 |
-
*/
|
963 |
-
function wprss_items_sort_compare_items($itemA, $itemB, $comparators, $feedSource = null)
|
964 |
-
{
|
965 |
-
if (empty($comparators)) {
|
966 |
-
return 0;
|
967 |
-
}
|
968 |
|
969 |
-
|
970 |
-
|
971 |
-
|
972 |
-
|
|
|
|
|
|
|
|
|
973 |
|
974 |
-
$result = call_user_func_array($comparator, array($itemA, $itemB, $feedSource));
|
975 |
-
if (!$result) {
|
976 |
-
return wprss_items_sort_compare_items($itemA, $itemB, $comparators);
|
977 |
-
}
|
978 |
|
979 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
980 |
}
|
981 |
|
982 |
-
|
983 |
-
|
984 |
-
*
|
985 |
-
* @since 4.11.2
|
986 |
-
*
|
987 |
-
* @param string $key The key of the field or setting.
|
988 |
-
* @param \WP_Post|null $feedSource The feed source, if any.
|
989 |
-
* @return type
|
990 |
-
*/
|
991 |
-
function wprss_get_source_meta_or_setting($key, $feedSource = null)
|
992 |
-
{
|
993 |
-
$value = null;
|
994 |
-
if ($feedSource instanceof \WP_Post) {
|
995 |
-
$value = $feedSource->{$key};
|
996 |
-
}
|
997 |
|
998 |
-
|
999 |
-
|
1000 |
-
|
|
|
1001 |
}
|
1002 |
|
1003 |
-
|
1004 |
-
|
1005 |
-
|
1006 |
-
|
1007 |
-
|
1008 |
-
|
1009 |
-
|
1010 |
-
|
1011 |
-
|
1012 |
-
* @param \WP_Post|null $feedSource The feed source for which the items are being compared, if any.
|
1013 |
-
* @return int A comparison result for {@see usort()}.
|
1014 |
-
*/
|
1015 |
-
function wprss_item_comparator_date($itemA, $itemB, $feedSource = null)
|
1016 |
-
{
|
1017 |
-
$sortOrder = wprss_get_source_meta_or_setting('feed_items_import_order', $feedSource);
|
1018 |
-
if (empty($sortOrder)) {
|
1019 |
-
return 0;
|
1020 |
-
}
|
1021 |
|
1022 |
-
|
1023 |
-
|
1024 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1025 |
|
1026 |
-
|
1027 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1028 |
|
1029 |
-
|
1030 |
-
|
1031 |
-
|
1032 |
-
|
1033 |
-
|
1034 |
-
|
1035 |
-
|
|
|
|
|
|
|
1036 |
|
1037 |
-
|
1038 |
-
|
1039 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1040 |
|
1041 |
-
|
1042 |
-
|
1043 |
-
|
1044 |
-
break;
|
1045 |
-
}
|
1046 |
}
|
1047 |
|
1048 |
-
|
1049 |
-
|
1050 |
-
|
1051 |
-
* @since 4.11.2
|
1052 |
-
*
|
1053 |
-
* @param \WP_Post|null $feedSource The feed source, for which to get comparators, if any.
|
1054 |
-
*
|
1055 |
-
* @return callable[] The list of comparators.
|
1056 |
-
*/
|
1057 |
-
function wprss_sort_comparators_default($feedSource = null)
|
1058 |
-
{
|
1059 |
-
$helper = wprss_wp_container()->get('wprss.admin_helper');
|
1060 |
-
$defaultArgs = array(2 => $feedSource);
|
1061 |
-
return array(
|
1062 |
-
$helper->createCommand('wprss_item_comparator_date', $defaultArgs),
|
1063 |
-
);
|
1064 |
}
|
1065 |
|
1066 |
-
|
1067 |
-
|
1068 |
-
|
1069 |
-
|
1070 |
-
|
1071 |
-
|
1072 |
-
|
1073 |
-
|
1074 |
-
|
1075 |
-
|
1076 |
-
|
1077 |
-
|
1078 |
-
|
1079 |
-
|
1080 |
-
|
1081 |
-
|
1082 |
-
|
1083 |
-
$excerpt = str_replace(' ', ' ', trim($excerpt));
|
1084 |
-
|
1085 |
-
return $excerpt;
|
1086 |
}
|
1087 |
|
1088 |
-
|
1089 |
-
|
1090 |
-
|
1091 |
-
|
1092 |
-
|
1093 |
-
|
1094 |
-
|
1095 |
-
|
1096 |
-
|
1097 |
-
|
1098 |
-
|
1099 |
-
|
1100 |
-
|
1101 |
-
|
1102 |
-
|
1103 |
-
|
1104 |
-
|
1105 |
-
|
1106 |
-
|
1107 |
-
|
1108 |
-
|
1109 |
-
|
1110 |
-
parse_str($parsed['query_str'], $parsed['query']);
|
1111 |
-
|
1112 |
-
return $parsed;
|
1113 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<?php
|
2 |
|
3 |
+
/**
|
4 |
+
* Functions relating to feed importing
|
5 |
+
*
|
6 |
+
* @package WPRSSAggregator
|
7 |
+
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
9 |
+
// Warning: Order may be important
|
10 |
+
add_filter('wprss_normalize_permalink', 'wprss_google_news_url_fix', 8);
|
11 |
+
add_filter('wprss_normalize_permalink', 'wprss_bing_news_url_fix', 9);
|
12 |
+
add_filter('wprss_normalize_permalink', 'wprss_google_alerts_url_fix', 10);
|
13 |
+
add_filter('wprss_normalize_permalink', 'wprss_convert_video_permalink', 100);
|
14 |
|
15 |
+
// Adds comparators for item sorting
|
16 |
+
add_filter('wprss_item_comparators', 'wprss_sort_comparators_default');
|
|
|
|
|
17 |
|
18 |
+
add_action( 'wprss_fetch_single_feed_hook', 'wprss_fetch_insert_single_feed_items' );
|
19 |
+
/**
|
20 |
+
* The main feed fetching function.
|
21 |
+
* Fetches the feed items from the source provided and inserts them into the DB.
|
22 |
+
*
|
23 |
+
* Called on hook 'wprss_fetch_single_feed_hook'.
|
24 |
+
*
|
25 |
+
* @since 3.2
|
26 |
+
*/
|
27 |
+
function wprss_fetch_insert_single_feed_items( $feed_ID ) {
|
28 |
+
set_transient('wpra/feeds/importing/' . $feed_ID, true, 0);
|
29 |
|
30 |
+
global $wprss_importing_feed;
|
31 |
+
$wprss_importing_feed = $feed_ID;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
|
33 |
+
register_shutdown_function('wprss_detect_exec_timeout');
|
|
|
|
|
|
|
|
|
|
|
34 |
|
35 |
+
$importFn = function ($feed_ID) {
|
36 |
+
$logger = wpra_get_logger($feed_ID);
|
37 |
+
$logger->info('Starting import of feed {id}', ['id' => $feed_ID]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
|
39 |
+
$t = microtime(true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
|
41 |
+
// Check if the feed source is active.
|
42 |
+
if ( ! wprss_is_feed_source_active( $feed_ID ) && ! wprss_feed_source_force_next_fetch( $feed_ID ) ) {
|
43 |
+
$logger->info('Feed is not active. Finished');
|
44 |
+
return;
|
45 |
+
}
|
46 |
|
47 |
+
// If the feed source is forced for next fetch, remove the force next fetch data
|
48 |
+
if ( wprss_feed_source_force_next_fetch( $feed_ID ) ) {
|
49 |
+
delete_post_meta( $feed_ID, 'wprss_force_next_fetch' );
|
50 |
+
}
|
|
|
51 |
|
52 |
+
// Truncate old items first
|
53 |
+
wprss_truncate_items_for_source( $feed_ID );
|
|
|
54 |
|
55 |
+
// Get the feed source URL from post meta, and filter it
|
56 |
+
$feed_url = get_post_meta( $feed_ID, 'wprss_url', true );
|
57 |
+
$feed_url = apply_filters( 'wprss_feed_source_url', $feed_url, $feed_ID );
|
58 |
+
$logger->debug('Feed source URL: {0}', [$feed_url]);
|
59 |
|
60 |
+
// Get the feed limit from post meta
|
61 |
+
$feed_limit = get_post_meta( $feed_ID, 'wprss_limit', true );
|
|
|
62 |
|
63 |
+
// If the feed has no individual limit
|
64 |
+
if ( $feed_limit === '' || intval( $feed_limit ) <= 0 ) {
|
65 |
+
// Get the global limit
|
66 |
+
$global_limit = wprss_get_general_setting('limit_feed_items_imported');
|
67 |
+
// If no global limit is set, mark as NULL
|
68 |
+
if ( $global_limit === '' || intval($global_limit) <= 0 ) {
|
69 |
+
$feed_limit = NULL;
|
70 |
+
}
|
71 |
+
else $feed_limit = $global_limit;
|
72 |
+
}
|
73 |
|
74 |
+
// Filter the URL for validaty
|
75 |
+
if ( ! wprss_validate_url( $feed_url ) ) {
|
76 |
+
$logger->error('Feed URL is not valid!');
|
77 |
+
} else {
|
78 |
+
// Get the feed items from the source
|
79 |
+
$items = wprss_get_feed_items( $feed_url, $feed_ID );
|
|
|
80 |
|
81 |
+
// If got NULL, convert to an empty array
|
82 |
+
if ( $items === NULL ) {
|
83 |
+
$items_to_insert = array();
|
84 |
+
} else {
|
85 |
+
// See `wprss_item_comparators` filter
|
86 |
+
wprss_sort_items($items);
|
87 |
|
88 |
+
// If using a limit ...
|
89 |
+
if ( $feed_limit === NULL ) {
|
90 |
+
$items_to_insert = $items;
|
91 |
+
} else {
|
92 |
+
$items_to_insert = array_slice( $items, 0, $feed_limit );
|
93 |
+
$logger->debug('{0} items in the feed, {1} items after applying limit', [
|
94 |
+
count($items),
|
95 |
+
count($items_to_insert)
|
96 |
+
]);
|
97 |
+
}
|
98 |
+
}
|
99 |
|
100 |
+
$unique_titles_only = get_post_meta($feed_ID, 'wprss_unique_titles', true);
|
101 |
+
$unique_titles_only = ($unique_titles_only === '')
|
102 |
+
? wprss_get_general_setting('unique_titles')
|
103 |
+
: $unique_titles_only;
|
104 |
+
$unique_titles_only = filter_var($unique_titles_only, FILTER_VALIDATE_BOOLEAN);
|
105 |
+
// Gather the titles of the items that are imported
|
106 |
+
// The import process will check not only the titles in the DB but the titles currently in the feed
|
107 |
+
$existing_titles = [];
|
108 |
+
|
109 |
+
// Gather the permalinks of existing feed item's related to this feed source
|
110 |
+
$existing_permalinks = wprss_get_existing_permalinks( $feed_ID );
|
111 |
+
|
112 |
+
// Generate a list of items fetched, that are not already in the DB
|
113 |
+
$new_items = array();
|
114 |
+
foreach ( $items_to_insert as $item ) {
|
115 |
+
$item_title = $item->get_title();
|
116 |
+
$permalink = wprss_normalize_permalink( $item->get_permalink(), $item, $feed_ID );
|
117 |
+
|
118 |
+
// Check if blacklisted
|
119 |
+
if (wprss_is_blacklisted($permalink)) {
|
120 |
+
$logger->debug('Item "{0}" is blacklisted', [$item_title]);
|
121 |
+
|
122 |
+
continue;
|
123 |
}
|
124 |
|
125 |
+
// Check if already imported
|
126 |
+
if (array_key_exists($permalink, $existing_permalinks)) {
|
127 |
+
$logger->debug('Item "{0}" already exists in the database', [$item_title]);
|
128 |
|
129 |
+
continue;
|
|
|
130 |
}
|
131 |
|
132 |
+
// Check if title exists (if the option is enabled)
|
133 |
+
if ($unique_titles_only) {
|
134 |
+
$title_exists_db = wprss_item_title_exists($item->get_title());
|
135 |
+
$title_exists_feed = array_key_exists($item_title, $existing_titles);
|
136 |
+
$title_exists = $title_exists_db || $title_exists_feed;
|
137 |
+
// Add this item's title to the list to check against
|
138 |
+
$existing_titles[$item_title] = 1;
|
139 |
|
140 |
+
if ($title_exists) {
|
141 |
+
$logger->debug('An item with the title "{0}" already exists', [$item_title]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
142 |
|
143 |
+
continue;
|
|
|
144 |
}
|
145 |
}
|
146 |
|
147 |
+
$new_items[] = $item;
|
148 |
+
}
|
149 |
+
|
150 |
+
$original_count = count( $items_to_insert );
|
151 |
+
$new_count = count( $new_items );
|
152 |
|
153 |
+
if ( $new_count !== $original_count ) {
|
154 |
+
$logger->debug('{0} will be skipped', [$original_count - $new_count]);
|
155 |
+
}
|
156 |
+
|
157 |
+
$items_to_insert = $new_items;
|
158 |
+
$per_import = wprss_get_general_setting('limit_feed_items_per_import');
|
159 |
+
if (!empty($per_import)) {
|
160 |
+
$items_to_insert = array_slice( $items_to_insert, 0, $per_import );
|
161 |
+
}
|
162 |
+
|
163 |
+
// If using a limit - delete any excess items to make room for the new items
|
164 |
+
if ( $feed_limit !== NULL ) {
|
165 |
+
// Get the number of feed items in DB, and their count
|
166 |
+
$db_feed_items = wprss_get_feed_items_for_source( $feed_ID );
|
167 |
+
$num_db_feed_items = $db_feed_items->post_count;
|
168 |
+
|
169 |
+
// Get the number of feed items we can store until we reach the limit
|
170 |
+
$num_can_insert = $feed_limit - $num_db_feed_items;
|
171 |
+
// Calculate how many feed items we must delete before importing, to keep to the limit
|
172 |
+
$num_new_items = count( $new_items );
|
173 |
+
$num_feed_items_to_delete = $num_can_insert > $num_new_items
|
174 |
+
? 0
|
175 |
+
: $num_new_items - $num_can_insert;
|
176 |
+
|
177 |
+
// Get an array with the DB feed items in reverse order (oldest first)
|
178 |
+
$db_feed_items_reversed = array_reverse( $db_feed_items->posts );
|
179 |
+
// Cut the array to get only the first few that are to be deleted ( equal to $num_feed_items_to_delete )
|
180 |
+
$feed_items_to_delete = array_slice( $db_feed_items_reversed, 0, $num_feed_items_to_delete );
|
181 |
+
|
182 |
+
// Iterate the feed items and delete them
|
183 |
+
$num_items_deleted = 0;
|
184 |
+
foreach ( $feed_items_to_delete as $key => $post ) {
|
185 |
+
wp_delete_post( $post->ID, TRUE );
|
186 |
+
$num_items_deleted++;
|
187 |
+
}
|
188 |
+
|
189 |
+
if ($num_items_deleted > 0) {
|
190 |
+
$logger->info('Deleted the oldest {0} items', [$num_items_deleted]);
|
191 |
}
|
192 |
}
|
193 |
|
194 |
+
update_post_meta( $feed_ID, 'wprss_last_update', $last_update_time = time() );
|
195 |
+
update_post_meta( $feed_ID, 'wprss_last_update_items', 0 );
|
196 |
|
197 |
+
// Insert the items into the db
|
198 |
+
if ( !empty( $items_to_insert ) ) {
|
199 |
+
wprss_items_insert_post( $items_to_insert, $feed_ID );
|
|
|
200 |
}
|
201 |
+
}
|
202 |
|
203 |
+
$next_scheduled = get_post_meta( $feed_ID, 'wprss_reschedule_event', TRUE );
|
204 |
|
205 |
+
if ( $next_scheduled !== '' ) {
|
206 |
+
wprss_feed_source_update_start_schedule( $feed_ID );
|
207 |
+
delete_post_meta( $feed_ID, 'wprss_reschedule_event' );
|
208 |
+
$logger->info('Scheduled next update');
|
209 |
+
}
|
210 |
|
211 |
+
$t = microtime(true) - $t;
|
212 |
|
213 |
+
$logger->info(sprintf('Import completed in %.2f seconds!', $t));
|
214 |
+
};
|
|
|
|
|
215 |
|
216 |
+
$importFn($feed_ID);
|
217 |
|
218 |
+
delete_transient('wpra/feeds/importing/' . $feed_ID);
|
219 |
+
wprss_flag_feed_as_idle($feed_ID);
|
220 |
+
$wprss_importing_feed = null;
|
221 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
222 |
|
223 |
+
/**
|
224 |
+
* Fetches the feed items from a feed at the given URL.
|
225 |
+
*
|
226 |
+
* Called from 'wprss_fetch_insert_single_feed_items'
|
227 |
+
*
|
228 |
+
* @since 3.0
|
229 |
+
*
|
230 |
+
* @return SimplePie_Item[]|null
|
231 |
+
*/
|
232 |
+
function wprss_get_feed_items( $feed_url, $source, $force_feed = FALSE ) {
|
233 |
+
// Add filters and actions prior to fetching the feed items
|
234 |
+
add_filter( 'wp_feed_cache_transient_lifetime' , 'wprss_feed_cache_lifetime' );
|
235 |
|
236 |
+
/* Fetch the feed from the soure URL specified */
|
237 |
+
$feed = wprss_fetch_feed( $feed_url, $source, $force_feed );
|
|
|
|
|
|
|
238 |
|
239 |
+
if (is_wp_error($feed)) {
|
240 |
+
wpra_get_logger($source)->error('Failed to fetch the feed from {0}. Error: {1}', [
|
241 |
+
$feed_url,
|
242 |
+
$feed->get_error_message()
|
243 |
+
]);
|
244 |
|
245 |
+
return NULL;
|
246 |
+
}
|
247 |
|
248 |
+
update_post_meta( $source, 'wprss_site_url', $feed->get_permalink() );
|
249 |
+
update_post_meta( $source, 'wprss_feed_image', $feed->get_image_url() );
|
250 |
|
251 |
+
// Remove previously added filters and actions
|
252 |
+
remove_filter( 'wp_feed_cache_transient_lifetime' , 'wprss_feed_cache_lifetime' );
|
253 |
|
254 |
+
return @$feed->get_items();
|
255 |
+
}
|
256 |
+
|
257 |
+
if (defined('WP_DEBUG') && WP_DEBUG) {
|
258 |
+
add_action ('cron_request', 'wpse_cron_add_xdebug_cookie', 10) ;
|
259 |
+
}
|
260 |
|
261 |
/**
|
262 |
* Allow debugging of wp_cron jobs
|
266 |
*
|
267 |
* @return array $cron_request_array with the current XDEBUG_SESSION cookie added if set
|
268 |
*/
|
269 |
+
function wpse_cron_add_xdebug_cookie ($cron_request_array)
|
270 |
{
|
271 |
if (empty ($_COOKIE['XDEBUG_SESSION'])) {
|
272 |
return ($cron_request_array) ;
|
321 |
}
|
322 |
|
323 |
|
324 |
+
/**
|
325 |
+
* A clone of the function 'fetch_feed' in wp-includes/feed.php [line #529]
|
326 |
+
*
|
327 |
+
* Called from 'wprss_get_feed_items'
|
328 |
+
*
|
329 |
+
* @since 3.5
|
330 |
+
*/
|
331 |
+
function wprss_fetch_feed($url, $source = null, $param_force_feed = false)
|
332 |
+
{
|
333 |
+
// Trim the URL
|
334 |
+
$url = trim($url);
|
335 |
+
// Parse the URL
|
336 |
+
$parsed = wpra_parse_url($url);
|
337 |
+
// Filter the URL
|
338 |
+
$url = apply_filters('wpra/importer/feed/url', $url, $parsed);
|
339 |
+
|
340 |
+
// Initialize the Feed
|
341 |
+
$feed = new SimplePie();
|
342 |
+
$feed->set_feed_url($url);
|
343 |
+
$feed->set_autodiscovery_level(SIMPLEPIE_LOCATOR_ALL);
|
344 |
+
|
345 |
+
// If a feed source was passed
|
346 |
+
if ($source !== null || $param_force_feed) {
|
347 |
+
// Get the force feed option for the feed source
|
348 |
+
$force_feed = get_post_meta($source, 'wprss_force_feed', true);
|
349 |
+
// If turned on, force the feed
|
350 |
+
if ($force_feed == 'true' || $param_force_feed) {
|
351 |
+
$feed->force_feed(true);
|
352 |
+
$feed->set_autodiscovery_level(SIMPLEPIE_LOCATOR_NONE);
|
353 |
+
|
354 |
+
global $wpraNoSslVerification;
|
355 |
+
$wpraNoSslVerification = true;
|
|
|
356 |
}
|
357 |
+
}
|
358 |
+
|
359 |
+
// Set timeout limit
|
360 |
+
$fetch_time_limit = wprss_get_feed_fetch_time_limit();
|
361 |
+
$feed->set_timeout($fetch_time_limit);
|
362 |
+
|
363 |
+
$cacheEnabled = wprss_is_feed_cache_enabled();
|
364 |
+
$feed->enable_cache($cacheEnabled);
|
365 |
+
|
366 |
+
if ($cacheEnabled) {
|
367 |
+
$feed->set_cache_location(wprss_get_feed_cache_dir());
|
368 |
+
}
|
369 |
|
370 |
+
// Reference array action hook, for the feed object and the URL
|
371 |
+
do_action_ref_array('wp_feed_options', array(&$feed, $url));
|
|
|
372 |
|
373 |
+
// Prepare the tags to strip from the feed
|
374 |
+
$tags_to_strip = apply_filters('wprss_feed_tags_to_strip', $feed->strip_htmltags, $source);
|
375 |
+
// Strip them
|
376 |
+
$feed->strip_htmltags($tags_to_strip);
|
377 |
|
378 |
+
do_action('wprss_fetch_feed_before', $feed, $source);
|
379 |
+
|
380 |
+
// Fetch the feed
|
381 |
+
$feed->init();
|
382 |
+
$feed->handle_content_type();
|
383 |
+
|
384 |
+
do_action('wprss_fetch_feed_after', $feed);
|
385 |
+
|
386 |
+
// Convert the feed error into a WP_Error, if applicable
|
387 |
+
if ($feed->error()) {
|
388 |
+
if ($source !== null) {
|
389 |
+
$msg = sprintf(__('Failed to fetch the RSS feed. Error: %s', WPRSS_TEXT_DOMAIN), $feed->error());
|
390 |
+
update_post_meta($source, 'wprss_error_last_import', $msg);
|
391 |
}
|
392 |
+
return new WP_Error('simplepie-error', $feed->error(), array('feed' => $feed));
|
393 |
+
}
|
394 |
+
// If no error, return the feed and remove any error meta
|
395 |
+
delete_post_meta($source, 'wprss_error_last_import');
|
396 |
+
return $feed;
|
397 |
+
}
|
398 |
|
|
|
|
|
399 |
|
400 |
+
/**
|
401 |
+
* Normalizes the given permalink.
|
402 |
+
*
|
403 |
+
* @param string $permalink The permalink to normalize
|
404 |
+
* @return string The normalized permalink
|
405 |
+
* @since 4.2.3
|
406 |
+
*/
|
407 |
+
function wprss_normalize_permalink( $permalink, $item, $feed_ID) {
|
408 |
+
// Apply normalization functions on the permalink
|
409 |
+
$permalink = trim( $permalink );
|
410 |
+
$permalink = apply_filters( 'wprss_normalize_permalink', $permalink, $item, $feed_ID);
|
411 |
+
// Return the normalized permalink
|
412 |
+
return $permalink;
|
413 |
+
}
|
414 |
|
|
|
415 |
|
416 |
+
/**
|
417 |
+
* Extracts the actual URL from a Google News permalink
|
418 |
+
*
|
419 |
+
* @param string $permalink The permalink to normalize.
|
420 |
+
* @since 4.2.3
|
421 |
+
*/
|
422 |
+
function wprss_google_news_url_fix($permalink) {
|
423 |
+
return wprss_tracking_url_fix($permalink, '!^(https?:\/\/)?' . preg_quote('news.google.com', '!') . '.*!');
|
424 |
+
}
|
425 |
+
|
426 |
+
|
427 |
+
/**
|
428 |
+
* Extracts the actual URL from a Google Alerts permalink
|
429 |
+
*
|
430 |
+
* @param string $permalink The permalink to normalize.
|
431 |
+
* @since 4.7.3
|
432 |
+
*/
|
433 |
+
function wprss_google_alerts_url_fix($permalink) {
|
434 |
+
return wprss_tracking_url_fix($permalink, '!^(https?:\/\/)?(www\.)?' . preg_quote('google.com/url', '!') . '.*!');
|
435 |
+
}
|
436 |
+
|
437 |
+
|
438 |
+
/**
|
439 |
+
* Extracts the actual URL from a Bing permalink
|
440 |
+
*
|
441 |
+
* @param string $permalink The permalink to normalize.
|
442 |
+
* @since 4.2.3
|
443 |
+
*/
|
444 |
+
function wprss_bing_news_url_fix($permalink) {
|
445 |
+
return wprss_tracking_url_fix($permalink, '!^(https?:\/\/)?(www\.)?' . preg_quote('bing.com/news', '!') . '.*!');
|
446 |
+
}
|
447 |
+
|
448 |
+
|
449 |
+
/**
|
450 |
+
* Checks if the permalink is a tracking permalink based on host, and if
|
451 |
+
* it is, returns the normalized URL of the proper feed item article,
|
452 |
+
* determined by the named query argument.
|
453 |
+
*
|
454 |
+
* Fixes the issue with equivalent Google News etc. items having
|
455 |
+
* different URLs, that contain randomly generated GET parameters.
|
456 |
+
* Example:
|
457 |
+
*
|
458 |
+
* http://news.google.com/news/url?sa=t&fd=R&ct2=us&ei=V3e9U6izMMnm1QaB1YHoDA&url=http://abcd...
|
459 |
+
* http://news.google.com/news/url?sa=t&fd=R&ct2=us&ei=One9U-HQLsTp1Aal-oDQBQ&url=http://abcd...
|
460 |
+
*
|
461 |
+
* @param string $permalink The permalink URL to check and/or normalize.
|
462 |
+
* @param string|array $patterns One or an array of host names, for which the URL should be fixed.
|
463 |
+
* @param string Name of the query argument that specifies the actual URL.
|
464 |
+
* @return string The normalized URL of the original article, as indicated by the `url`
|
465 |
+
* parameter in the URL query string.
|
466 |
+
* @since 4.2.3
|
467 |
+
*/
|
468 |
+
function wprss_tracking_url_fix( $permalink, $patterns, $argName = 'url' ) {
|
469 |
+
// Parse the url
|
470 |
+
$parsed = parse_url( urldecode( html_entity_decode( $permalink ) ) );
|
471 |
+
$patterns = is_array($patterns) ? $patterns :array($patterns);
|
472 |
+
|
473 |
+
// If parsing failed, return the permalink
|
474 |
+
if ( $parsed === FALSE || $parsed === NULL ) return $permalink;
|
475 |
+
|
476 |
+
// Determine if it's a tracking item
|
477 |
+
$isMatch = false;
|
478 |
+
foreach( $patterns as $_idx => $_pattern ) {
|
479 |
+
if( preg_match($_pattern, $permalink) ) {
|
480 |
+
$isMatch = true;
|
481 |
+
break;
|
482 |
+
}
|
483 |
+
}
|
484 |
+
|
485 |
+
if( !$isMatch ) return $permalink;
|
486 |
+
|
487 |
+
// Check if the url GET query string is present
|
488 |
+
if ( !isset( $parsed['query'] ) ) return $permalink;
|
489 |
|
490 |
+
// Parse the query string
|
491 |
+
$query = array();
|
492 |
+
parse_str( $parsed['query'], $query );
|
493 |
|
494 |
+
// Check if the url GET parameter is present in the query string
|
495 |
+
if ( !is_array($query) || !isset( $query[$argName] ) ) return $permalink;
|
496 |
+
|
497 |
+
return urldecode( $query[$argName] );
|
498 |
+
}
|
499 |
+
|
500 |
+
|
501 |
+
/**
|
502 |
+
* Converts YouTube, Vimeo and DailyMotion video urls
|
503 |
+
* into embedded video player urls.
|
504 |
+
* If the permalink is not a video url, the permalink is returned as is.
|
505 |
+
*
|
506 |
+
* @param $permalink The string permalink url to convert.
|
507 |
+
* @return A string, with the convert permalink, or the same permalink passed as parameter if
|
508 |
+
* not a video url.
|
509 |
+
* @since 4.0
|
510 |
+
*/
|
511 |
+
function wprss_convert_video_permalink( $permalink ) {
|
512 |
+
// CHECK PERMALINK FOR VIDEO HOSTS : YOUTUBE, VIMEO AND DAILYMOTION
|
513 |
+
$found_video_host = preg_match( '/http[s]?:\/\/(www\.)?(youtube|dailymotion|vimeo)\.com\/(.*)/i', $permalink, $matches );
|
514 |
+
|
515 |
+
// If video host was found
|
516 |
+
if ( $found_video_host !== 0 && $found_video_host !== FALSE ) {
|
517 |
+
|
518 |
+
// Get general options
|
519 |
+
$options = get_option( 'wprss_settings_general' );
|
520 |
+
// Get the video link option entry, or false if it does not exist
|
521 |
+
$video_link = ( isset($options['video_link']) )? $options['video_link'] : 'false';
|
522 |
+
|
523 |
+
// If the video link option is true, change the video URL to its repective host's embedded
|
524 |
+
// video player URL. Otherwise, leave the permalink as is.
|
525 |
+
if ( strtolower( $video_link ) === 'true' ) {
|
526 |
+
$host = $matches[2];
|
527 |
+
switch( $host ) {
|
528 |
+
case 'youtube':
|
529 |
+
preg_match( '/(&|\?)v=([^&]+)/', $permalink, $yt_matches );
|
530 |
+
$permalink = 'https://www.youtube.com/embed/' . $yt_matches[2];
|
531 |
+
break;
|
532 |
+
case 'vimeo':
|
533 |
+
preg_match( '/(\d*)$/i', $permalink, $vim_matches );
|
534 |
+
$permalink = 'https://player.vimeo.com/video/' . $vim_matches[0];
|
535 |
+
break;
|
536 |
+
case 'dailymotion':
|
537 |
+
preg_match( '/(\.com\/)(video\/)(.*)/i', $permalink, $dm_matches );
|
538 |
+
$permalink = 'https://www.dailymotion.com/embed/video/' . $dm_matches[3];
|
539 |
+
break;
|
540 |
}
|
|
|
541 |
}
|
542 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
543 |
|
544 |
+
return $permalink;
|
545 |
+
}
|
546 |
+
|
547 |
+
|
548 |
+
/**
|
549 |
+
* Insert wprss_feed_item posts into the DB
|
550 |
+
*
|
551 |
+
* @since 3.0
|
552 |
+
*
|
553 |
+
* @param SimplePie_Item[] $items
|
554 |
+
* @param int|string $feed_ID
|
555 |
+
*/
|
556 |
+
function wprss_items_insert_post( $items, $feed_ID ) {
|
557 |
+
update_post_meta( $feed_ID, 'wprss_feed_is_updating', $update_started_at = time() );
|
558 |
+
$logger = wpra_get_logger($feed_ID);
|
559 |
+
|
560 |
+
// Gather the permalinks of existing feed item's related to this feed source
|
561 |
+
$existing_permalinks = wprss_get_existing_permalinks( $feed_ID );
|
562 |
+
|
563 |
+
// Count of items inserted
|
564 |
+
$items_inserted = 0;
|
565 |
+
|
566 |
+
foreach ( $items as $i => $item ) {
|
567 |
+
|
568 |
+
// Normalize the URL
|
569 |
+
$permalink = $item->get_permalink(); // Link or enclosure URL
|
570 |
+
$permalink = htmlspecialchars_decode( $permalink ); // SimplePie encodes HTML special chars
|
571 |
+
|
572 |
+
$logger->debug('Beginning import for item "{0}"', [$item->get_title()]);
|
573 |
+
|
574 |
+
$permalink = wprss_normalize_permalink( $permalink, $item, $feed_ID );
|
575 |
+
|
576 |
+
// Save the enclosure URL
|
577 |
+
$enclosure_url = '';
|
578 |
+
$enclosure = $item->get_enclosure(0);
|
579 |
+
|
580 |
+
if ($enclosure && $enclosure->get_link()) {
|
581 |
+
$enclosure_url = $enclosure->get_link();
|
582 |
+
}
|
583 |
+
|
584 |
+
// Check if newly fetched item already present in existing feed items,
|
585 |
+
// if not insert it into wp_posts and insert post meta.
|
586 |
+
if ( ! ( array_key_exists( $permalink, $existing_permalinks ) ) ) {
|
587 |
+
// Extend the importing time and refresh the feed's updating flag to reflect that it is active
|
588 |
+
$time_limit = wprss_get_item_import_time_limit();
|
589 |
+
set_time_limit( $time_limit );
|
590 |
+
|
591 |
+
global $wp_filter;
|
592 |
+
if (isset($wp_filter['wprss_insert_post_item_conditionals'])) {
|
593 |
+
$hook = $wp_filter['wprss_insert_post_item_conditionals'];
|
594 |
+
|
595 |
+
if (count($hook->callbacks) > 0) {
|
596 |
+
$logger->debug('Hooks for `wprss_insert_post_item_conditionals`:');
|
597 |
+
}
|
598 |
+
|
599 |
+
foreach ($hook->callbacks as $list) {
|
600 |
+
foreach ($list as $callback) {
|
601 |
+
$logger->debug('-> {0}', [wprss_format_hook_callback($callback)]);
|
602 |
}
|
603 |
}
|
604 |
+
}
|
605 |
+
|
606 |
+
$logger->debug('Checking conditionals ...');
|
607 |
+
|
608 |
+
// Apply filters that determine if the feed item should be inserted into the DB or not.
|
609 |
+
$ogItem = $item;
|
610 |
+
$item = apply_filters( 'wprss_insert_post_item_conditionals', $item, $feed_ID, $permalink );
|
611 |
+
/* @var $item SimplePie_Item */
|
612 |
+
|
613 |
+
// Check if the imported count should still be updated, even if the item is NULL
|
614 |
+
$still_update_count = apply_filters( 'wprss_still_update_import_count', FALSE );
|
615 |
|
616 |
+
// If the item is not NULL, continue to inserting the feed item post into the DB
|
617 |
+
if ( $item !== NULL && !is_bool($item) ) {
|
618 |
+
$logger->debug('Resuming insertion into DB');
|
619 |
|
620 |
+
$post_status = 'publish';
|
|
|
|
|
|
|
621 |
|
622 |
+
// Get the date and GMT date and normalize if not valid or not given by the feed
|
623 |
+
$format = 'Y-m-d H:i:s';
|
624 |
+
$timestamp = $item->get_date( 'U' );
|
625 |
+
$has_date = $timestamp ? true : false;
|
626 |
|
627 |
+
if ($has_date) {
|
628 |
+
$logger->debug('Feed item "{0}" date: {1}', [$item->get_title(), $item->get_date($format)]);
|
|
|
629 |
|
630 |
+
if ($timestamp > time()) {
|
631 |
+
// Item has a future timestamp ...
|
632 |
+
$logger->debug('Item "{0}" has a future date', [$item->get_title()]);
|
633 |
|
634 |
+
$schedule_items_filter = apply_filters('wpra/importer/allow_scheduled_items', false);
|
635 |
+
$schedule_items_option = wprss_get_general_setting('schedule_future_items');
|
|
|
|
|
636 |
|
637 |
+
if ($schedule_items_filter || $schedule_items_option) {
|
638 |
+
// If can schedule future items, set the post status to "future" (aka scheduled)
|
639 |
+
$post_status = 'future';
|
640 |
|
641 |
+
$logger->debug('Setting future status');
|
642 |
+
} else {
|
643 |
+
// If cannot schedule future items, clamp the timestamp to the current time minus
|
644 |
+
// 1 second for each iteration done so far
|
645 |
+
$timestamp = min(time() - $i, $timestamp);
|
646 |
+
|
647 |
+
$logger->debug('Date was clamped to present time');
|
648 |
+
}
|
649 |
+
}
|
650 |
+
} else {
|
651 |
+
// Item has no date ...
|
652 |
+
$logger->debug('Item "{0}" has no date. Using current time', [$item->get_title()]);
|
653 |
+
$timestamp = time();
|
654 |
+
}
|
655 |
|
656 |
+
$date = date( $format, $timestamp );
|
657 |
+
$date_gmt = gmdate( $format, $item->get_gmdate( 'U' ) );
|
658 |
+
|
659 |
+
$logger->debug('Date for "{0}" will be {1}', [$item->get_title(), $date]);
|
660 |
+
|
661 |
+
// Do not let WordPress sanitize the excerpt
|
662 |
+
// WordPress sanitizes the excerpt because it's expected to be typed by a user and sent in a POST
|
663 |
+
// request. However, our excerpt is being inserted as a raw string with custom sanitization.
|
664 |
+
remove_all_filters( 'excerpt_save_pre' );
|
665 |
+
|
666 |
+
$title = trim(html_entity_decode($item->get_title()));
|
667 |
+
$title = empty($title) ? $item->get_id() : $title;
|
668 |
+
|
669 |
+
// Prepare the item data
|
670 |
+
$feed_item = apply_filters(
|
671 |
+
'wprss_populate_post_data',
|
672 |
+
array(
|
673 |
+
'post_title' => $title,
|
674 |
+
'post_content' => $item->get_content(),
|
675 |
+
'post_excerpt' => wprss_sanitize_excerpt($item->get_description()),
|
676 |
+
'post_status' => $post_status,
|
677 |
+
'post_type' => 'wprss_feed_item',
|
678 |
+
'post_date' => $date,
|
679 |
+
'post_date_gmt' => $date_gmt
|
680 |
+
),
|
681 |
+
$item
|
682 |
+
);
|
683 |
+
|
684 |
+
if ( defined('ICL_SITEPRESS_VERSION') )
|
685 |
+
@include_once( WP_PLUGIN_DIR . '/sitepress-multilingual-cms/inc/wpml-api.php' );
|
686 |
+
if ( defined('ICL_LANGUAGE_CODE') ) {
|
687 |
+
$_POST['icl_post_language'] = $language_code = ICL_LANGUAGE_CODE;
|
688 |
+
}
|
689 |
|
690 |
+
// Create and insert post object into the DB
|
691 |
+
$inserted_ID = wp_insert_post( $feed_item );
|
|
|
692 |
|
693 |
+
if ( !is_wp_error( $inserted_ID ) ) {
|
|
|
|
|
|
|
|
|
694 |
|
695 |
+
if ( is_object( $inserted_ID ) ) {
|
696 |
+
if ( isset( $inserted_ID['ID'] ) ) {
|
697 |
+
$inserted_ID = $inserted_ID['ID'];
|
698 |
+
}
|
699 |
+
elseif ( isset( $inserted_ID->ID ) ) {
|
700 |
+
$inserted_ID = $inserted_ID->ID;
|
701 |
}
|
|
|
|
|
|
|
|
|
702 |
}
|
703 |
|
704 |
+
$logger->debug('Item "{0}" was inserted into DB, ID: {1}', [
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
705 |
$ogItem->get_title(),
|
706 |
+
$inserted_ID,
|
707 |
]);
|
708 |
+
|
709 |
+
// Create and insert post meta into the DB
|
710 |
+
wprss_items_insert_post_meta( $inserted_ID, $item, $feed_ID, $permalink );
|
711 |
+
|
712 |
+
$logger->debug('Inserted meta data for item #{0}', [
|
713 |
+
$inserted_ID,
|
714 |
]);
|
715 |
+
|
716 |
+
// Remember newly added permalink
|
717 |
+
$existing_permalinks[$permalink] = 1;
|
718 |
+
|
719 |
+
// Increment the inserted items counter
|
720 |
+
$items_inserted++;
|
721 |
+
|
722 |
+
$logger->notice('Finished import for item {0}, ID {1}', [
|
723 |
+
$ogItem->get_title(),
|
724 |
+
$inserted_ID,
|
725 |
]);
|
726 |
}
|
727 |
+
else {
|
728 |
+
update_post_meta( $feed_ID, 'wprss_error_last_import', 'An error occurred while inserting a feed item into the database.' );
|
729 |
|
730 |
+
$logger->error('Failed to save item "{0}" into the database', [$item->get_title()]);
|
731 |
+
}
|
732 |
+
}
|
733 |
+
// If the item is TRUE, then a hook function in the filter inserted the item.
|
734 |
+
// increment the inserted counter
|
735 |
+
elseif ( ( is_bool($item) && $item === TRUE ) || ( $still_update_count === TRUE && $item !== FALSE ) ) {
|
736 |
+
$logger->debug('Item "{0}" was imported by an add-on or filter', [
|
737 |
+
$ogItem->get_title(),
|
738 |
+
]);
|
739 |
+
$items_inserted++;
|
740 |
+
} elseif (has_filter('wprss_insert_post_item_conditionals', 'wprss_kf_check_post_item_keywords')) {
|
741 |
+
$logger->info('Item "{0}" was rejected by your keyword or tag filtering.', [
|
742 |
+
$ogItem->get_title()
|
743 |
+
]);
|
744 |
+
} else {
|
745 |
+
$logger->notice('Item "{0}" was rejected by an add-on or filter.', [
|
746 |
+
$ogItem->get_title()
|
747 |
+
]);
|
748 |
+
}
|
749 |
+
}
|
750 |
+
}
|
751 |
|
752 |
+
update_post_meta( $feed_ID, 'wprss_last_update_items', $items_inserted );
|
753 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
754 |
|
755 |
+
/**
|
756 |
+
* Inserts the appropriate post meta for feed items.
|
757 |
+
*
|
758 |
+
* Called from 'wprss_items_insert_post'
|
759 |
+
*
|
760 |
+
* @since 2.3
|
761 |
+
*
|
762 |
+
* @param int $inserted_ID The inserted post ID.
|
763 |
+
* @param SimplePie_Item $item The SimplePie item object.
|
764 |
+
* @param string $permalink The item's permalink.
|
765 |
+
*/
|
766 |
+
function wprss_items_insert_post_meta( $inserted_ID, $item, $feed_ID, $permalink ) {
|
767 |
+
update_post_meta( $inserted_ID, 'wprss_item_date', $item->get_date(DATE_ISO8601) );
|
768 |
+
update_post_meta( $inserted_ID, 'wprss_item_permalink', $permalink );
|
769 |
|
770 |
+
$enclosure = $item->get_enclosure(0);
|
771 |
+
$enclosureUrl = $enclosure ? $enclosure->get_link() : null;
|
772 |
|
773 |
+
if ($enclosureUrl) {
|
774 |
+
$enclosureType = $enclosure->get_type();
|
775 |
+
|
776 |
+
update_post_meta( $inserted_ID, 'wprss_item_enclosure', $enclosureUrl );
|
777 |
+
update_post_meta( $inserted_ID, 'wprss_item_enclosure_type', $enclosureType );
|
778 |
+
|
779 |
+
if (stripos($enclosureType, 'audio')) {
|
780 |
+
update_post_meta( $inserted_ID, 'wprss_item_audio', $enclosureUrl );
|
781 |
}
|
782 |
+
}
|
783 |
|
784 |
+
/* @var $item SimplePie_Item */
|
785 |
+
$feed = $item->get_feed();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
786 |
|
787 |
+
// Get the source from the RSS item
|
788 |
+
$source = $item->get_source();
|
789 |
+
|
790 |
+
// Get the source name if available. If empty, default to the feed source CPT title
|
791 |
+
$source_name = ($source === null) ? '' : $source->get_title();
|
792 |
+
$source_name = empty($source_name) ? $feed->get_title() : $source_name;
|
793 |
+
|
794 |
+
// Get the source URL if available. If empty, default to the RSS feed's URL
|
795 |
+
$source_url = ($source === null) ? '' : $source->get_permalink();
|
796 |
+
$source_url = empty($source_url) ? $feed->get_permalink() : $source_url;
|
797 |
+
|
798 |
+
update_post_meta( $inserted_ID, 'wprss_item_source_name', $source_name);
|
799 |
+
update_post_meta( $inserted_ID, 'wprss_item_source_url', $source_url);
|
800 |
+
|
801 |
+
$author = $item->get_author();
|
802 |
+
if ($author instanceof SimplePie_Author) {
|
803 |
+
update_post_meta( $inserted_ID, 'wprss_item_author', $author->get_name() );
|
804 |
+
update_post_meta( $inserted_ID, 'wprss_item_author_email', $author->get_email() );
|
805 |
+
update_post_meta( $inserted_ID, 'wprss_item_author_link', $author->get_link() );
|
806 |
}
|
807 |
|
808 |
+
update_post_meta( $inserted_ID, 'wprss_feed_id', $feed_ID);
|
809 |
+
do_action( 'wprss_items_create_post_meta', $inserted_ID, $item, $feed_ID );
|
810 |
+
}
|
811 |
+
|
812 |
+
|
813 |
+
/**
|
814 |
+
* Returns the time limit for the importing of a single feed item.
|
815 |
+
* The value if filtered through 'wprss_item_import_time_limit'. The default value is WPRSS_ITEM_IMPORT_TIME_LIMIT.
|
816 |
+
*
|
817 |
+
* @since 4.6.6
|
818 |
+
* @return int The maximum amount of seconds allowed for a single feed item to import.
|
819 |
+
*/
|
820 |
+
function wprss_get_item_import_time_limit() {
|
821 |
+
return apply_filters( 'wprss_item_import_time_limit', WPRSS_ITEM_IMPORT_TIME_LIMIT );
|
822 |
+
}
|
823 |
+
|
824 |
+
/**
|
825 |
+
* Returns the time limit for a feed fetch operation.
|
826 |
+
* The value if filtered through 'wprss_feed_fetch_time_limit'. The default value is WPRSS_FEED_FETCH_TIME_LIMIT.
|
827 |
+
*
|
828 |
+
* @since 4.6.6
|
829 |
+
* @return int The maximum amount of seconds allowed for an RSS feed XML document to be fetched.
|
830 |
+
*/
|
831 |
+
function wprss_get_feed_fetch_time_limit() {
|
832 |
+
return apply_filters( 'wprss_feed_fetch_time_limit', WPRSS_FEED_FETCH_TIME_LIMIT );
|
833 |
+
}
|
834 |
|
835 |
+
|
836 |
+
/**
|
837 |
+
* Fetches all feed items from all feed sources.
|
838 |
+
* Iteratively calls 'wprss_fetch_insert_single_feed_items' for all feed sources.
|
839 |
+
*
|
840 |
+
* This function is used by the cron job or the debugging functions to get all feeds from all feed sources
|
841 |
+
*
|
842 |
+
* @param $all If set to TRUE, the function will pull from all feed sources, regardless of their individual
|
843 |
+
* update interval. If set to FALSE, only feed sources using the global update system will be updated.
|
844 |
+
* (Optional) Default: TRUE.
|
845 |
+
* @since 3.0
|
846 |
+
*/
|
847 |
+
function wprss_fetch_insert_all_feed_items( $all = TRUE ) {
|
848 |
+
wpra_get_logger()->info('Beginning import for all feed sources');
|
849 |
+
// Get all feed sources
|
850 |
+
$feed_sources = wprss_get_all_feed_sources();
|
851 |
+
|
852 |
+
if( $feed_sources->have_posts() ) {
|
853 |
+
// Start by getting one feed source, we will cycle through them one by one,
|
854 |
+
// fetching feed items and adding them to the database in each pass
|
855 |
+
while ( $feed_sources->have_posts() ) {
|
856 |
+
$feed_sources->the_post();
|
857 |
+
|
858 |
+
$interval = get_post_meta( get_the_ID(), 'wprss_update_interval', TRUE );
|
859 |
+
$using_global_interval = ( $interval === wprss_get_default_feed_source_update_interval() || $interval === '' );
|
860 |
+
|
861 |
+
// Check if fetching from all, or if feed source uses the global interval
|
862 |
+
if ( $all === TRUE || $using_global_interval ) {
|
863 |
+
wp_schedule_single_event( time(), 'wprss_fetch_single_feed_hook', array( get_the_ID() ) );
|
864 |
+
}
|
865 |
}
|
866 |
+
wp_reset_postdata(); // Restore the $post global to the current post in the main query
|
867 |
}
|
868 |
+
}
|
869 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
870 |
|
871 |
+
/**
|
872 |
+
* Runs the above function with parameter FALSE
|
873 |
+
*
|
874 |
+
* @since 3.9
|
875 |
+
*/
|
876 |
+
function wprss_fetch_insert_all_feed_items_from_cron() {
|
877 |
+
wprss_fetch_insert_all_feed_items( FALSE );
|
878 |
+
}
|
879 |
|
|
|
|
|
|
|
|
|
880 |
|
881 |
+
/**
|
882 |
+
* Shutdown function for detecting if the PHP script reaches the maximum execution time limit
|
883 |
+
* while importing a feed.
|
884 |
+
*
|
885 |
+
* @since 4.6.6
|
886 |
+
*/
|
887 |
+
function wprss_detect_exec_timeout() {
|
888 |
+
global $wprss_importing_feed;
|
889 |
+
$feed_ID = (isset($wprss_importing_feed) && !empty($wprss_importing_feed))
|
890 |
+
? $wprss_importing_feed
|
891 |
+
: null;
|
892 |
+
|
893 |
+
if ($feed_ID === null) {
|
894 |
+
return;
|
895 |
}
|
896 |
|
897 |
+
// Remove the "importing" flag from the feed source
|
898 |
+
wprss_flag_feed_as_idle($feed_ID);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
899 |
|
900 |
+
// If no error, stop
|
901 |
+
$error = error_get_last();
|
902 |
+
if (empty($error)) {
|
903 |
+
return;
|
904 |
}
|
905 |
|
906 |
+
$msg = sprintf(
|
907 |
+
__('The importing process failed after %d seconds with the message: "%s"', 'wprss'),
|
908 |
+
wprss_get_item_import_time_limit(),
|
909 |
+
$error['message']
|
910 |
+
);
|
911 |
+
// Save the error in the feed source's meta and the plugin log
|
912 |
+
update_post_meta($feed_ID, 'wprss_error_last_import', $msg);
|
913 |
+
wpra_get_logger($feed_ID)->error($msg);
|
914 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
915 |
|
916 |
+
/**
|
917 |
+
* Validates a feed item.
|
918 |
+
*
|
919 |
+
* @since 4.11.2
|
920 |
+
*
|
921 |
+
* @param \SimplePie_Item|mixed $item The item to validate.
|
922 |
+
*
|
923 |
+
* @return \SimplePie_Item|null The item, if it passes; otherwise, null.
|
924 |
+
*/
|
925 |
+
function wprss_item_filter_valid($item)
|
926 |
+
{
|
927 |
+
return $item instanceof \SimplePie_Item
|
928 |
+
? $item
|
929 |
+
: null;
|
930 |
+
}
|
931 |
|
932 |
+
/**
|
933 |
+
* Sorts items according to settings.
|
934 |
+
*
|
935 |
+
* Use the `wprss_item_comparators` filter to change the list of comparators
|
936 |
+
* used to determine the new order of items. See {@see wprss_items_sort_compare_items()}.
|
937 |
+
*
|
938 |
+
* @since 4.11.2
|
939 |
+
*
|
940 |
+
* @param \SimplePie_Item[] $items The items list.
|
941 |
+
* @param \WP_Post $feedSource The feed source, for which to sort, if any.
|
942 |
+
*/
|
943 |
+
function wprss_sort_items(&$items, $feedSource = null)
|
944 |
+
{
|
945 |
+
// Callbacks used to compare items
|
946 |
+
$comparators = apply_filters('wprss_item_comparators', array());
|
947 |
+
if (empty($comparators)) {
|
948 |
+
return;
|
949 |
+
}
|
950 |
|
951 |
+
try {
|
952 |
+
usort($items, function ($itemA, $itemB) use ($comparators, $feedSource) {
|
953 |
+
return wprss_items_sort_compare_items($itemA, $itemB, $comparators, $feedSource);
|
954 |
+
});
|
955 |
+
} catch (\InvalidArgumentException $e) {
|
956 |
+
wpra_get_logger($feedSource)->warning('Encountered an error while sorting the database items: {0}', [
|
957 |
+
$e->getMessage()
|
958 |
+
]);
|
959 |
+
}
|
960 |
+
}
|
961 |
|
962 |
+
/**
|
963 |
+
* Recursively compares two items using a list of comparators.
|
964 |
+
*
|
965 |
+
* If a comparator determines that two items are equal, then the items are
|
966 |
+
* evaluated using the next comparator in list, recursively until one of
|
967 |
+
* the comparators establishes a difference between items, or the list of
|
968 |
+
* comparators is exhausted.
|
969 |
+
*
|
970 |
+
* @since 4.11.2
|
971 |
+
*
|
972 |
+
* @param \SimplePie_Item|mixed $itemA The item being compared;
|
973 |
+
* @param \SimplePie_Item|mixed $itemB The item being compared to;
|
974 |
+
* @param callable[] $comparators A list of functions for item comparison.
|
975 |
+
*
|
976 |
+
* @return int A result usable as a return value for {@see usort()}.
|
977 |
+
*
|
978 |
+
* @throws \InvalidArgumentException If the comparator is not callable.
|
979 |
+
*/
|
980 |
+
function wprss_items_sort_compare_items($itemA, $itemB, $comparators, $feedSource = null)
|
981 |
+
{
|
982 |
+
if (empty($comparators)) {
|
983 |
+
return 0;
|
984 |
+
}
|
985 |
|
986 |
+
$comparator = array_shift($comparators);
|
987 |
+
if (!is_callable($comparator)) {
|
988 |
+
throw new \InvalidArgumentException('Comparator must be callable');
|
|
|
|
|
989 |
}
|
990 |
|
991 |
+
$result = call_user_func_array($comparator, array($itemA, $itemB, $feedSource));
|
992 |
+
if (!$result) {
|
993 |
+
return wprss_items_sort_compare_items($itemA, $itemB, $comparators);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
994 |
}
|
995 |
|
996 |
+
return $result;
|
997 |
+
}
|
998 |
+
|
999 |
+
/**
|
1000 |
+
* Retrieves a custom field of a feed source, or a general setting if the field doesn't exist.
|
1001 |
+
*
|
1002 |
+
* @since 4.11.2
|
1003 |
+
*
|
1004 |
+
* @param string $key The key of the field or setting.
|
1005 |
+
* @param \WP_Post|null $feedSource The feed source, if any.
|
1006 |
+
* @return type
|
1007 |
+
*/
|
1008 |
+
function wprss_get_source_meta_or_setting($key, $feedSource = null)
|
1009 |
+
{
|
1010 |
+
$value = null;
|
1011 |
+
if ($feedSource instanceof \WP_Post) {
|
1012 |
+
$value = $feedSource->{$key};
|
|
|
|
|
|
|
1013 |
}
|
1014 |
|
1015 |
+
return $value !== null && $value !== false
|
1016 |
+
? $value
|
1017 |
+
: wprss_get_general_setting($key);
|
1018 |
+
}
|
1019 |
+
|
1020 |
+
/**
|
1021 |
+
* Determines date order of two feed items.
|
1022 |
+
*
|
1023 |
+
* Which should come first is determined by `feed_items_import_order` setting.
|
1024 |
+
*
|
1025 |
+
* @since 4.11.2
|
1026 |
+
*
|
1027 |
+
* @param \SimplePie_Item|mixed $itemA The first item.
|
1028 |
+
* @param \SimplePie_Item|mixed $itemB The second item.
|
1029 |
+
* @param \WP_Post|null $feedSource The feed source for which the items are being compared, if any.
|
1030 |
+
* @return int A comparison result for {@see usort()}.
|
1031 |
+
*/
|
1032 |
+
function wprss_item_comparator_date($itemA, $itemB, $feedSource = null)
|
1033 |
+
{
|
1034 |
+
$sortOrder = wprss_get_source_meta_or_setting('feed_items_import_order', $feedSource);
|
1035 |
+
if (empty($sortOrder)) {
|
1036 |
+
return 0;
|
|
|
|
|
|
|
1037 |
}
|
1038 |
+
|
1039 |
+
if (!wprss_item_filter_valid($itemA) || !wprss_item_filter_valid($itemB)) {
|
1040 |
+
return 0;
|
1041 |
+
}
|
1042 |
+
|
1043 |
+
$aDate = intval($itemA->get_gmdate('U'));
|
1044 |
+
$bDate = intval($itemB->get_gmdate('U'));
|
1045 |
+
|
1046 |
+
switch ($sortOrder) {
|
1047 |
+
case 'latest':
|
1048 |
+
if ($aDate === $bDate) {
|
1049 |
+
return null;
|
1050 |
+
}
|
1051 |
+
return $aDate > $bDate ? -1 : 1;
|
1052 |
+
break;
|
1053 |
+
|
1054 |
+
case 'oldest':
|
1055 |
+
return $aDate < $bDate ? -1 : 1;
|
1056 |
+
break;
|
1057 |
+
|
1058 |
+
case '':
|
1059 |
+
default:
|
1060 |
+
return 0;
|
1061 |
+
break;
|
1062 |
+
}
|
1063 |
+
}
|
1064 |
+
|
1065 |
+
/**
|
1066 |
+
* Retrieves default comparators for sorting.
|
1067 |
+
*
|
1068 |
+
* @since 4.11.2
|
1069 |
+
*
|
1070 |
+
* @param \WP_Post|null $feedSource The feed source, for which to get comparators, if any.
|
1071 |
+
*
|
1072 |
+
* @return callable[] The list of comparators.
|
1073 |
+
*/
|
1074 |
+
function wprss_sort_comparators_default($feedSource = null)
|
1075 |
+
{
|
1076 |
+
$helper = wprss_wp_container()->get('wprss.admin_helper');
|
1077 |
+
$defaultArgs = array(2 => $feedSource);
|
1078 |
+
return array(
|
1079 |
+
$helper->createCommand('wprss_item_comparator_date', $defaultArgs),
|
1080 |
+
);
|
1081 |
+
}
|
1082 |
+
|
1083 |
+
/**
|
1084 |
+
* Sanitizes a post excerpt, cleverly removing all HTML markup while preserving text content and whitespace.
|
1085 |
+
*
|
1086 |
+
* @since 4.14
|
1087 |
+
*
|
1088 |
+
* @param string $excerpt The excerpt to sanitize.
|
1089 |
+
*
|
1090 |
+
* @return string
|
1091 |
+
*/
|
1092 |
+
function wprss_sanitize_excerpt($excerpt) {
|
1093 |
+
// Decode HTML entities back to their respective characters
|
1094 |
+
$excerpt = html_entity_decode($excerpt);
|
1095 |
+
// Add a space between any HTML elements
|
1096 |
+
$excerpt = str_replace('>', ' >', $excerpt);
|
1097 |
+
// Strip all HTML tags
|
1098 |
+
$excerpt = strip_tags($excerpt);
|
1099 |
+
// Remove any redundant spaces
|
1100 |
+
$excerpt = str_replace(' ', ' ', trim($excerpt));
|
1101 |
+
|
1102 |
+
return $excerpt;
|
1103 |
+
}
|
1104 |
+
|
1105 |
+
/**
|
1106 |
+
* Parses a URL, it's query and its path.
|
1107 |
+
*
|
1108 |
+
* @since 4.14
|
1109 |
+
*
|
1110 |
+
* @param string $url The URL to parse.
|
1111 |
+
*
|
1112 |
+
* @return array
|
1113 |
+
*/
|
1114 |
+
function wpra_parse_url($url)
|
1115 |
+
{
|
1116 |
+
// Parse the URL
|
1117 |
+
$parsed = parse_url($url);
|
1118 |
+
|
1119 |
+
// Move the path to "path_str"
|
1120 |
+
$parsed['path_str'] = isset($parsed['path']) ? $parsed['path'] : '';
|
1121 |
+
// Explode the path
|
1122 |
+
$parsed['path'] = explode('/', $parsed['path_str']);
|
1123 |
+
|
1124 |
+
// Move the query to "query_str"
|
1125 |
+
$parsed['query_str'] = isset($parsed['query']) ? $parsed['query'] : '';
|
1126 |
+
// Parse the query
|
1127 |
+
parse_str($parsed['query_str'], $parsed['query']);
|
1128 |
+
|
1129 |
+
return $parsed;
|
1130 |
+
}
|
includes/functions.php
CHANGED
@@ -108,6 +108,34 @@ function wpra_get_activate_plugin_url($basename)
|
|
108 |
);
|
109 |
}
|
110 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
/**
|
112 |
* Returns a representation of an HTML expression that matches all representations of that HTML.
|
113 |
*
|
108 |
);
|
109 |
}
|
110 |
|
111 |
+
/**
|
112 |
+
* Retrieves the callbacks that are attached to a hook.
|
113 |
+
*
|
114 |
+
* @since 4.18
|
115 |
+
*
|
116 |
+
* @param string $hook The hook name.
|
117 |
+
*
|
118 |
+
* @return callable[] A list of callbacks.
|
119 |
+
*/
|
120 |
+
function wpra_get_hook_callbacks($hook)
|
121 |
+
{
|
122 |
+
global $wp_filter;
|
123 |
+
|
124 |
+
$results = [];
|
125 |
+
|
126 |
+
if (isset($wp_filter[$hook])) {
|
127 |
+
$hook = $wp_filter[$hook];
|
128 |
+
|
129 |
+
foreach ($hook->callbacks as $list) {
|
130 |
+
foreach ($list as $callback) {
|
131 |
+
$results[] = $callback;
|
132 |
+
}
|
133 |
+
}
|
134 |
+
}
|
135 |
+
|
136 |
+
return $results;
|
137 |
+
}
|
138 |
+
|
139 |
/**
|
140 |
* Returns a representation of an HTML expression that matches all representations of that HTML.
|
141 |
*
|
includes/legacy-feed-display.php
CHANGED
@@ -115,6 +115,7 @@
|
|
115 |
|
116 |
// Prepare the title
|
117 |
$feed_item_title = get_the_title();
|
|
|
118 |
$feed_item_title_link = ( $link_enclosure === 'true' && $enclosure !== '' )? $enclosure : $permalink;
|
119 |
|
120 |
// Prepare the text that precedes the source
|
@@ -453,23 +454,29 @@
|
|
453 |
}
|
454 |
|
455 |
|
456 |
-
add_filter( 'the_title', 'wprss_shorten_title', 10, 2 );
|
457 |
/**
|
458 |
-
* Checks the title limit option and shortens the title when
|
459 |
*
|
460 |
* @since 1.0
|
|
|
|
|
|
|
|
|
|
|
461 |
*/
|
462 |
function wprss_shorten_title( $title, $id = null ) {
|
463 |
-
if ( $id ===
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
|
|
|
|
471 |
}
|
472 |
-
|
473 |
return $title;
|
474 |
}
|
475 |
|
115 |
|
116 |
// Prepare the title
|
117 |
$feed_item_title = get_the_title();
|
118 |
+
$feed_item_title = wprss_shorten_title($feed_item_title, $ID);
|
119 |
$feed_item_title_link = ( $link_enclosure === 'true' && $enclosure !== '' )? $enclosure : $permalink;
|
120 |
|
121 |
// Prepare the text that precedes the source
|
454 |
}
|
455 |
|
456 |
|
|
|
457 |
/**
|
458 |
+
* Checks the title limit option and shortens the title when necessary.
|
459 |
*
|
460 |
* @since 1.0
|
461 |
+
*
|
462 |
+
* @param string $title The title of tge feed item.
|
463 |
+
* @param int|string|null $id The ID of the feed item.
|
464 |
+
*
|
465 |
+
* @return string
|
466 |
*/
|
467 |
function wprss_shorten_title( $title, $id = null ) {
|
468 |
+
if (isset($id) && get_post_type($id) === 'wprss_feed_item') {
|
469 |
+
$settings = get_option('wprss_settings_general');
|
470 |
+
$limit = isset($settings['title_limit'])
|
471 |
+
? intval($settings['title_limit'])
|
472 |
+
: 0;
|
473 |
+
|
474 |
+
if ($limit > 0 && strlen($title) > $limit) {
|
475 |
+
$suffix = apply_filters('wprss_shortened_title_ending', '...');
|
476 |
+
$title = substr($title, 0, $limit) . $suffix;
|
477 |
+
}
|
478 |
}
|
479 |
+
|
480 |
return $title;
|
481 |
}
|
482 |
|
includes/misc-functions.php
CHANGED
@@ -435,3 +435,23 @@ function wprss_format_hook_callback(array $callback)
|
|
435 |
|
436 |
return $callback['name'];
|
437 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
435 |
|
436 |
return $callback['name'];
|
437 |
}
|
438 |
+
|
439 |
+
/**
|
440 |
+
* Retrieves the file extension from a URI.
|
441 |
+
*
|
442 |
+
* @since 4.18
|
443 |
+
*
|
444 |
+
* @param string $uri The URI
|
445 |
+
*
|
446 |
+
* @return string|null The file extension or null if it could not be determined.
|
447 |
+
*/
|
448 |
+
function wpra_get_uri_extension($uri)
|
449 |
+
{
|
450 |
+
$path = parse_url($uri, PHP_URL_PATH);
|
451 |
+
|
452 |
+
if (!$path || empty($path)) {
|
453 |
+
return null;
|
454 |
+
}
|
455 |
+
|
456 |
+
return strtolower(pathinfo($path, PATHINFO_EXTENSION));
|
457 |
+
}
|
includes/multimedia.php
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Checks if a URI points to an audio file.
|
5 |
+
*
|
6 |
+
* @since 4.18
|
7 |
+
*
|
8 |
+
* @param string $uri The URI to check.
|
9 |
+
*
|
10 |
+
* @return bool True if the URI points to an audio file, false if not.
|
11 |
+
*/
|
12 |
+
function wpra_is_audio_file($uri)
|
13 |
+
{
|
14 |
+
switch (wpra_get_uri_extension($uri)) {
|
15 |
+
case 'aac':
|
16 |
+
case 'adts':
|
17 |
+
case 'aif':
|
18 |
+
case 'aifc':
|
19 |
+
case 'aiff':
|
20 |
+
case 'cdda':
|
21 |
+
case 'bwf':
|
22 |
+
case 'kar':
|
23 |
+
case 'mid':
|
24 |
+
case 'midi':
|
25 |
+
case 'smf':
|
26 |
+
case 'm4a':
|
27 |
+
case 'mp3':
|
28 |
+
case 'swa':
|
29 |
+
case 'wav':
|
30 |
+
case 'wax':
|
31 |
+
case 'wma':
|
32 |
+
return true;
|
33 |
+
default:
|
34 |
+
return false;
|
35 |
+
}
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Checks if a URI points to a video file.
|
40 |
+
*
|
41 |
+
* @since 4.18
|
42 |
+
*
|
43 |
+
* @param string $uri The URI to check.
|
44 |
+
*
|
45 |
+
* @return bool True if the URI points to a video file, false if not.
|
46 |
+
*/
|
47 |
+
function wpra_is_video_file($uri)
|
48 |
+
{
|
49 |
+
switch (wpra_get_uri_extension($uri)) {
|
50 |
+
case 'mp4':
|
51 |
+
case 'mkv':
|
52 |
+
case 'mov':
|
53 |
+
case 'avi':
|
54 |
+
case 'webm':
|
55 |
+
case 'ogg':
|
56 |
+
return true;
|
57 |
+
default:
|
58 |
+
return false;
|
59 |
+
}
|
60 |
+
}
|
includes/roles-capabilities.php
CHANGED
@@ -14,21 +14,20 @@
|
|
14 |
*/
|
15 |
function wprss_remove_caps()
|
16 |
{
|
17 |
-
|
18 |
-
if (!isset($wp_roles)) {
|
19 |
-
$wp_roles = new WP_Roles();
|
20 |
-
}
|
21 |
-
}
|
22 |
|
23 |
-
if (
|
|
|
|
|
24 |
|
|
|
25 |
/** Site Administrator Capabilities */
|
26 |
$wp_roles->remove_cap('administrator', 'manage_feed_settings');
|
27 |
/** Editor Capabilities */
|
28 |
$wp_roles->remove_cap('editor', 'manage_feed_settings');
|
29 |
|
30 |
/** Remove the Main Post Type Capabilities */
|
31 |
-
$capabilities =
|
32 |
|
33 |
foreach ($capabilities as $cap_group) {
|
34 |
foreach ($cap_group as $cap) {
|
@@ -38,3 +37,42 @@ function wprss_remove_caps()
|
|
38 |
}
|
39 |
}
|
40 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
*/
|
15 |
function wprss_remove_caps()
|
16 |
{
|
17 |
+
global $wp_roles;
|
|
|
|
|
|
|
|
|
18 |
|
19 |
+
if (!isset($wp_roles)) {
|
20 |
+
$wp_roles = new WP_Roles();
|
21 |
+
}
|
22 |
|
23 |
+
if ($wp_roles instanceof WP_Roles) {
|
24 |
/** Site Administrator Capabilities */
|
25 |
$wp_roles->remove_cap('administrator', 'manage_feed_settings');
|
26 |
/** Editor Capabilities */
|
27 |
$wp_roles->remove_cap('editor', 'manage_feed_settings');
|
28 |
|
29 |
/** Remove the Main Post Type Capabilities */
|
30 |
+
$capabilities = wprss_get_core_caps();
|
31 |
|
32 |
foreach ($capabilities as $cap_group) {
|
33 |
foreach ($cap_group as $cap) {
|
37 |
}
|
38 |
}
|
39 |
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Gets the core post type capabilities.
|
43 |
+
*
|
44 |
+
* @since 4.18
|
45 |
+
*/
|
46 |
+
function wprss_get_core_caps()
|
47 |
+
{
|
48 |
+
$capabilities = [];
|
49 |
+
|
50 |
+
$capability_types = ['feed', 'feed_source'];
|
51 |
+
|
52 |
+
foreach ($capability_types as $capability_type) {
|
53 |
+
$capabilities[$capability_type] = [
|
54 |
+
// Post type
|
55 |
+
"edit_{$capability_type}",
|
56 |
+
"read_{$capability_type}",
|
57 |
+
"delete_{$capability_type}",
|
58 |
+
"edit_{$capability_type}s",
|
59 |
+
"edit_others_{$capability_type}s",
|
60 |
+
"publish_{$capability_type}s",
|
61 |
+
"read_private_{$capability_type}s",
|
62 |
+
"delete_{$capability_type}s",
|
63 |
+
"delete_private_{$capability_type}s",
|
64 |
+
"delete_published_{$capability_type}s",
|
65 |
+
"delete_others_{$capability_type}s",
|
66 |
+
"edit_private_{$capability_type}s",
|
67 |
+
"edit_published_{$capability_type}s",
|
68 |
+
|
69 |
+
// Terms
|
70 |
+
"manage_{$capability_type}_terms",
|
71 |
+
"edit_{$capability_type}_terms",
|
72 |
+
"delete_{$capability_type}_terms",
|
73 |
+
"assign_{$capability_type}_terms",
|
74 |
+
];
|
75 |
+
}
|
76 |
+
|
77 |
+
return $capabilities;
|
78 |
+
}
|
includes/system-info.php
CHANGED
@@ -157,13 +157,8 @@ endif;
|
|
157 |
CURRENT THEME:
|
158 |
|
159 |
<?php
|
160 |
-
|
161 |
-
|
162 |
-
echo $theme_data['Name'] . ': ' . $theme_data['Version'];
|
163 |
-
} else {
|
164 |
-
$theme_data = wp_get_theme();
|
165 |
-
echo $theme_data->Name . ': ' . $theme_data->Version;
|
166 |
-
}
|
167 |
?>
|
168 |
|
169 |
|
@@ -232,7 +227,7 @@ foreach ($extensions as $extension) {
|
|
232 |
* @param null|string $host The address of the database host, to which to connect.
|
233 |
* May contain the port number in standard URI format.
|
234 |
* Default: value of the DB_HOST constant, if defined, otherwise null.
|
235 |
-
* @param null|string $username The username to be used for connecting to the
|
236 |
* Default: value of the DB_USER constant, if defined, otherwise null.
|
237 |
* @param null|string $password The password to be used for connecting to the database.
|
238 |
* Default: value of the DB_PASSWORD constant, if defined, otherwise null.
|
@@ -262,24 +257,5 @@ function wprss_sysinfo_get_db_server( $host = null, $username = null, $password
|
|
262 |
return $result;
|
263 |
}
|
264 |
|
265 |
-
if ( function_exists( 'mysql_connect' ) ) {
|
266 |
-
if (version_compare(PHP_VERSION, '7.0', '>=')) {
|
267 |
-
$result['warning'] = __(
|
268 |
-
'The mysql extension is deprecated since PHP 5.5 and removed since PHP 7.0; Use mysqli instead',
|
269 |
-
'wprss'
|
270 |
-
);
|
271 |
-
$result['extension'] = 'mysql';
|
272 |
-
$result['server_info'] = '';
|
273 |
-
return $result;
|
274 |
-
}
|
275 |
-
|
276 |
-
if ( $port ) $host = implode ( ':', array( $host, $port ) );
|
277 |
-
|
278 |
-
$mysql = mysql_connect( $host, $username, $password );
|
279 |
-
$result['extension'] = 'mysql';
|
280 |
-
$result['server_info'] = mysql_get_server_info( $mysql );
|
281 |
-
return $result;
|
282 |
-
}
|
283 |
-
|
284 |
return null;
|
285 |
}
|
157 |
CURRENT THEME:
|
158 |
|
159 |
<?php
|
160 |
+
$theme_data = wp_get_theme();
|
161 |
+
echo $theme_data->Name . ': ' . $theme_data->Version;
|
|
|
|
|
|
|
|
|
|
|
162 |
?>
|
163 |
|
164 |
|
227 |
* @param null|string $host The address of the database host, to which to connect.
|
228 |
* May contain the port number in standard URI format.
|
229 |
* Default: value of the DB_HOST constant, if defined, otherwise null.
|
230 |
+
* @param null|string $username The username to be used for connecting to the database.
|
231 |
* Default: value of the DB_USER constant, if defined, otherwise null.
|
232 |
* @param null|string $password The password to be used for connecting to the database.
|
233 |
* Default: value of the DB_PASSWORD constant, if defined, otherwise null.
|
257 |
return $result;
|
258 |
}
|
259 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
260 |
return null;
|
261 |
}
|
js/build/templates.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.WPRA=e():t.WPRA=e()}("undefined"!=typeof self?self:this,function(){return webpackJsonpWPRA([1],{40:function(t,e,i){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t){return new I(t)}function a(t){return t&&"object"===(void 0===t?"undefined":Z(t))&&"[object RegExp]"!==Object.prototype.toString.call(t)&&"[object Date]"!==Object.prototype.toString.call(t)}function r(t){return Array.isArray(t)?[]:{}}function s(t,e){return e&&!0===e.clone&&a(t)?u(r(t),t,e):t}function l(t,e,i){var n=t.slice();return e.forEach(function(e,o){void 0===n[o]?n[o]=s(e,i):a(e)?n[o]=u(t[o],e,i):-1===t.indexOf(e)&&n.push(s(e,i))}),n}function p(t,e,i){var n={};return a(t)&&Object.keys(t).forEach(function(e){n[e]=s(t[e],i)}),Object.keys(e).forEach(function(o){a(e[o])&&t[o]?n[o]=u(t[o],e[o],i):n[o]=s(e[o],i)}),n}function u(t,e,i){var n=Array.isArray(e),o=i||{arrayMerge:l},a=o.arrayMerge||l;return n?Array.isArray(t)?a(t,e,i):s(e,i):p(t,e,i)}function c(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function d(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var h=i(42),f=i(43),m=i.n(f),y=i(9),v=i.n(y),b=i(45),g=i.n(b),_=i(46),w=i.n(_),k=i(47),x=i(2),S=i.n(x),A=i(48),T=i.n(A),C={props:{path:{},gate:{}},inject:["router"],methods:{getPath:function(){return this.router.buildRoute(this.path)},navigate:function(t){var e=!this.gate||this.gate();t.preventDefault(),e&&this.router.navigate(this.path)}},render:function(){var t=this,e=arguments[0],i=this.getPath();return e("a",S()([{attrs:{href:i}},{on:{click:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];t.navigate.apply(t,[e].concat(n))}}}]),[this.$slots.default])}},O=null,P={props:{mediaType:{type:String,default:"image"},mediaTitle:{type:String,default:"Select Media"},mediaValueProperty:{type:String,default:"id"}},methods:{mediaNode:function(){var t=this,e=this.$createElement;return this.assertMediaLoaded(),e("div",[e("input",{attrs:{type:"text"},domProps:{value:this.value}}),e("button",S()([{class:"button"},{on:{click:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];t.openFrame.apply(t,[e].concat(n))}}}]),["Choose image"])])},openFrame:function(){O||(O=this.createFrame()),O.open()},createFrame:function(){var t=this;return O=wp.media({title:this.mediaTitle,multiple:!1,library:{type:this.mediaType}}),O.on("close",function(){var e=O.state().get("selection"),i=null;e.each(function(t){i=t}),i&&i.id&&t.$emit("input",{id:i.id,url:i.attributes.url}[t.mediaValueProperty])}),O.on("open",function(){var e=O.state().get("selection");if("id"===t.mediaValueProperty&&t.value){var i=wp.media.attachment(t.value);i.fetch(),e.add(i?[i]:[])}}),O},assertMediaLoaded:function(){if(!window.wp.media)throw Error("[MediaInput] wp.media dependency is not loaded")}}},j={mixins:[P],props:{id:{type:String,default:function(){return Math.random().toString(36).substr(0,12)}},label:{},description:{},after:{},type:{},value:{},placeholder:{},title:{},inputDisabled:{},options:{default:function(){return{}}}},methods:{inputNode:function(){var t=this,e=this.$createElement;return"media"===this.type?this.mediaNode():"checkbox"===this.type?e("input",S()([{attrs:{type:"checkbox",id:this.id,placeholder:this.placeholder,disabled:this.$attrs.disabled||this.inputDisabled},domProps:{checked:!!this.value}},{attrs:this.$attrs},{on:{change:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(){return t.$emit("input",!t.value)}).apply(void 0,[e].concat(n))}}}])):"select"!==this.type?e("input",S()([{attrs:{type:this.type,id:this.id,placeholder:this.placeholder,disabled:this.$attrs.disabled||this.inputDisabled},domProps:{value:this.value}},{attrs:this.$attrs},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.$emit("input",e.target.value)}).apply(void 0,[e].concat(n))}}}])):this.selectNode()},selectNode:function(){var t=this,e=this.$createElement,i=Object.keys(this.options).map(function(i){return e("option",{domProps:{value:i,selected:t.value===i}},[t.options[i]])});return e("select",S()([{attrs:this.$attrs},{attrs:{id:this.id,disabled:this.$attrs.disabled||this.inputDisabled}},{on:{change:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.$emit("input",e.target.value)}).apply(void 0,[e].concat(n))}}}]),[i])}},render:function(){var t=arguments[0],e=[];return this.title&&e.push({name:"tippy"}),t("div",{class:{"form-input":!0,"form-input--disabled":this.$attrs.disabled||!1}},[this.label?t("label",{class:"form-input__label",attrs:{for:this.id}},[t("div",[this.label,this.title?t("div",S()([{class:"form-input__tip"},{directives:e},{attrs:{title:this.title}}]),[t("span",{class:"dashicons dashicons-editor-help"})]):null]),this.description?t("div",S()([{class:"form-input__label-description"},{domProps:{innerHTML:this.description}}])):""]):null,t("div",{class:"form-input__field"},[this.inputNode(),this.after])])}},L=function(){var t=this,e=t.$createElement;return(t._self._c||e)("div",{staticClass:"wpra-bottom-panel"},[t._t("default")],2)},W=[],M={},$=M,N=i(1),R=Object(N.a)($,L,W,!1,null,null,null),E=R.exports,D=function(t){return JSON.parse(JSON.stringify(t))},F="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},I=function(){function t(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"id";return n(this,t),this.data=e,this.primaryField=i,this}return t.prototype.find=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if("object"!==(void 0===t?"undefined":F(t))&&null!==t){var i;i={},i[this.primaryField]=t,t=i}for(var n in this.data)if(this._isMatching(this.data[n],t))return this.data[n];return e},t.prototype.pluck=function(t){return this.data.map(function(e){return e[t]})},t.prototype.remove=function(t){for(var e in this.data)this._isMatching(this.data[e],t)&&this.data.splice(e,1);return this},t.prototype.appendDiff=function(t){for(var e=t,i=Array.isArray(e),n=0,e=i?e:e[Symbol.iterator]();;){var o;if(i){if(n>=e.length)break;o=e[n++]}else{if(n=e.next(),n.done)break;o=n.value}var a=o;this.contains(a)||this.data.push(a)}},t.prototype.prependDiff=function(t){for(var e=t.slice().reverse(),i=Array.isArray(e),n=0,e=i?e:e[Symbol.iterator]();;){var o;if(i){if(n>=e.length)break;o=e[n++]}else{if(n=e.next(),n.done)break;o=n.value}var a=o;this.contains(a)||this.data.unshift(a)}},t.prototype.contains=function(t){for(var e=this.data,i=Array.isArray(e),n=0,e=i?e:e[Symbol.iterator]();;){var o;if(i){if(n>=e.length)break;o=e[n++]}else{if(n=e.next(),n.done)break;o=n.value}if(o.id==t.id)return!0}return!1},t.prototype.filterValues=function(t){var e=this;return Object.keys(this.data).filter(function(i){return t(e.data[i],i)}).reduce(function(t,i){return t[i]=e.data[i],t},{})},t.prototype.filter=function(t){var e=this;return this.data.filter(function(i){return e._isMatching(i,t)})},t.prototype.whereIn=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"id",i=[],n={};n[e]=null;for(var o=t,a=Array.isArray(o),r=0,o=a?o:o[Symbol.iterator]();;){var s;if(a){if(r>=o.length)break;s=o[r++]}else{if(r=o.next(),r.done)break;s=r.value}var l=s;n[e]=l;var p=this.find(n);p&&i.push(p)}return i},t.prototype.key=function(e){return new t(this.data.slice().reduce(function(t,i){return t[i[e]]=i,t},{}))},t.prototype.mapValues=function(t){var e=this;return Object.keys(this.data).map(function(i){e.data[i]=t(e.data[i],i)}),this},t.prototype.values=function(){return this.data},t.prototype._isMatching=function(t,e){if(!(t instanceof Object||e instanceof Object))return t==e;for(var i=!0,n=Object.keys(e),o=Array.isArray(n),a=0,n=o?n:n[Symbol.iterator]();;){var r;if(o){if(a>=n.length)break;r=n[a++]}else{if(a=n.next(),a.done)break;r=a.value}var s=r,l=t.hasOwnProperty(s)&&t[s]==e[s];i=i&&l}return i},t}(),U=o,B={data:function(){return{loading:!1,columns:{name:{label:"Template Name",class:"column-primary"},style:{label:"Template Type"},previewTemplate:{label:"Preview"}},filters:WpraTemplates.options.type,checked:[],filter:{paged:parseInt(this.router.params.paged||1),type:this.router.params.type||"",s:this.router.params.s||""},baseUrl:WpraTemplates.base_url,total:0}},inject:["hooks","http","router"],computed:{totalPages:function(){return Math.ceil(this.total/20)},list:{get:function(){return this.$store.state.templates.items},set:function(t){this.$store.commit("templates/set",t)}}},methods:{navigated:function(){var t=this;Object.keys(this.filter).forEach(function(e){t.filter[e]=t.router.params[e]||""}),this.filter.paged=parseInt(this.filter.paged||1),this.fetchList()},fetchList:function(){var t=this;this.loading=!0;var e=this.getParams(),i=parseInt(e.paged);return delete e.paged,i&&1!==i&&(e.page=i),this.http.get(this.baseUrl,{params:e}).then(function(e){t.list=e.data.items,t.total=e.data.count}).finally(function(){t.loading=!1})},deleteTemplate:function(t){var e=this;if(confirm("Are you sure you want to delete this template? If this template is being used in a shortcode or Gutenberg block anywhere on your site, the default template will be used instead."))return this.loading=!0,this.http.delete(this.baseUrl+"/"+t).then(function(){return e.fetchList()}).then(function(){e.loading=!1})},bulkDelete:function(){var t=this;if(confirm("Are you sure you want to delete these templates? If a template is being used in a shortcode or Gutenberg block anywhere on your site, the default template will be used instead."))return this.loading=!0,this.http.delete(this.baseUrl,{params:{ids:this.checked}}).then(function(){return t.checked=[],t.$refs.table.checkedItems=[],t.fetchList()}).then(function(){t.loading=!1})},duplicateTemplate:function(t){var e=D(t);delete e.id,"__built_in"===e.type&&delete e.type,e.name=e.name+" (Copy)",this.$store.commit("templates/updatePreset",e),this.router.navigate({name:"templates",params:{action:"new"}})},getPreviewLink:function(t){return WpraGlobal.admin_base_url+"?wpra_preview_template="+t.id},createTemplate:function(){this.$store.commit("templates/updatePreset",{}),this.router.navigate({name:"templates",params:{action:"new"}})},setChecked:function(t){var e=this;this.checked=t.filter(function(t){return"__built_in"!==U(e.list).find(t,{}).type})},getParams:function(){var t=this;return Object.keys(this.filter).filter(function(e){return!!t.filter[e]&&"all"!==t.filter[e]}).reduce(function(e,i){return e[i]=t.filter[i],e},{})},setFilter:function(t,e){this.filter[t]=e},submitFilter:function(){this.router.mergeParams(this.getParams())},getRowClass:function(t){return"__built_in"===t.type?"built-in":""}},render:function(){var t=this,e=arguments[0],i=function(t){return{name:"templates",params:{action:"edit",id:t}}},n=this.hooks.apply("wpra-templates-list-cells",this,{name:function(n){var o=n.row;return[e("div",[e("strong",[e(C,{attrs:{path:i(o.id)}},[o.name])]),e("small",{style:{paddingLeft:"4px",opacity:"0.6"}},[o.slug]),"__built_in"===o.type?e("span",{style:{opacity:"0.6",display:"block"}},['This is the default feed template. To create your own, either duplicate it or click "Add New" above.']):null]),e("div",{class:"row-actions"},[e("span",{attrs:{className:"edit"}},[e(C,{attrs:{path:i(o.id)}},["Edit"])," |"]),e("span",{class:"inline",style:{paddingLeft:"4px"}},[e("a",S()([{attrs:{href:"#"}},{on:{click:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),a=1;a<i;a++)n[a-1]=arguments[a];(function(e){e.preventDefault(),t.duplicateTemplate(o)}).apply(void 0,[e].concat(n))}}}]),["Duplicate"])," ","__built_in"!==o.type?"|":""]),"__built_in"!==o.type?e("span",S()([{class:"trash",style:{paddingLeft:"4px"}},{on:{click:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),a=1;a<i;a++)n[a-1]=arguments[a];(function(e){e.preventDefault(),t.deleteTemplate(o.id)}).apply(void 0,[e].concat(n))}}}]),[e("a",{attrs:{href:"#","aria-label":"Delete Item"},class:"submitdelete"},["Delete"])]):null])]},style:function(i){var n=i.row;return t.filters[n.type]?[e("div",[t.filters[n.type]])]:[e("div",[t.filters.list," ",e("span",{style:{opacity:.7,fontSize:"90%"}},["(Missing type: ",e("code",[n.type]),")"])])]},previewTemplate:function(i){var n=i.row;return[e("div",[e("a",{attrs:{href:t.getPreviewLink(n),target:"wpra-preview-template"},class:"wpra-preview-link"},["Open preview ",e("span",{class:"dashicons dashicons-external"})])])]},filters:function(){var i=Object.keys(WpraTemplates.options.type).filter(function(t){return"_"!==t[0]}).reduce(function(t,e){return t[e]=WpraTemplates.options.type[e],t},{all:"Select Template Type"});return[e(j,S()([{attrs:{type:"select",options:i,value:t.filter.type},style:{margin:0}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){t.filter.type=e,t.submitFilter()}).apply(void 0,[e].concat(n))}}}]))]}}),o=e("div",[e("h1",{class:"wp-heading-inline"},["Templates"]),e("a",S()([{class:"page-title-action",attrs:{href:"#"}},{on:{click:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){e.preventDefault(),t.createTemplate()}).apply(void 0,[e].concat(n))}}}]),["Add New"]),e("p",{class:"search-box",style:{padding:"10px 0"}},[e("label",{class:"screen-reader-text",attrs:{for:"post-search-input"}},["Search Templates:"]),e("input",S()([{attrs:{type:"search",id:"post-search-input",name:"s"},domProps:{value:this.filter.s}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.filter.s=e.target.value}).apply(void 0,[e].concat(n))},keyup:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];if(!("button"in e)&&t._k(e.keyCode,"enter",13))return null;t.submitFilter.apply(t,[e].concat(n))}}}])),e("input",S()([{attrs:{type:"submit",id:"search-submit",value:"Search Templates"},class:"button"},{on:{click:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];t.submitFilter.apply(t,[e].concat(n))}}}]))]),e(T.a,S()([{attrs:{columns:this.columns,rows:this.list,loading:this.loading,totalItems:this.total,perPage:20,totalPages:this.totalPages,currentPage:this.filter.paged,notFound:"No templates found.",rowClass:this.getRowClass},ref:"table",class:{"wpra-no-cb":0===this.list.length||1===this.list.length&&"__built_in"===this.list[0].type},scopedSlots:n},{on:{checked:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];t.setChecked.apply(t,[e].concat(n))},pagination:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){t.filter.paged=e,t.submitFilter()}).apply(void 0,[e].concat(n))}}}])),this.checked.length?e(E,[e("div",{class:"flex-row"},[e("div",{class:"flex-col"},[e("div",{class:"wpra-bottom-panel__title"},["Bulk Actions"]),e("a",S()([{attrs:{href:"#"}},{on:{click:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){e.preventDefault(),t.bulkDelete()}).apply(void 0,[e].concat(n))}}}]),["Delete"])])])]):null]);return this.hooks.apply("wpra-templates-list",this,o)}},V={inject:["hooks"],data:function(){return{expanded:!0}},props:{title:{},id:{},submit:{type:Boolean,default:!1},context:{}},methods:{toggle:function(){this.expanded=!this.expanded}},render:function(t){var e=this;return this.hooks.apply("postbox-"+this.id,this.context||this,t("div",{class:"postbox wpra-postbox",attrs:{id:this.submit?"submitdiv":""}},[t("div",{class:"postbox-header"},[t("h2",S()([{class:"hndle ui-sortable-handle"},{on:{click:function(t){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];e.toggle.apply(e,[t].concat(n))}}}]),[t("span",[this.title])])]),t("div",{class:"inside"},[this.hooks.apply("postbox-content-"+this.id,this.context||this,[this.$slots.default],{h:t})])]),{h:t})}},G=V,J=Object(N.a)(G,void 0,void 0,!1,null,null,null),q=J.exports,z={render:function(){return(0,arguments[0])("div",{attrs:{id:"postbox-container-2"},class:"postbox-container"},[this.$slots.default])}},H={render:function(){return(0,arguments[0])("div",{attrs:{id:"postbox-container-1"},class:"wpra-postbox-container postbox-container"},[this.$slots.default])}},K={render:function(){return(0,arguments[0])("div",{attrs:{id:"post-body"}},[this.$slots.default])}},X={props:{loading:{type:Boolean,default:!1}},render:function(){return(0,arguments[0])("button",{attrs:{disabled:this.loading},class:{button:!0,"loading-button":this.loading}},[this.$slots.default])}},Y={data:function(){return{shouldBeVisible:!0}},props:{id:{type:String,required:!0},title:{type:String},body:{type:String},learnMore:{default:!1},okayText:{type:String,default:"Got it"},learnMoreText:{type:String,default:"Learn more"},visible:{type:Boolean,default:!0}},computed:{isVisible:function(){return this.visible&&this.shouldBeVisible&&JSON.parse(localStorage.getItem(this.getBlockKey())||"true")}},methods:{onOkayClick:function(){this.shouldBeVisible=!1,localStorage.setItem(this.getBlockKey(),JSON.stringify(!1))},onLearnMoreClick:function(){window.open(this.learnMore,"_blank").focus()},getBlockKey:function(){return"wpra-"+this.id+"-visible"}},render:function(){var t=arguments[0];if(!this.isVisible)return null;var e=this.learnMore?t(X,{class:"button-clear",nativeOn:{click:this.onLearnMoreClick}},[this.learnMoreText," ",t("span",{class:"dashicons dashicons-external"})]):null;return t("div",{class:"wpra-notice-block"},[t("div",{class:"wpra-notice-block__title"},[this.title]),t("div",S()([{class:"wpra-notice-block__body"},{domProps:{innerHTML:this.body}}])),t("div",{class:"wpra-notice-block__buttons"},[t(X,{class:"brand button-primary",nativeOn:{click:this.onOkayClick}},[this.okayText]),e])])}},Z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};u.all=function(t,e){if(!Array.isArray(t)||t.length<2)throw new Error("first argument should be an array with at least two elements");return t.reduce(function(t,i){return u(t,i,e)})};var Q=u,tt=i(49),et=i.n(tt),it={data:function(){return{changes:{model:{}}}},methods:{isChanged:function(){return!et()(this.model,this.changes.model)},rememberModel:function(){this.$set(this.changes,"model",D(this.model))},cancelChanges:function(){confirm("Are you sure you want to cancel your changes for this template? This action cannot be reverted and all changes made since your last save will be lost.")&&this.$set(this,"model",D(this.changes.model))}}},nt={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(t){var e,i,n,o,a,r,s,l="",p=0;for(t=nt._utf8_encode(t);p<t.length;)e=t.charCodeAt(p++),i=t.charCodeAt(p++),n=t.charCodeAt(p++),o=e>>2,a=(3&e)<<4|i>>4,r=(15&i)<<2|n>>6,s=63&n,isNaN(i)?r=s=64:isNaN(n)&&(s=64),l=l+this._keyStr.charAt(o)+this._keyStr.charAt(a)+this._keyStr.charAt(r)+this._keyStr.charAt(s);return l},decode:function(t){var e,i,n,o,a,r,s,l="",p=0;for(t=t.replace(/[^A-Za-z0-9\+\/\=]/g,"");p<t.length;)o=this._keyStr.indexOf(t.charAt(p++)),a=this._keyStr.indexOf(t.charAt(p++)),r=this._keyStr.indexOf(t.charAt(p++)),s=this._keyStr.indexOf(t.charAt(p++)),e=o<<2|a>>4,i=(15&a)<<4|r>>2,n=(3&r)<<6|s,l+=String.fromCharCode(e),64!=r&&(l+=String.fromCharCode(i)),64!=s&&(l+=String.fromCharCode(n));return l=nt._utf8_decode(l)},_utf8_encode:function(t){t=t.replace(/\r\n/g,"\n");for(var e="",i=0;i<t.length;i++){var n=t.charCodeAt(i);n<128?e+=String.fromCharCode(n):n>127&&n<2048?(e+=String.fromCharCode(n>>6|192),e+=String.fromCharCode(63&n|128)):(e+=String.fromCharCode(n>>12|224),e+=String.fromCharCode(n>>6&63|128),e+=String.fromCharCode(63&n|128))}return e},_utf8_decode:function(t){for(var e="",i=0,n=0,o=0;i<t.length;)n=t.charCodeAt(i),n<128?(e+=String.fromCharCode(n),i++):n>191&&n<224?(o=t.charCodeAt(i+1),e+=String.fromCharCode((31&n)<<6|63&o),i+=2):(o=t.charCodeAt(i+1),c3=t.charCodeAt(i+2),e+=String.fromCharCode((15&n)<<12|(63&o)<<6|63&c3),i+=3);return e}},ot=nt,at=i(6),rt={mixins:[it],data:function(){return{typeOptions:Object.keys(WpraTemplates.options.type).filter(function(t){return"_"!==t[0]}).reduce(function(t,e){return t[e]=WpraTemplates.options.type[e],t},{}),model:D(WpraTemplates.model_schema),validation:D(WpraTemplates.model_schema),tooltips:D(WpraTemplates.model_tooltips),baseUrl:WpraTemplates.base_url,isSaving:!1,isLoading:!1}},inject:["hooks","http","router","notification"],mounted:function(){this.resolveEditingItem()},computed:{previewUrl:function(){var t=ot.encode(JSON.stringify(this.model.options));return WpraGlobal.admin_base_url+"?wpra_preview_template="+this.router.params.id+"&wpra_template_options="+t}},methods:{resolveEditingItem:function(){var t=this,e=Q(D(WpraTemplates.model_schema),this.$store.state.templates.preset);this.isLoading=!0,function(){var e=t.router.params.id;if(!e)return Promise.resolve(null);var i=t.$store.getters["templates/item"](e);return i?Promise.resolve(i):t.http.get(t.baseUrl+"/"+e).then(function(t){return t.data})}().then(function(i){if(t.isLoading=!1,!i)return t.$set(t,"model",e),void t.rememberModel();i=Object.assign({},i),t.model=Q(t.model,i),t.rememberModel()})},save:function(){var t=this,e=!this.model.id;this.isSaving=!0,this.runRequest().then(function(i){t.model=Q(t.model,i.data),t.rememberModel(),t.notification.show("Template saved!",{type:"success",icon:function(t){return t.classList.add("dashicons","dashicons-yes"),t}}),e&&t.router.navigate({name:"templates",params:{action:"edit",id:i.data.id}})},function(e){t.notification.show("Something went wrong. Template is not saved!",{type:"error",icon:function(t){return t.classList.add("dashicons","dashicons-warning"),t}})}).finally(function(){t.isSaving=!1})},runRequest:function(){var t=this.model.id?"put":"post",e=this.model.id?this.baseUrl+"/"+this.model.id:this.baseUrl;return this.http[t](e,this.prepareModel())},prepareModel:function(){var t=this,e=Object.keys(WpraTemplates.model_schema);return Object.keys(this.model).filter(function(i){return!(!e.includes(i)||"__built_in"===t.model.type&&["name","type"].includes(i)||["slug","id"].includes(i))}).reduce(function(e,i){return e[i]=t.model[i],e},{})},getShortcode:function(){return'[wp-rss-aggregator template="'+this.model.slug+'"]'},preventLoosingNotSavedData:function(){return!this.isChanged()||confirm("You have unsaved changes. All changes will be lost if you go back to the Template list before updating. Are you sure you want to continue?")},copyShortcode:function(t){Object(at.a)(this.getShortcode());var e=t.target.innerText;t.target.style.width=t.target.getBoundingClientRect().width+"px",t.target.disabled=!0,t.target.innerText="Copied!",setTimeout(function(){t.target.style.width=null,t.target.innerText=e,t.target.disabled=!1},5e3)}},render:function(){var t=this,e=arguments[0],i={name:"templates"},n=null,o=null,a=e(Y,{class:"postbox",attrs:{id:"templates-usage",title:"Setting up your Templates",body:'Templates are used to display the items imported using WP RSS Aggregator. Choose the preferred options below and use them anywhere on your site via our <a href="https://kb.wprssaggregator.com/article/54-displaying-imported-items-shortcode#tinymce" target="_blank">shortcode</a> or our <a href="https://kb.wprssaggregator.com/article/454-displaying-imported-items-block-gutenberg" target="_blank">block</a>.',learnMore:"https://kb.wprssaggregator.com/article/457-templates"}});this.router.params.id&&(n=e("div",{attrs:{id:""},style:{padding:"6px 0"}},[e("div",{class:"misc-pub-section misc-pub-visibility"},[e("a",{attrs:{href:this.previewUrl,role:"button",target:"wpra-preview-template"},class:"wpra-preview-link",style:{marginLeft:"4px",textDecoration:"none"}},["Open preview",e("span",{class:"dashicons dashicons-external"})])])])),this.model.id&&(o=e("div",{class:"wpra-shortcode-copy",attrs:{title:"Copy chortcode"}},[e("div",{class:"wpra-shortcode-copy__content"},[e("strong",["Shortcode: "]),e("code",[this.getShortcode()])]),e("div",{class:"wpra-shortcode-copy__icon"},[e("button",S()([{class:"button"},{on:{click:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];t.copyShortcode.apply(t,[e].concat(n))}}}]),["Copy Shortcode"])])]));var r=e("div",[e("div",{class:"page-title"},[e(C,{class:"back-button",attrs:{path:i,gate:this.preventLoosingNotSavedData}},[e("span",{class:"dashicons dashicons-arrow-left-alt"}),"Templates"]),e("h1",[this.router.params.id?this.changes.model.name||this.changes.model.slug:"Create a New Template"]),o]),e("div",{attrs:{id:"poststuff"}},[this.isLoading?e("div",{class:"loading-container"}):e(K,{class:"metabox-holder columns-2"},[e(z,[a,e(q,{attrs:{id:"template-details",title:"Template Details",context:this}},[e(j,S()([{attrs:{type:"text",label:"Template name",value:this.model.name,disabled:"__built_in"===this.model.type}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.name=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"select",label:"Template type",value:this.model.type,options:this.typeOptions,disabled:"__built_in"===this.model.type,inputDisabled:!WpraTemplates.options.is_type_enabled,description:WpraTemplates.options.is_type_enabled?null:'<div class="disable-ignored"><strong class="disable-ignored">Get more template types, including a customisable grid template.</strong> <a target="_blank" href="https://www.wprssaggregator.com/extensions/templates/" class="disable-ignored">Learn more.</a></div>'}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.type=e}).apply(void 0,[e].concat(n))}}}])),"__built_in"===this.model.type?e("div",{class:"wpra-info-box"},[e("div",{class:"wpra-info-box__icon"},[e("span",{class:"dashicons dashicons-info"})]),e("div",{class:"wpra-info-box__text"},["This is the default template for WP RSS Aggregator. It is used as the fallback template when one is not selected via the shortcode or block. To create a new one, please go back to the templates list page."])]):null]),e(q,{attrs:{id:"template-options",title:"Template Options",context:this}},[e(j,S()([{attrs:{type:"checkbox",label:"Link title to original article",value:this.model.options.title_is_link,title:this.tooltips.options.title_is_link}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.title_is_link=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"number",label:"Title maximum length",value:this.model.options.title_max_length||"",placeholder:"No limit",title:this.tooltips.options.title_max_length}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.title_max_length=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"number",label:"Number of items to show",value:this.model.options.limit||"",title:this.tooltips.options.limit,placeholder:"Show all items",min:"0"}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.limit=""===e?0:e}).apply(void 0,[e].concat(n))}}}])),e("div",{attrs:{id:"wpra-list-template-publish-date"},style:{paddingTop:"10px"}},[e(j,S()([{attrs:{type:"checkbox",label:"Show publish date",value:this.model.options.date_enabled,title:this.tooltips.options.date_enabled},style:{fontWeight:"bold"}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.date_enabled=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"text",label:"Date prefix",value:this.model.options.date_prefix,disabled:!this.model.options.date_enabled,title:this.tooltips.options.date_prefix}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.date_prefix=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"text",label:"Date format",value:this.model.options.date_format,disabled:this.model.options.date_use_time_ago||!this.model.options.date_enabled,title:this.tooltips.options.date_format}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.date_format=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"checkbox",label:'Use "time ago" format',description:"Example: 20 minutes ago",value:this.model.options.date_use_time_ago,disabled:!this.model.options.date_enabled,title:this.tooltips.options.date_use_time_ago}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.date_use_time_ago=e}).apply(void 0,[e].concat(n))}}}]))]),e("div",{attrs:{id:"wpra-list-template-source"},style:{paddingTop:"10px"}},[e(j,S()([{attrs:{type:"checkbox",label:"Show source name",value:this.model.options.source_enabled,title:this.tooltips.options.source_enabled},style:{fontWeight:"bold"}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.source_enabled=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"text",label:"Source prefix",value:this.model.options.source_prefix,disabled:!this.model.options.source_enabled,title:this.tooltips.options.source_prefix}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.source_prefix=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"checkbox",label:"Link source name",value:this.model.options.source_is_link,disabled:!this.model.options.source_enabled,title:this.tooltips.options.source_is_link}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.source_is_link=e}).apply(void 0,[e].concat(n))}}}]))]),e("div",{attrs:{id:"wpra-list-template-author"},style:{paddingTop:"10px"}},[e(j,S()([{attrs:{type:"checkbox",label:"Show author name",value:this.model.options.author_enabled,title:this.tooltips.options.author_enabled},style:{fontWeight:"bold"}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.author_enabled=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"text",label:"Author prefix",value:this.model.options.author_prefix,disabled:!this.model.options.author_enabled,title:this.tooltips.options.author_prefix}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.author_prefix=e}).apply(void 0,[e].concat(n))}}}]))]),e("div",{attrs:{id:"wpra-list-template-pagination"},style:{paddingTop:"10px"}},[e(j,S()([{attrs:{type:"checkbox",label:"Pagination",value:this.model.options.pagination,title:this.tooltips.options.pagination,disabled:parseInt(this.model.options.limit)<1||!this.model.options.limit},style:{fontWeight:"bold"}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.pagination=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"select",label:"Pagination style",options:WpraTemplates.options.pagination_type,value:this.model.options.pagination_type,disabled:!this.model.options.pagination||parseInt(this.model.options.limit)<1||!this.model.options.limit,title:this.tooltips.options.pagination_type}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.pagination_type=e}).apply(void 0,[e].concat(n))}}}]))]),e("div",{attrs:{id:"wpra-list-template-bullets"},style:{paddingTop:"10px"}},[e(j,S()([{attrs:{type:"checkbox",label:"Show bullets",value:this.model.options.bullets_enabled,title:this.tooltips.options.bullets_enabled},style:{fontWeight:"bold"}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.bullets_enabled=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"select",label:"Bullet style",options:WpraTemplates.options.bullet_type,value:this.model.options.bullet_type,disabled:!this.model.options.bullets_enabled,title:this.tooltips.options.bullet_type}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.bullet_type=e}).apply(void 0,[e].concat(n))}}}]))])])]),e(H,[e(q,{attrs:{id:"template-create",title:this.model.id?"Update Template":"Create Template",submit:!0,context:this},class:"wpra-postbox-last"},[e("div",{class:"submitbox",attrs:{id:"submitpost"}},[n,e("div",{attrs:{id:"major-publishing-actions"}},[e("div",{attrs:{id:"delete-action"}},[this.isChanged()?e("a",S()([{attrs:{href:"#"},class:"submitdelete"},{on:{click:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){e.preventDefault(),t.cancelChanges()}).apply(void 0,[e].concat(n))}}}]),["Cancel Changes"]):null]),e("div",{attrs:{id:"publishing-action"}},[e(X,{class:"button-primary button-large",attrs:{loading:this.isSaving},nativeOn:{click:this.save}},[this.model.id?"Save":"Publish"])]),e("div",{class:"clear"})])])]),e(q,{attrs:{id:"template-link-preferences",title:"Link Preferences",context:this}},[e("p",{style:{opacity:.65}},["These options apply to all links within this template."]),e(j,S()([{attrs:{type:"checkbox",label:"Set links as nofollow",value:this.model.options.links_nofollow,title:this.tooltips.options.links_nofollow}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.links_nofollow=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"select",label:"Open links behaviour",value:this.model.options.links_behavior,options:WpraTemplates.options.links_behavior,title:this.tooltips.options.links_behavior},class:"form-input--vertical"},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.links_behavior=e}).apply(void 0,[e].concat(n))}}}])),"lightbox"===this.model.options.links_behavior?e("div",{class:"notice notice-info notice-alt"},[e("p",["Some sites may not allow their content to be shown in a lightbox."]),e("p",["Embedded content usually works. Try ticking the below checkbox."]),e("p",[e("a",{attrs:{href:"https://kb.wprssaggregator.com/article/471-q-why-wont-some-of-my-feed-items-work-with-the-lightbox-link-behaviour-for-templates",target:"_blank"}},["Learn more"])])]):null,e(j,S()([{attrs:{type:"checkbox",label:"Set links to open embeds",value:this.model.options.link_to_embed,title:this.tooltips.options.link_to_embed}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.link_to_embed=e}).apply(void 0,[e].concat(n))}}}]))]),e(q,{attrs:{id:"template-custom-css",title:"Custom Style",context:this}},[e(j,S()([{attrs:{type:"text",label:"Custom HTML class name",value:this.model.options.custom_css_classname,title:this.tooltips.options.custom_css_classname},class:"form-input--vertical"},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.custom_css_classname=e}).apply(void 0,[e].concat(n))}}}]))])])])])]);return this.hooks.apply("wpra-templates-form",this,r)}},st=function(t){var e=t.store,i=t.router;return{store:e,data:function(){return{afterNavigate:function(){},params:{},currentRoute:null}},created:function(){i.setApp(this),this.currentRoute=i.parseLocation(window.location),this.navigated()},mounted:function(){var t=this;window.addEventListener("popstate",function(){t.currentRoute=i.parseLocation(window.location),t.navigated()})},methods:{ViewComponent:function(){return i.findRoute(this.currentRoute).component},navigated:function(){var t=this;this.$nextTick(function(){var e=t.$refs.main;e&&e.navigated&&e.navigated({route:i.findRoute(t.currentRoute)})})}},render:function(t){var e=t(this.ViewComponent(),{ref:"main"});return this.afterNavigate(),e}}},lt=function(){function t(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,i,n){return i&&t(e.prototype,i),n&&t(e,n),e}}(),pt=function(t){t||(t=location.href);var e=t.indexOf("?"),i=t.indexOf("#");if(-1==i&&-1==e)return{};-1==i&&(i=t.length);var n=-1==e||i==e+1?t.substring(i):t.substring(e+1,i),o={};return n.split("&").forEach(function(t){if(t){t=t.split("+").join(" ");var e=t.indexOf("="),i=e>-1?t.substr(0,e):t,n=e>-1?decodeURIComponent(t.substr(e+1)):"",a=i.indexOf("[");if(-1==a)o[decodeURIComponent(i)]=n;else{var r=i.indexOf("]",a),s=decodeURIComponent(i.substring(a+1,r));i=decodeURIComponent(i.substring(0,a)),o[i]||(o[i]=[]),s?o[i][s]=n:o[i].push(n)}}}),o},ut=function(){function t(e,i){c(this,t),this.routes=e,this.options=i,this.baseParams=i.baseParams||["post_type","page","action","id"]}return t.prototype.setApp=function(t){this.app=t,this.app.afterNavigate=this.options.afterNavigating||function(){}},t.prototype.findRoute=function(t){return this.routes.find(function(e){var i=e.route;return-1!==t.indexOf(i)})},t.prototype.updateParams=function(t){this.app.$set(this.app,"params",t)},t.prototype.mergeParams=function(t){var e=this,i=Object.keys(this.params).filter(function(i){return-1!==e.baseParams.indexOf(i)||t.hasOwnProperty(i)}).reduce(function(t,i){return t[i]=e.params[i],t},{}),n=Object.assign({},i,t);this.updateParams(n),window.history.pushState(null,null,this.routeFromParams()),this.app.navigated()},t.prototype.routeFromParams=function(){var t=!!Object.keys(this.params).length;return location.pathname+(t?"?"+this.buildParams(this.params):"")},t.prototype.buildRoute=function(t){if(t.name){var e=this.routes.find(function(e){return e.name===t.name});if(!e)return null;var i=e.route,n=-1!==i.indexOf("?")?"&":"?";return i+(t.params?n+this.buildParams(t.params?t.params:{}):"")}},t.prototype.buildParams=function(t){return Object.keys(t).map(function(e){return e+"="+t[e]}).join("&")},t.prototype.parseLocation=function(t){return this.updateParams(pt(t.search)),pt(t.search),t.pathname+t.search},t.prototype.navigate=function(t){this.app&&(this.app.currentRoute=this.buildRoute(t)),this.updateParams(Object.assign({},t.params||{},pt(this.buildRoute(t)))),window.history.pushState(null,null,this.buildRoute(t)),this.app.navigated()},lt(t,[{key:"params",get:function(){return this.app?this.app.params:{}}}]),t}(),ct=ut,dt={set:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];t.isInitialized=!0,t.items=e},updatePreset:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;t.preset=e}},ht={},ft={isInitialized:!1,items:[],preset:{}},mt={item:function(t){return function(e){return U(t.items).find(e)}}},yt={namespaced:!0,mutations:dt,actions:ht,state:ft,getters:mt},vt=function(){function t(e,i){d(this,t),this.showMethod=e,this.errorMethod=i}return t.prototype.show=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.showMethod(t,e)},t.prototype.error=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.errorMethod(t,e)},t}(),bt=vt,gt=i(5),_t={Input:j,NoticeBlock:Y,Postbox:q,RouteLink:C,TransitionExpand:gt.a,Button:X},wt={register:function(t){t.TemplateEdit=function(){return rt},t.TemplateList=function(){return B},t.router=function(t){var e=t.document,i=t.TemplateEdit,n=t.TemplateList;return new ct([{route:WpraGlobal.templates_url_base+"&action",name:"templates-form",component:i},{route:WpraGlobal.templates_url_base,name:"templates",component:n}],{afterNavigating:function(){e.querySelector("html").scrollTop=0}})},t.App=function(t){return st(t)},t.vuex=function(t){return t.vue.use(k.a),k.a},t.notification=function(t){var e=t.vue;return e.use(g.a,{position:"top-center",duration:4e3,iconPack:"callback"}),new bt(e.toasted.show,e.toasted.error)},t.store=function(t){return new t.vuex.Store({modules:{templates:yt},state:{}})},t.http=function(){var t=WpraGlobal&&WpraGlobal.nonce?{headers:{"X-WP-Nonce":WpraGlobal.nonce}}:{};return v.a.create(t)};for(var e=Object.entries(_t),i=Array.isArray(e),n=0,e=i?e:e[Symbol.iterator]();;){var o;if("break"===function(){if(i){if(n>=e.length)return"break";o=e[n++]}else{if(n=e.next(),n.done)return"break";o=n.value}var a=o,r=a[0],s=a[1];t[r]=function(){return s}}())break}return t},run:function(t){t.container.vue.use(w.a,{theme:"light",animation:"fade",arrow:!0,arrowTransform:"scale(0)",placement:"right"})}},kt=i(4);i(41);var xt=h.Container,St=h.Core,At=h.Services;window.UiFramework&&(window.UiFramework=Object.assign({},window.UiFramework,St.UiFramework));var Tt={uiFramework:h,hooks:new At.HookService,document:document,vue:function(t){return kt.a.use(t.uiFramework.Core.InjectedComponents,{container:t}),kt.a}},Ct=new xt.ContainerFactory(m.a),Ot=new St.UiFramework.App(Ct,Tt);window.UiFramework.registerPlugin("templates-app",wt),Ot.use(WpraTemplates.modules||["templates-app"]),Ot.init({"#wpra-templates-app":"App"})},41:function(t,e){},5:function(t,e,i){"use strict";var n={name:"TransitionExpand",functional:!0,render:function(t,e){return t("transition",{props:{name:"expand"},on:{afterEnter:function(t){t.style.height="auto"},enter:function(t){var e=getComputedStyle(t),i=e.width;t.style.width=i,t.style.position="absolute",t.style.visibility="hidden",t.style.height="auto";var n=getComputedStyle(t),o=n.height;t.style.width=null,t.style.position=null,t.style.visibility=null,t.style.height=0,getComputedStyle(t).height,setTimeout(function(){t.style.height=o})},leave:function(t){var e=getComputedStyle(t),i=e.height;t.style.height=i,getComputedStyle(t).height,setTimeout(function(){t.style.height=0})}}},e.children)}},o=n,a=i(1),r=Object(a.a)(o,void 0,void 0,!1,null,null,null);e.a=r.exports},6:function(t,e,i){"use strict";function n(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!navigator.clipboard)return void o(t,e);navigator.clipboard.writeText(t).then(function(){},function(t){console.error("Async: Could not copy text: ",t)})}e.a=n;var o=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;e=e||document.body.parentElement;var i=document.createElement("textarea");i.value=t;var n=e.scrollTop;document.body.appendChild(i),i.focus(),i.select();try{document.execCommand("copy")}catch(t){console.error("Fallback: Oops, unable to copy",t)}document.body.removeChild(i),e.scrollTop=n}}},[40])});
|
1 |
+
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.WPRA=e():t.WPRA=e()}("undefined"!=typeof self?self:this,function(){return webpackJsonpWPRA([1],{40:function(t,e,i){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t){return new I(t)}function a(t){return t&&"object"===(void 0===t?"undefined":Z(t))&&"[object RegExp]"!==Object.prototype.toString.call(t)&&"[object Date]"!==Object.prototype.toString.call(t)}function r(t){return Array.isArray(t)?[]:{}}function s(t,e){return e&&!0===e.clone&&a(t)?u(r(t),t,e):t}function l(t,e,i){var n=t.slice();return e.forEach(function(e,o){void 0===n[o]?n[o]=s(e,i):a(e)?n[o]=u(t[o],e,i):-1===t.indexOf(e)&&n.push(s(e,i))}),n}function p(t,e,i){var n={};return a(t)&&Object.keys(t).forEach(function(e){n[e]=s(t[e],i)}),Object.keys(e).forEach(function(o){a(e[o])&&t[o]?n[o]=u(t[o],e[o],i):n[o]=s(e[o],i)}),n}function u(t,e,i){var n=Array.isArray(e),o=i||{arrayMerge:l},a=o.arrayMerge||l;return n?Array.isArray(t)?a(t,e,i):s(e,i):p(t,e,i)}function c(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function d(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var h=i(42),f=i(43),m=i.n(f),y=i(9),v=i.n(y),b=i(45),g=i.n(b),_=i(46),w=i.n(_),k=i(47),x=i(2),S=i.n(x),A=i(48),T=i.n(A),C={props:{path:{},gate:{}},inject:["router"],methods:{getPath:function(){return this.router.buildRoute(this.path)},navigate:function(t){var e=!this.gate||this.gate();t.preventDefault(),e&&this.router.navigate(this.path)}},render:function(){var t=this,e=arguments[0],i=this.getPath();return e("a",S()([{attrs:{href:i}},{on:{click:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];t.navigate.apply(t,[e].concat(n))}}}]),[this.$slots.default])}},O=null,P={props:{mediaType:{type:String,default:"image"},mediaTitle:{type:String,default:"Select Media"},mediaValueProperty:{type:String,default:"id"}},methods:{mediaNode:function(){var t=this,e=this.$createElement;return this.assertMediaLoaded(),e("div",[e("input",{attrs:{type:"text"},domProps:{value:this.value}}),e("button",S()([{class:"button"},{on:{click:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];t.openFrame.apply(t,[e].concat(n))}}}]),["Choose image"])])},openFrame:function(){O||(O=this.createFrame()),O.open()},createFrame:function(){var t=this;return O=wp.media({title:this.mediaTitle,multiple:!1,library:{type:this.mediaType}}),O.on("close",function(){var e=O.state().get("selection"),i=null;e.each(function(t){i=t}),i&&i.id&&t.$emit("input",{id:i.id,url:i.attributes.url}[t.mediaValueProperty])}),O.on("open",function(){var e=O.state().get("selection");if("id"===t.mediaValueProperty&&t.value){var i=wp.media.attachment(t.value);i.fetch(),e.add(i?[i]:[])}}),O},assertMediaLoaded:function(){if(!window.wp.media)throw Error("[MediaInput] wp.media dependency is not loaded")}}},j={mixins:[P],props:{id:{type:String,default:function(){return Math.random().toString(36).substr(0,12)}},label:{},description:{},after:{},type:{},value:{},placeholder:{},title:{},inputDisabled:{},options:{default:function(){return{}}}},methods:{inputNode:function(){var t=this,e=this.$createElement;return"media"===this.type?this.mediaNode():"checkbox"===this.type?e("input",S()([{attrs:{type:"checkbox",id:this.id,placeholder:this.placeholder,disabled:this.$attrs.disabled||this.inputDisabled},domProps:{checked:!!this.value}},{attrs:this.$attrs},{on:{change:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(){return t.$emit("input",!t.value)}).apply(void 0,[e].concat(n))}}}])):"select"!==this.type?e("input",S()([{attrs:{type:this.type,id:this.id,placeholder:this.placeholder,disabled:this.$attrs.disabled||this.inputDisabled},domProps:{value:this.value}},{attrs:this.$attrs},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.$emit("input",e.target.value)}).apply(void 0,[e].concat(n))}}}])):this.selectNode()},selectNode:function(){var t=this,e=this.$createElement,i=Object.keys(this.options).map(function(i){return e("option",{domProps:{value:i,selected:t.value===i}},[t.options[i]])});return e("select",S()([{attrs:this.$attrs},{attrs:{id:this.id,disabled:this.$attrs.disabled||this.inputDisabled}},{on:{change:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.$emit("input",e.target.value)}).apply(void 0,[e].concat(n))}}}]),[i])}},render:function(){var t=arguments[0],e=[];return this.title&&e.push({name:"tippy"}),t("div",{class:{"form-input":!0,"form-input--disabled":this.$attrs.disabled||!1}},[this.label?t("label",{class:"form-input__label",attrs:{for:this.id}},[t("div",[this.label,this.title?t("div",S()([{class:"form-input__tip"},{directives:e},{attrs:{title:this.title}}]),[t("span",{class:"dashicons dashicons-editor-help"})]):null]),this.description?t("div",S()([{class:"form-input__label-description"},{domProps:{innerHTML:this.description}}])):""]):null,t("div",{class:"form-input__field"},[this.inputNode(),this.after])])}},L=function(){var t=this,e=t.$createElement;return(t._self._c||e)("div",{staticClass:"wpra-bottom-panel"},[t._t("default")],2)},W=[],M={},$=M,N=i(1),R=Object(N.a)($,L,W,!1,null,null,null),E=R.exports,D=function(t){return JSON.parse(JSON.stringify(t))},F="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},I=function(){function t(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"id";return n(this,t),this.data=e,this.primaryField=i,this}return t.prototype.find=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if("object"!==(void 0===t?"undefined":F(t))&&null!==t){var i;i={},i[this.primaryField]=t,t=i}for(var n in this.data)if(this._isMatching(this.data[n],t))return this.data[n];return e},t.prototype.pluck=function(t){return this.data.map(function(e){return e[t]})},t.prototype.remove=function(t){for(var e in this.data)this._isMatching(this.data[e],t)&&this.data.splice(e,1);return this},t.prototype.appendDiff=function(t){for(var e=t,i=Array.isArray(e),n=0,e=i?e:e[Symbol.iterator]();;){var o;if(i){if(n>=e.length)break;o=e[n++]}else{if(n=e.next(),n.done)break;o=n.value}var a=o;this.contains(a)||this.data.push(a)}},t.prototype.prependDiff=function(t){for(var e=t.slice().reverse(),i=Array.isArray(e),n=0,e=i?e:e[Symbol.iterator]();;){var o;if(i){if(n>=e.length)break;o=e[n++]}else{if(n=e.next(),n.done)break;o=n.value}var a=o;this.contains(a)||this.data.unshift(a)}},t.prototype.contains=function(t){for(var e=this.data,i=Array.isArray(e),n=0,e=i?e:e[Symbol.iterator]();;){var o;if(i){if(n>=e.length)break;o=e[n++]}else{if(n=e.next(),n.done)break;o=n.value}if(o.id==t.id)return!0}return!1},t.prototype.filterValues=function(t){var e=this;return Object.keys(this.data).filter(function(i){return t(e.data[i],i)}).reduce(function(t,i){return t[i]=e.data[i],t},{})},t.prototype.filter=function(t){var e=this;return this.data.filter(function(i){return e._isMatching(i,t)})},t.prototype.whereIn=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"id",i=[],n={};n[e]=null;for(var o=t,a=Array.isArray(o),r=0,o=a?o:o[Symbol.iterator]();;){var s;if(a){if(r>=o.length)break;s=o[r++]}else{if(r=o.next(),r.done)break;s=r.value}var l=s;n[e]=l;var p=this.find(n);p&&i.push(p)}return i},t.prototype.key=function(e){return new t(this.data.slice().reduce(function(t,i){return t[i[e]]=i,t},{}))},t.prototype.mapValues=function(t){var e=this;return Object.keys(this.data).map(function(i){e.data[i]=t(e.data[i],i)}),this},t.prototype.values=function(){return this.data},t.prototype._isMatching=function(t,e){if(!(t instanceof Object||e instanceof Object))return t==e;for(var i=!0,n=Object.keys(e),o=Array.isArray(n),a=0,n=o?n:n[Symbol.iterator]();;){var r;if(o){if(a>=n.length)break;r=n[a++]}else{if(a=n.next(),a.done)break;r=a.value}var s=r,l=t.hasOwnProperty(s)&&t[s]==e[s];i=i&&l}return i},t}(),U=o,B={data:function(){return{loading:!1,columns:{name:{label:"Template Name",class:"column-primary"},style:{label:"Template Type"},previewTemplate:{label:"Preview"}},filters:WpraTemplates.options.type,checked:[],filter:{paged:parseInt(this.router.params.paged||1),type:this.router.params.type||"",s:this.router.params.s||""},baseUrl:WpraTemplates.base_url,total:0}},inject:["hooks","http","router"],computed:{totalPages:function(){return Math.ceil(this.total/20)},list:{get:function(){return this.$store.state.templates.items},set:function(t){this.$store.commit("templates/set",t)}}},methods:{navigated:function(){var t=this;Object.keys(this.filter).forEach(function(e){t.filter[e]=t.router.params[e]||""}),this.filter.paged=parseInt(this.filter.paged||1),this.fetchList()},fetchList:function(){var t=this;this.loading=!0;var e=this.getParams(),i=parseInt(e.paged);return delete e.paged,i&&1!==i&&(e.page=i),this.http.get(this.baseUrl,{params:e}).then(function(e){t.list=e.data.items,t.total=e.data.count}).finally(function(){t.loading=!1})},deleteTemplate:function(t){var e=this;if(confirm("Are you sure you want to delete this template? If this template is being used in a shortcode or Gutenberg block anywhere on your site, the default template will be used instead."))return this.loading=!0,this.http.delete(this.baseUrl+"/"+t).then(function(){return e.fetchList()}).then(function(){e.loading=!1})},bulkDelete:function(){var t=this;if(confirm("Are you sure you want to delete these templates? If a template is being used in a shortcode or Gutenberg block anywhere on your site, the default template will be used instead."))return this.loading=!0,this.http.delete(this.baseUrl,{params:{ids:this.checked}}).then(function(){return t.checked=[],t.$refs.table.checkedItems=[],t.fetchList()}).then(function(){t.loading=!1})},duplicateTemplate:function(t){var e=D(t);delete e.id,"__built_in"===e.type&&delete e.type,e.name=e.name+" (Copy)",this.$store.commit("templates/updatePreset",e),this.router.navigate({name:"templates",params:{action:"new"}})},getPreviewLink:function(t){return WpraGlobal.admin_base_url+"?wpra_preview_template="+t.id},createTemplate:function(){this.$store.commit("templates/updatePreset",{}),this.router.navigate({name:"templates",params:{action:"new"}})},setChecked:function(t){var e=this;this.checked=t.filter(function(t){return"__built_in"!==U(e.list).find(t,{}).type})},getParams:function(){var t=this;return Object.keys(this.filter).filter(function(e){return!!t.filter[e]&&"all"!==t.filter[e]}).reduce(function(e,i){return e[i]=t.filter[i],e},{})},setFilter:function(t,e){this.filter[t]=e},submitFilter:function(){this.router.mergeParams(this.getParams())},getRowClass:function(t){return"__built_in"===t.type?"built-in":""}},render:function(){var t=this,e=arguments[0],i=function(t){return{name:"templates",params:{action:"edit",id:t}}},n=this.hooks.apply("wpra-templates-list-cells",this,{name:function(n){var o=n.row;return[e("div",[e("strong",[e(C,{attrs:{path:i(o.id)}},[o.name])]),e("small",{style:{paddingLeft:"4px",opacity:"0.6"}},[o.slug]),"__built_in"===o.type?e("span",{style:{opacity:"0.6",display:"block"}},['This is the default feed template. To create your own, either duplicate it or click "Add New" above.']):null]),e("div",{class:"row-actions"},[e("span",{attrs:{className:"edit"}},[e(C,{attrs:{path:i(o.id)}},["Edit"])," |"]),e("span",{class:"inline",style:{paddingLeft:"4px"}},[e("a",S()([{attrs:{href:"#"}},{on:{click:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),a=1;a<i;a++)n[a-1]=arguments[a];(function(e){e.preventDefault(),t.duplicateTemplate(o)}).apply(void 0,[e].concat(n))}}}]),["Duplicate"])," ","__built_in"!==o.type?"|":""]),"__built_in"!==o.type?e("span",S()([{class:"trash",style:{paddingLeft:"4px"}},{on:{click:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),a=1;a<i;a++)n[a-1]=arguments[a];(function(e){e.preventDefault(),t.deleteTemplate(o.id)}).apply(void 0,[e].concat(n))}}}]),[e("a",{attrs:{href:"#","aria-label":"Delete Item"},class:"submitdelete"},["Delete"])]):null])]},style:function(i){var n=i.row;return t.filters[n.type]?[e("div",[t.filters[n.type]])]:[e("div",[t.filters.list," ",e("span",{style:{opacity:.7,fontSize:"90%"}},["(Missing type: ",e("code",[n.type]),")"])])]},previewTemplate:function(i){var n=i.row;return[e("div",[e("a",{attrs:{href:t.getPreviewLink(n),target:"wpra-preview-template"},class:"wpra-preview-link"},["Open preview ",e("span",{class:"dashicons dashicons-external"})])])]},filters:function(){var i=Object.keys(WpraTemplates.options.type).filter(function(t){return"_"!==t[0]}).reduce(function(t,e){return t[e]=WpraTemplates.options.type[e],t},{all:"Select Template Type"});return[e(j,S()([{attrs:{type:"select",options:i,value:t.filter.type},style:{margin:0}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){t.filter.type=e,t.submitFilter()}).apply(void 0,[e].concat(n))}}}]))]}}),o=e("div",[e("h1",{class:"wp-heading-inline"},["Templates"]),e("a",S()([{class:"page-title-action",attrs:{href:"#"}},{on:{click:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){e.preventDefault(),t.createTemplate()}).apply(void 0,[e].concat(n))}}}]),["Add New"]),e("p",{class:"search-box",style:{padding:"10px 0"}},[e("label",{class:"screen-reader-text",attrs:{for:"post-search-input"}},["Search Templates:"]),e("input",S()([{attrs:{type:"search",id:"post-search-input",name:"s"},domProps:{value:this.filter.s}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.filter.s=e.target.value}).apply(void 0,[e].concat(n))},keyup:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];if(!("button"in e)&&t._k(e.keyCode,"enter",13))return null;t.submitFilter.apply(t,[e].concat(n))}}}])),e("input",S()([{attrs:{type:"submit",id:"search-submit",value:"Search Templates"},class:"button"},{on:{click:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];t.submitFilter.apply(t,[e].concat(n))}}}]))]),e(T.a,S()([{attrs:{columns:this.columns,rows:this.list,loading:this.loading,totalItems:this.total,perPage:20,totalPages:this.totalPages,currentPage:this.filter.paged,notFound:"No templates found.",rowClass:this.getRowClass},ref:"table",class:{"wpra-no-cb":0===this.list.length||1===this.list.length&&"__built_in"===this.list[0].type},scopedSlots:n},{on:{checked:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];t.setChecked.apply(t,[e].concat(n))},pagination:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){t.filter.paged=e,t.submitFilter()}).apply(void 0,[e].concat(n))}}}])),this.checked.length?e(E,[e("div",{class:"flex-row"},[e("div",{class:"flex-col"},[e("div",{class:"wpra-bottom-panel__title"},["Bulk Actions"]),e("a",S()([{attrs:{href:"#"}},{on:{click:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){e.preventDefault(),t.bulkDelete()}).apply(void 0,[e].concat(n))}}}]),["Delete"])])])]):null]);return this.hooks.apply("wpra-templates-list",this,o)}},V={inject:["hooks"],data:function(){return{expanded:!0}},props:{title:{},id:{},submit:{type:Boolean,default:!1},context:{}},methods:{toggle:function(){this.expanded=!this.expanded}},render:function(t){var e=this;return this.hooks.apply("postbox-"+this.id,this.context||this,t("div",{class:"postbox wpra-postbox",attrs:{id:this.submit?"submitdiv":""}},[t("div",{class:"postbox-header"},[t("h2",S()([{class:"hndle ui-sortable-handle"},{on:{click:function(t){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];e.toggle.apply(e,[t].concat(n))}}}]),[t("span",[this.title])])]),t("div",{class:"inside"},[this.hooks.apply("postbox-content-"+this.id,this.context||this,[this.$slots.default],{h:t})])]),{h:t})}},G=V,J=Object(N.a)(G,void 0,void 0,!1,null,null,null),q=J.exports,z={render:function(){return(0,arguments[0])("div",{attrs:{id:"postbox-container-2"},class:"postbox-container"},[this.$slots.default])}},H={render:function(){return(0,arguments[0])("div",{attrs:{id:"postbox-container-1"},class:"wpra-postbox-container postbox-container"},[this.$slots.default])}},K={render:function(){return(0,arguments[0])("div",{attrs:{id:"post-body"}},[this.$slots.default])}},X={props:{loading:{type:Boolean,default:!1}},render:function(){return(0,arguments[0])("button",{attrs:{disabled:this.loading},class:{button:!0,"loading-button":this.loading}},[this.$slots.default])}},Y={data:function(){return{shouldBeVisible:!0}},props:{id:{type:String,required:!0},title:{type:String},body:{type:String},learnMore:{default:!1},okayText:{type:String,default:"Got it"},learnMoreText:{type:String,default:"Learn more"},visible:{type:Boolean,default:!0}},computed:{isVisible:function(){return this.visible&&this.shouldBeVisible&&JSON.parse(localStorage.getItem(this.getBlockKey())||"true")}},methods:{onOkayClick:function(){this.shouldBeVisible=!1,localStorage.setItem(this.getBlockKey(),JSON.stringify(!1))},onLearnMoreClick:function(){window.open(this.learnMore,"_blank").focus()},getBlockKey:function(){return"wpra-"+this.id+"-visible"}},render:function(){var t=arguments[0];if(!this.isVisible)return null;var e=this.learnMore?t(X,{class:"button-clear",nativeOn:{click:this.onLearnMoreClick}},[this.learnMoreText," ",t("span",{class:"dashicons dashicons-external"})]):null;return t("div",{class:"wpra-notice-block"},[t("div",{class:"wpra-notice-block__title"},[this.title]),t("div",S()([{class:"wpra-notice-block__body"},{domProps:{innerHTML:this.body}}])),t("div",{class:"wpra-notice-block__buttons"},[t(X,{class:"brand button-primary",nativeOn:{click:this.onOkayClick}},[this.okayText]),e])])}},Z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};u.all=function(t,e){if(!Array.isArray(t)||t.length<2)throw new Error("first argument should be an array with at least two elements");return t.reduce(function(t,i){return u(t,i,e)})};var Q=u,tt=i(49),et=i.n(tt),it={data:function(){return{changes:{model:{}}}},methods:{isChanged:function(){return!et()(this.model,this.changes.model)},rememberModel:function(){this.$set(this.changes,"model",D(this.model))},cancelChanges:function(){confirm("Are you sure you want to cancel your changes for this template? This action cannot be reverted and all changes made since your last save will be lost.")&&this.$set(this,"model",D(this.changes.model))}}},nt={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(t){var e,i,n,o,a,r,s,l="",p=0;for(t=nt._utf8_encode(t);p<t.length;)e=t.charCodeAt(p++),i=t.charCodeAt(p++),n=t.charCodeAt(p++),o=e>>2,a=(3&e)<<4|i>>4,r=(15&i)<<2|n>>6,s=63&n,isNaN(i)?r=s=64:isNaN(n)&&(s=64),l=l+this._keyStr.charAt(o)+this._keyStr.charAt(a)+this._keyStr.charAt(r)+this._keyStr.charAt(s);return l},decode:function(t){var e,i,n,o,a,r,s,l="",p=0;for(t=t.replace(/[^A-Za-z0-9\+\/\=]/g,"");p<t.length;)o=this._keyStr.indexOf(t.charAt(p++)),a=this._keyStr.indexOf(t.charAt(p++)),r=this._keyStr.indexOf(t.charAt(p++)),s=this._keyStr.indexOf(t.charAt(p++)),e=o<<2|a>>4,i=(15&a)<<4|r>>2,n=(3&r)<<6|s,l+=String.fromCharCode(e),64!=r&&(l+=String.fromCharCode(i)),64!=s&&(l+=String.fromCharCode(n));return l=nt._utf8_decode(l)},_utf8_encode:function(t){t=t.replace(/\r\n/g,"\n");for(var e="",i=0;i<t.length;i++){var n=t.charCodeAt(i);n<128?e+=String.fromCharCode(n):n>127&&n<2048?(e+=String.fromCharCode(n>>6|192),e+=String.fromCharCode(63&n|128)):(e+=String.fromCharCode(n>>12|224),e+=String.fromCharCode(n>>6&63|128),e+=String.fromCharCode(63&n|128))}return e},_utf8_decode:function(t){for(var e="",i=0,n=0,o=0;i<t.length;)n=t.charCodeAt(i),n<128?(e+=String.fromCharCode(n),i++):n>191&&n<224?(o=t.charCodeAt(i+1),e+=String.fromCharCode((31&n)<<6|63&o),i+=2):(o=t.charCodeAt(i+1),c3=t.charCodeAt(i+2),e+=String.fromCharCode((15&n)<<12|(63&o)<<6|63&c3),i+=3);return e}},ot=nt,at=i(6),rt={mixins:[it],data:function(){return{typeOptions:Object.keys(WpraTemplates.options.type).filter(function(t){return"_"!==t[0]}).reduce(function(t,e){return t[e]=WpraTemplates.options.type[e],t},{}),model:D(WpraTemplates.model_schema),validation:D(WpraTemplates.model_schema),tooltips:D(WpraTemplates.model_tooltips),baseUrl:WpraTemplates.base_url,isSaving:!1,isLoading:!1}},inject:["hooks","http","router","notification"],mounted:function(){this.resolveEditingItem()},computed:{previewUrl:function(){var t=ot.encode(JSON.stringify(this.model.options));return WpraGlobal.admin_base_url+"?wpra_preview_template="+this.router.params.id+"&wpra_template_options="+t}},methods:{resolveEditingItem:function(){var t=this,e=Q(D(WpraTemplates.model_schema),this.$store.state.templates.preset);this.isLoading=!0,function(){var e=t.router.params.id;if(!e)return Promise.resolve(null);var i=t.$store.getters["templates/item"](e);return i?Promise.resolve(i):t.http.get(t.baseUrl+"/"+e).then(function(t){return t.data})}().then(function(i){if(t.isLoading=!1,!i)return t.$set(t,"model",e),void t.rememberModel();i=Object.assign({},i),t.model=Q(t.model,i),t.rememberModel()})},save:function(){var t=this,e=!this.model.id;this.isSaving=!0,this.runRequest().then(function(i){t.model=Q(t.model,i.data),t.rememberModel(),t.notification.show("Template saved!",{type:"success",icon:function(t){return t.classList.add("dashicons","dashicons-yes"),t}}),e&&t.router.navigate({name:"templates",params:{action:"edit",id:i.data.id}})},function(e){t.notification.show("Something went wrong. Template is not saved!",{type:"error",icon:function(t){return t.classList.add("dashicons","dashicons-warning"),t}})}).finally(function(){t.isSaving=!1})},runRequest:function(){var t=this.model.id?"put":"post",e=this.model.id?this.baseUrl+"/"+this.model.id:this.baseUrl;return this.http[t](e,this.prepareModel())},prepareModel:function(){var t=this,e=Object.keys(WpraTemplates.model_schema);return Object.keys(this.model).filter(function(i){return!(!e.includes(i)||"__built_in"===t.model.type&&["name","type"].includes(i)||["slug","id"].includes(i))}).reduce(function(e,i){return e[i]=t.model[i],e},{})},getShortcode:function(){return'[wp-rss-aggregator template="'+this.model.slug+'"]'},preventLoosingNotSavedData:function(){return!this.isChanged()||confirm("You have unsaved changes. All changes will be lost if you go back to the Template list before updating. Are you sure you want to continue?")},copyShortcode:function(t){Object(at.a)(this.getShortcode());var e=t.target.innerText;t.target.style.width=t.target.getBoundingClientRect().width+"px",t.target.disabled=!0,t.target.innerText="Copied!",setTimeout(function(){t.target.style.width=null,t.target.innerText=e,t.target.disabled=!1},5e3)}},render:function(){var t=this,e=arguments[0],i={name:"templates"},n=null,o=null,a=e(Y,{class:"postbox",attrs:{id:"templates-usage",title:"Setting up your Templates",body:'Templates are used to display the items imported using WP RSS Aggregator. Choose the preferred options below and use them anywhere on your site via our <a href="https://kb.wprssaggregator.com/article/54-displaying-imported-items-shortcode#tinymce" target="_blank">shortcode</a> or our <a href="https://kb.wprssaggregator.com/article/454-displaying-imported-items-block-gutenberg" target="_blank">block</a>.',learnMore:"https://kb.wprssaggregator.com/article/457-templates"}});this.router.params.id&&(n=e("div",{attrs:{id:""},style:{padding:"6px 0"}},[e("div",{class:"misc-pub-section misc-pub-visibility"},[e("a",{attrs:{href:this.previewUrl,role:"button",target:"wpra-preview-template"},class:"wpra-preview-link",style:{marginLeft:"4px",textDecoration:"none"}},["Open preview",e("span",{class:"dashicons dashicons-external"})])])])),this.model.id&&(o=e("div",{class:"wpra-shortcode-copy",attrs:{title:"Copy chortcode"}},[e("div",{class:"wpra-shortcode-copy__content"},[e("strong",["Shortcode: "]),e("code",[this.getShortcode()])]),e("div",{class:"wpra-shortcode-copy__icon"},[e("button",S()([{class:"button"},{on:{click:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];t.copyShortcode.apply(t,[e].concat(n))}}}]),["Copy Shortcode"])])]));var r=e("div",[e("div",{class:"page-title"},[e(C,{class:"back-button",attrs:{path:i,gate:this.preventLoosingNotSavedData}},[e("span",{class:"dashicons dashicons-arrow-left-alt"}),"Templates"]),e("h1",[this.router.params.id?this.changes.model.name||this.changes.model.slug:"Create a New Template"]),o]),e("div",{attrs:{id:"poststuff"}},[this.isLoading?e("div",{class:"loading-container"}):e(K,{class:"metabox-holder columns-2"},[e(z,[a,e(q,{attrs:{id:"template-details",title:"Template Details",context:this}},[e(j,S()([{attrs:{type:"text",label:"Template name",value:this.model.name,disabled:"__built_in"===this.model.type}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.name=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"select",label:"Template type",value:this.model.type,options:this.typeOptions,disabled:"__built_in"===this.model.type,inputDisabled:!WpraTemplates.options.is_type_enabled,description:WpraTemplates.options.is_type_enabled?null:'<div class="disable-ignored"><strong class="disable-ignored">Get more template types, including a customisable grid template.</strong> <a target="_blank" href="https://www.wprssaggregator.com/extensions/templates/" class="disable-ignored">Learn more.</a></div>'}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.type=e}).apply(void 0,[e].concat(n))}}}])),"__built_in"===this.model.type?e("div",{class:"wpra-info-box"},[e("div",{class:"wpra-info-box__icon"},[e("span",{class:"dashicons dashicons-info"})]),e("div",{class:"wpra-info-box__text"},["This is the default template for WP RSS Aggregator. It is used as the fallback template when one is not selected via the shortcode or block. To create a new one, please go back to the templates list page."])]):null]),e(q,{attrs:{id:"template-options",title:"Template Options",context:this}},[e(j,S()([{attrs:{type:"checkbox",label:"Link title to original article",value:this.model.options.title_is_link,title:this.tooltips.options.title_is_link}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.title_is_link=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"number",label:"Title maximum length",value:this.model.options.title_max_length||"",placeholder:"No limit",title:this.tooltips.options.title_max_length}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.title_max_length=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"number",label:"Number of items to show",value:this.model.options.limit||"",title:this.tooltips.options.limit,placeholder:"Show all items",min:"0"}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.limit=""===e?0:e}).apply(void 0,[e].concat(n))}}}])),e("div",{attrs:{id:"wpra-list-template-publish-date"},style:{paddingTop:"10px"}},[e(j,S()([{attrs:{type:"checkbox",label:"Show publish date",value:this.model.options.date_enabled,title:this.tooltips.options.date_enabled},style:{fontWeight:"bold"}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.date_enabled=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"text",label:"Date prefix",value:this.model.options.date_prefix,disabled:!this.model.options.date_enabled,title:this.tooltips.options.date_prefix}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.date_prefix=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"text",label:"Date format",value:this.model.options.date_format,disabled:this.model.options.date_use_time_ago||!this.model.options.date_enabled,title:this.tooltips.options.date_format}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.date_format=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"checkbox",label:'Use "time ago" format',description:"Example: 20 minutes ago",value:this.model.options.date_use_time_ago,disabled:!this.model.options.date_enabled,title:this.tooltips.options.date_use_time_ago}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.date_use_time_ago=e}).apply(void 0,[e].concat(n))}}}]))]),e("div",{attrs:{id:"wpra-list-template-source"},style:{paddingTop:"10px"}},[e(j,S()([{attrs:{type:"checkbox",label:"Show source name",value:this.model.options.source_enabled,title:this.tooltips.options.source_enabled},style:{fontWeight:"bold"}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.source_enabled=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"text",label:"Source prefix",value:this.model.options.source_prefix,disabled:!this.model.options.source_enabled,title:this.tooltips.options.source_prefix}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.source_prefix=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"checkbox",label:"Link source name",value:this.model.options.source_is_link,disabled:!this.model.options.source_enabled,title:this.tooltips.options.source_is_link}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.source_is_link=e}).apply(void 0,[e].concat(n))}}}]))]),e("div",{attrs:{id:"wpra-list-template-author"},style:{paddingTop:"10px"}},[e(j,S()([{attrs:{type:"checkbox",label:"Show author name",value:this.model.options.author_enabled,title:this.tooltips.options.author_enabled},style:{fontWeight:"bold"}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.author_enabled=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"text",label:"Author prefix",value:this.model.options.author_prefix,disabled:!this.model.options.author_enabled,title:this.tooltips.options.author_prefix}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.author_prefix=e}).apply(void 0,[e].concat(n))}}}]))]),e("div",{attrs:{id:"wpra-list-template-pagination"},style:{paddingTop:"10px"}},[e(j,S()([{attrs:{type:"checkbox",label:"Pagination",value:this.model.options.pagination,title:this.tooltips.options.pagination,disabled:parseInt(this.model.options.limit)<1||!this.model.options.limit},style:{fontWeight:"bold"}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.pagination=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"select",label:"Pagination style",options:WpraTemplates.options.pagination_type,value:this.model.options.pagination_type,disabled:!this.model.options.pagination||parseInt(this.model.options.limit)<1||!this.model.options.limit,title:this.tooltips.options.pagination_type}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.pagination_type=e}).apply(void 0,[e].concat(n))}}}]))]),e("div",{attrs:{id:"wpra-list-template-bullets"},style:{paddingTop:"10px"}},[e(j,S()([{attrs:{type:"checkbox",label:"Show bullets",value:this.model.options.bullets_enabled,title:this.tooltips.options.bullets_enabled},style:{fontWeight:"bold"}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.bullets_enabled=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"select",label:"Bullet style",options:WpraTemplates.options.bullet_type,value:this.model.options.bullet_type,disabled:!this.model.options.bullets_enabled,title:this.tooltips.options.bullet_type}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.bullet_type=e}).apply(void 0,[e].concat(n))}}}]))]),WpraTemplates.audio_features_enabled&&e("div",{attrs:{id:"wpra-list-template-media"},style:{paddingTop:"10px"}},[e(j,S()([{attrs:{type:"checkbox",label:"Show audio player",value:this.model.options.audio_player_enabled,title:this.tooltips.options.audio_player_enabled},style:{fontWeight:"bold"}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.audio_player_enabled=e}).apply(void 0,[e].concat(n))}}}]))])])]),e(H,[e(q,{attrs:{id:"template-create",title:this.model.id?"Update Template":"Create Template",submit:!0,context:this},class:"wpra-postbox-last"},[e("div",{class:"submitbox",attrs:{id:"submitpost"}},[n,e("div",{attrs:{id:"major-publishing-actions"}},[e("div",{attrs:{id:"delete-action"}},[this.isChanged()?e("a",S()([{attrs:{href:"#"},class:"submitdelete"},{on:{click:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){e.preventDefault(),t.cancelChanges()}).apply(void 0,[e].concat(n))}}}]),["Cancel Changes"]):null]),e("div",{attrs:{id:"publishing-action"}},[e(X,{class:"button-primary button-large",attrs:{loading:this.isSaving},nativeOn:{click:this.save}},[this.model.id?"Save":"Publish"])]),e("div",{class:"clear"})])])]),e(q,{attrs:{id:"template-link-preferences",title:"Link Preferences",context:this}},[e("p",{style:{opacity:.65}},["These options apply to all links within this template."]),e(j,S()([{attrs:{type:"checkbox",label:"Set links as nofollow",value:this.model.options.links_nofollow,title:this.tooltips.options.links_nofollow}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.links_nofollow=e}).apply(void 0,[e].concat(n))}}}])),e(j,S()([{attrs:{type:"select",label:"Open links behaviour",value:this.model.options.links_behavior,options:WpraTemplates.options.links_behavior,title:this.tooltips.options.links_behavior},class:"form-input--vertical"},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.links_behavior=e}).apply(void 0,[e].concat(n))}}}])),"lightbox"===this.model.options.links_behavior?e("div",{class:"notice notice-info notice-alt"},[e("p",["Some sites may not allow their content to be shown in a lightbox."]),e("p",["Embedded content usually works. Try ticking the below checkbox."]),e("p",[e("a",{attrs:{href:"https://kb.wprssaggregator.com/article/471-q-why-wont-some-of-my-feed-items-work-with-the-lightbox-link-behaviour-for-templates",target:"_blank"}},["Learn more"])])]):null,e(j,S()([{attrs:{type:"checkbox",label:"Set links to open embeds",value:this.model.options.link_to_embed,title:this.tooltips.options.link_to_embed}},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.link_to_embed=e}).apply(void 0,[e].concat(n))}}}]))]),e(q,{attrs:{id:"template-custom-css",title:"Custom Style",context:this}},[e(j,S()([{attrs:{type:"text",label:"Custom HTML class name",value:this.model.options.custom_css_classname,title:this.tooltips.options.custom_css_classname},class:"form-input--vertical"},{on:{input:function(e){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];(function(e){return t.model.options.custom_css_classname=e}).apply(void 0,[e].concat(n))}}}]))])])])])]);return this.hooks.apply("wpra-templates-form",this,r)}},st=function(t){var e=t.store,i=t.router;return{store:e,data:function(){return{afterNavigate:function(){},params:{},currentRoute:null}},created:function(){i.setApp(this),this.currentRoute=i.parseLocation(window.location),this.navigated()},mounted:function(){var t=this;window.addEventListener("popstate",function(){t.currentRoute=i.parseLocation(window.location),t.navigated()})},methods:{ViewComponent:function(){return i.findRoute(this.currentRoute).component},navigated:function(){var t=this;this.$nextTick(function(){var e=t.$refs.main;e&&e.navigated&&e.navigated({route:i.findRoute(t.currentRoute)})})}},render:function(t){var e=t(this.ViewComponent(),{ref:"main"});return this.afterNavigate(),e}}},lt=function(){function t(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,i,n){return i&&t(e.prototype,i),n&&t(e,n),e}}(),pt=function(t){t||(t=location.href);var e=t.indexOf("?"),i=t.indexOf("#");if(-1==i&&-1==e)return{};-1==i&&(i=t.length);var n=-1==e||i==e+1?t.substring(i):t.substring(e+1,i),o={};return n.split("&").forEach(function(t){if(t){t=t.split("+").join(" ");var e=t.indexOf("="),i=e>-1?t.substr(0,e):t,n=e>-1?decodeURIComponent(t.substr(e+1)):"",a=i.indexOf("[");if(-1==a)o[decodeURIComponent(i)]=n;else{var r=i.indexOf("]",a),s=decodeURIComponent(i.substring(a+1,r));i=decodeURIComponent(i.substring(0,a)),o[i]||(o[i]=[]),s?o[i][s]=n:o[i].push(n)}}}),o},ut=function(){function t(e,i){c(this,t),this.routes=e,this.options=i,this.baseParams=i.baseParams||["post_type","page","action","id"]}return t.prototype.setApp=function(t){this.app=t,this.app.afterNavigate=this.options.afterNavigating||function(){}},t.prototype.findRoute=function(t){return this.routes.find(function(e){var i=e.route;return-1!==t.indexOf(i)})},t.prototype.updateParams=function(t){this.app.$set(this.app,"params",t)},t.prototype.mergeParams=function(t){var e=this,i=Object.keys(this.params).filter(function(i){return-1!==e.baseParams.indexOf(i)||t.hasOwnProperty(i)}).reduce(function(t,i){return t[i]=e.params[i],t},{}),n=Object.assign({},i,t);this.updateParams(n),window.history.pushState(null,null,this.routeFromParams()),this.app.navigated()},t.prototype.routeFromParams=function(){var t=!!Object.keys(this.params).length;return location.pathname+(t?"?"+this.buildParams(this.params):"")},t.prototype.buildRoute=function(t){if(t.name){var e=this.routes.find(function(e){return e.name===t.name});if(!e)return null;var i=e.route,n=-1!==i.indexOf("?")?"&":"?";return i+(t.params?n+this.buildParams(t.params?t.params:{}):"")}},t.prototype.buildParams=function(t){return Object.keys(t).map(function(e){return e+"="+t[e]}).join("&")},t.prototype.parseLocation=function(t){return this.updateParams(pt(t.search)),pt(t.search),t.pathname+t.search},t.prototype.navigate=function(t){this.app&&(this.app.currentRoute=this.buildRoute(t)),this.updateParams(Object.assign({},t.params||{},pt(this.buildRoute(t)))),window.history.pushState(null,null,this.buildRoute(t)),this.app.navigated()},lt(t,[{key:"params",get:function(){return this.app?this.app.params:{}}}]),t}(),ct=ut,dt={set:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];t.isInitialized=!0,t.items=e},updatePreset:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;t.preset=e}},ht={},ft={isInitialized:!1,items:[],preset:{}},mt={item:function(t){return function(e){return U(t.items).find(e)}}},yt={namespaced:!0,mutations:dt,actions:ht,state:ft,getters:mt},vt=function(){function t(e,i){d(this,t),this.showMethod=e,this.errorMethod=i}return t.prototype.show=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.showMethod(t,e)},t.prototype.error=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.errorMethod(t,e)},t}(),bt=vt,gt=i(5),_t={Input:j,NoticeBlock:Y,Postbox:q,RouteLink:C,TransitionExpand:gt.a,Button:X},wt={register:function(t){t.TemplateEdit=function(){return rt},t.TemplateList=function(){return B},t.router=function(t){var e=t.document,i=t.TemplateEdit,n=t.TemplateList;return new ct([{route:WpraGlobal.templates_url_base+"&action",name:"templates-form",component:i},{route:WpraGlobal.templates_url_base,name:"templates",component:n}],{afterNavigating:function(){e.querySelector("html").scrollTop=0}})},t.App=function(t){return st(t)},t.vuex=function(t){return t.vue.use(k.a),k.a},t.notification=function(t){var e=t.vue;return e.use(g.a,{position:"top-center",duration:4e3,iconPack:"callback"}),new bt(e.toasted.show,e.toasted.error)},t.store=function(t){return new t.vuex.Store({modules:{templates:yt},state:{}})},t.http=function(){var t=WpraGlobal&&WpraGlobal.nonce?{headers:{"X-WP-Nonce":WpraGlobal.nonce}}:{};return v.a.create(t)};for(var e=Object.entries(_t),i=Array.isArray(e),n=0,e=i?e:e[Symbol.iterator]();;){var o;if("break"===function(){if(i){if(n>=e.length)return"break";o=e[n++]}else{if(n=e.next(),n.done)return"break";o=n.value}var a=o,r=a[0],s=a[1];t[r]=function(){return s}}())break}return t},run:function(t){t.container.vue.use(w.a,{theme:"light",animation:"fade",arrow:!0,arrowTransform:"scale(0)",placement:"right"})}},kt=i(4);i(41);var xt=h.Container,St=h.Core,At=h.Services;window.UiFramework&&(window.UiFramework=Object.assign({},window.UiFramework,St.UiFramework));var Tt={uiFramework:h,hooks:new At.HookService,document:document,vue:function(t){return kt.a.use(t.uiFramework.Core.InjectedComponents,{container:t}),kt.a}},Ct=new xt.ContainerFactory(m.a),Ot=new St.UiFramework.App(Ct,Tt);window.UiFramework.registerPlugin("templates-app",wt),Ot.use(WpraTemplates.modules||["templates-app"]),Ot.init({"#wpra-templates-app":"App"})},41:function(t,e){},5:function(t,e,i){"use strict";var n={name:"TransitionExpand",functional:!0,render:function(t,e){return t("transition",{props:{name:"expand"},on:{afterEnter:function(t){t.style.height="auto"},enter:function(t){var e=getComputedStyle(t),i=e.width;t.style.width=i,t.style.position="absolute",t.style.visibility="hidden",t.style.height="auto";var n=getComputedStyle(t),o=n.height;t.style.width=null,t.style.position=null,t.style.visibility=null,t.style.height=0,getComputedStyle(t).height,setTimeout(function(){t.style.height=o})},leave:function(t){var e=getComputedStyle(t),i=e.height;t.style.height=i,getComputedStyle(t).height,setTimeout(function(){t.style.height=0})}}},e.children)}},o=n,a=i(1),r=Object(a.a)(o,void 0,void 0,!1,null,null,null);e.a=r.exports},6:function(t,e,i){"use strict";function n(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!navigator.clipboard)return void o(t,e);navigator.clipboard.writeText(t).then(function(){},function(t){console.error("Async: Could not copy text: ",t)})}e.a=n;var o=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;e=e||document.body.parentElement;var i=document.createElement("textarea");i.value=t;var n=e.scrollTop;document.body.appendChild(i),i.focus(),i.select();try{document.execCommand("copy")}catch(t){console.error("Fallback: Oops, unable to copy",t)}document.body.removeChild(i),e.scrollTop=n}}},[40])});
|
js/heartbeat.js
CHANGED
@@ -45,6 +45,9 @@
|
|
45 |
var updatesCol = row.find('td.column-updates');
|
46 |
var itemsCol = row.find('td.column-feed-count');
|
47 |
|
|
|
|
|
|
|
48 |
// Update the next update time
|
49 |
updatesCol.find('code.next-update').text( feed_source['next-update'] );
|
50 |
|
45 |
var updatesCol = row.find('td.column-updates');
|
46 |
var itemsCol = row.find('td.column-feed-count');
|
47 |
|
48 |
+
// Toggle the state checkbox
|
49 |
+
row.find('input.wprss-toggle-feed-state').prop('checked', feed_source['active']);
|
50 |
+
|
51 |
// Update the next update time
|
52 |
updatesCol.find('code.next-update').text( feed_source['next-update'] );
|
53 |
|
readme.txt
CHANGED
@@ -1,29 +1,29 @@
|
|
1 |
-
=== WP RSS Aggregator
|
2 |
Contributors: RebelCode, jeangalea, markzahra, Mekku
|
3 |
Plugin URI: https://www.wprssaggregator.com
|
4 |
-
Tags: RSS import, RSS aggregator,
|
5 |
Requires at least: 4.0 or higher
|
6 |
Tested up to: 5.6
|
7 |
Requires PHP: 5.4
|
8 |
-
Stable tag: 4.
|
9 |
License: GPLv3
|
10 |
|
11 |
-
The most
|
12 |
|
13 |
== Description ==
|
14 |
|
15 |
-
WP RSS Aggregator is the original, most popular
|
16 |
|
17 |
== Automatically import RSS feeds & display them on your site ==
|
18 |
|
19 |
* Import unlimited content from an unlimited number of sites.
|
20 |
-
* Manage all your
|
21 |
-
* Set
|
22 |
* Customise the [display templates](https://kb.wprssaggregator.com/article/457-templates) to match your website's design.
|
23 |
-
* Built-in [shortcode](https://kb.wprssaggregator.com/article/54-how-to-use-the-shortcode-to-display-feed-items) and [
|
24 |
* RSS feed auto-discovery for sources with hard-to-find RSS feeds.
|
25 |
-
* Import
|
26 |
-
* Limit the items stored and fetched for
|
27 |
* Create a custom RSS feed from imported items to use elsewhere.
|
28 |
* Extendable via action and filter hooks.
|
29 |
|
@@ -36,6 +36,7 @@ Importing and displaying RSS feeds is a powerful tool for many website owners.
|
|
36 |
* Aggregator or curate news from the top sources in your market or niche to improve your SEO and build a better reputation.
|
37 |
* Show related content from other reputable sites to build a sense of trust with your readers.
|
38 |
* Since video content has become so popular, link to Youtube videos anywhere on your site to provide visitors with more reasons to stick around.
|
|
|
39 |
* Provide value to your readers by curating job openings, real estate listings, or other information to help them grow.
|
40 |
* Aggregate ever-popular podcast episodes related to the topic of your website to keep visitors engaged.
|
41 |
* Authors, writers, and other content creators, display a feed of your work from multiple sites in a single portfolio.
|
@@ -74,26 +75,28 @@ Find out more... [**Content curation and SEO: What you need to know**](https://w
|
|
74 |
|
75 |
== Premium features ==
|
76 |
|
77 |
-
WP RSS Aggregator can be extended through its powerful [premium add-ons](https://www.wprssaggregator.com/extensions/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_premium_features) and [
|
78 |
|
79 |
-
|
|
|
|
|
80 |
* **[Full Text RSS Feeds](https://www.wprssaggregator.com/extension/full-text-rss-feeds/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_ftr_link&utm_content=ftr_link)** takes Feed to Post to the next level by connecting it to our premium full text service. This helps bring in content from sources that don't provide it in their RSS feeds. It's especially useful when missing certain important images or other content.
|
81 |
-
* **[Templates](https://www.wprssaggregator.com/extension/templates/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_f2p_link&utm_content=f2p_link)** offers premium template types including the fully customisable Grid as well as an Excerpts & Thumbnails template that take your block or shortcode displays to a whole new level.
|
82 |
* **[Keyword Filtering](https://www.wprssaggregator.com/extension/keyword-filtering/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_kf_link&utm_content=kf_link)** enables you to filter the content imported from any source based on keywords, phrases and/or tags.
|
83 |
* **[Categories](https://www.wprssaggregator.com/extension/categories/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_cat_link&utm_content=cat_link)** provides a simple way to categorise your sources and keep them organised.
|
84 |
* **[WordAi](https://www.wprssaggregator.com/extension/wordai/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_cat_link&utm_content=cat_link)** and **[Spinner Chief](https://www.wprssaggregator.com/extension/spinnerchief/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_cat_link&utm_content=cat_link)** integrate the Feed to Post add-on with the respective 3rd-party content spinning services.
|
85 |
|
86 |
-
==
|
87 |
|
88 |
Our comprehensive [Knowledge Base](https://kb.wprssaggregator.com/) provides you with everything you need to install, set up and customise the plugin to your needs. You can also browse through a number of FAQs to get started.
|
89 |
|
90 |
If that doesn't do the trick, we provide support for the free version of WP RSS Aggregator via the support forum [here](https://wordpress.org/support/plugin/wp-rss-aggregator), while for premium support (owners of valid premium add-on licenses) and pre-sales questions please contact us via our [premium support channel](https://www.wprssaggregator.com/contact/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_contact_link&utm_content=contact_link).
|
91 |
|
92 |
-
Our plugin also includes a Help Beacon within your dashboard through which you can search our knowledge base without ever leaving your website.
|
93 |
|
94 |
== Additional information ==
|
95 |
|
96 |
-
We provide a [Feed Creator](http://createfeed.wprssaggregator.com/) service that allows you to generate RSS feeds from any webpage, even if it doesn't have its own RSS feed. It provides inline documentation on how to use the service.
|
97 |
|
98 |
Our terms & conditions can be found [here](https://www.wprssaggregator.com/terms-conditions/).
|
99 |
|
@@ -185,6 +188,12 @@ Check out our dedicated page on [WordPress hosting](https://www.wprssaggregator.
|
|
185 |
|
186 |
- - -
|
187 |
|
|
|
|
|
|
|
|
|
|
|
|
|
188 |
= Does WP RSS Aggregator work using JSON as the source? =
|
189 |
|
190 |
No, our plugin does not currently import from JSON, it only imports from RSS and Atom structured XML.
|
@@ -205,9 +214,9 @@ If the problems persist, please [contact our support team](https://wordpress.org
|
|
205 |
|
206 |
- - -
|
207 |
|
208 |
-
= Can I store imported feed items as
|
209 |
|
210 |
-
Yes, you can do that using the [Feed to Post](http://www.wprssaggregator.com/extensions/feed-to-post) premium add-on. You will not only be able to store items as posts, but as any post type. You can also set the author, set tags and categories, import images into the gallery or set featured images, and much more. These can then be displayed in your theme's blog page, via a page builder, etc.
|
211 |
|
212 |
- - -
|
213 |
|
@@ -217,14 +226,6 @@ Yes, along with the [Feed to Post](http://www.wprssaggregator.com/extensions/fee
|
|
217 |
|
218 |
- - -
|
219 |
|
220 |
-
= I'm not sure which premium add-ons are right for me. Can you help me out? =
|
221 |
-
|
222 |
-
Sure! We built an [add-on finder (guide)](https://www.wprssaggregator.com/add-on-finder/) that will help determine what you need.
|
223 |
-
|
224 |
-
If you need any further help you can [contact our support team](http://www.wprssaggregator.com/contact/).
|
225 |
-
|
226 |
-
- - -
|
227 |
-
|
228 |
= Where can I find the documentation for the plugin? =
|
229 |
|
230 |
Our complete Knowledge Base with FAQs can be found [here](https://kb.wprssaggregator.com/).
|
@@ -253,6 +254,22 @@ Our complete Knowledge Base with FAQs can be found [here](https://kb.wprssaggreg
|
|
253 |
|
254 |
== Changelog ==
|
255 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
256 |
= 4.17.10 (2020-12-01) =
|
257 |
**Fixed**
|
258 |
- After updating the Templates add-on from v0.2, the add-on would be deactivated.
|
1 |
+
=== WP RSS Aggregator – News Feeds, Autoblogging, Youtube Video Feeds and More ===
|
2 |
Contributors: RebelCode, jeangalea, markzahra, Mekku
|
3 |
Plugin URI: https://www.wprssaggregator.com
|
4 |
+
Tags: RSS import, RSS aggregator, autoblog, feed to post, news aggregator, rss to post, content curation, feed import, content syndication, rss feeds, podcast feed, youtube
|
5 |
Requires at least: 4.0 or higher
|
6 |
Tested up to: 5.6
|
7 |
Requires PHP: 5.4
|
8 |
+
Stable tag: 4.18
|
9 |
License: GPLv3
|
10 |
|
11 |
+
The most powerful and reliable RSS aggregator for WordPress. Build a news aggregator, autoblog and more in minutes with unlimited RSS feeds.
|
12 |
|
13 |
== Description ==
|
14 |
|
15 |
+
WP RSS Aggregator is the original, most popular and most robust plugin for importing, merging, and displaying RSS feeds and Atom feeds anywhere on your site. Set up your RSS feed sources and let the plugin do the leg-work.
|
16 |
|
17 |
== Automatically import RSS feeds & display them on your site ==
|
18 |
|
19 |
* Import unlimited content from an unlimited number of sites.
|
20 |
+
* Manage all your RSS feed sources from a single page.
|
21 |
+
* Set all RSS feeds to fetch new content automatically.
|
22 |
* Customise the [display templates](https://kb.wprssaggregator.com/article/457-templates) to match your website's design.
|
23 |
+
* Built-in [shortcode](https://kb.wprssaggregator.com/article/54-how-to-use-the-shortcode-to-display-feed-items) and [block](https://kb.wprssaggregator.com/article/454-displaying-imported-items-block-gutenberg) to display your feeds in seconds.
|
24 |
* RSS feed auto-discovery for sources with hard-to-find RSS feeds.
|
25 |
+
* Import and display playable Youtube videos on your site.
|
26 |
+
* Limit the RSS feed items stored and fetched for better performance.
|
27 |
* Create a custom RSS feed from imported items to use elsewhere.
|
28 |
* Extendable via action and filter hooks.
|
29 |
|
36 |
* Aggregator or curate news from the top sources in your market or niche to improve your SEO and build a better reputation.
|
37 |
* Show related content from other reputable sites to build a sense of trust with your readers.
|
38 |
* Since video content has become so popular, link to Youtube videos anywhere on your site to provide visitors with more reasons to stick around.
|
39 |
+
* Share podcast feeds with your readers to make the most of audio content.
|
40 |
* Provide value to your readers by curating job openings, real estate listings, or other information to help them grow.
|
41 |
* Aggregate ever-popular podcast episodes related to the topic of your website to keep visitors engaged.
|
42 |
* Authors, writers, and other content creators, display a feed of your work from multiple sites in a single portfolio.
|
75 |
|
76 |
== Premium features ==
|
77 |
|
78 |
+
WP RSS Aggregator can be extended through its powerful [premium add-ons](https://www.wprssaggregator.com/extensions/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_premium_features) and [bundled plans](https://www.wprssaggregator.com/pricing/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_premium).
|
79 |
|
80 |
+
The most popular add-ons are always Feed to Post and Full Text RSS feeds, giving you the option to create any sort of feed you can imagine anywhere on your site. They are part of our most popular premium option, the [**Pro Plan**](https://www.wprssaggregator.com/pricing/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_premium_pro).
|
81 |
+
|
82 |
+
* **[Feed to Post](https://www.wprssaggregator.com/extension/feed-to-post/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_f2p_link&utm_content=f2p_link)** is the most powerful add-on available, enabling you to import RSS feeds into WordPress Posts or any other custom post type. It includes options such as automatically assigning a post type, post status, categories, tags, images, audio players (ideal for podcasts), authors, and more.
|
83 |
* **[Full Text RSS Feeds](https://www.wprssaggregator.com/extension/full-text-rss-feeds/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_ftr_link&utm_content=ftr_link)** takes Feed to Post to the next level by connecting it to our premium full text service. This helps bring in content from sources that don't provide it in their RSS feeds. It's especially useful when missing certain important images or other content.
|
84 |
+
* **[Templates](https://www.wprssaggregator.com/extension/templates/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_f2p_link&utm_content=f2p_link)** offers premium template types including the fully customisable Grid as well as an Excerpts & Thumbnails template that take your block or shortcode displays to a whole new level with images, excerpts, and even an audio player for podcasts, music and more.
|
85 |
* **[Keyword Filtering](https://www.wprssaggregator.com/extension/keyword-filtering/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_kf_link&utm_content=kf_link)** enables you to filter the content imported from any source based on keywords, phrases and/or tags.
|
86 |
* **[Categories](https://www.wprssaggregator.com/extension/categories/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_cat_link&utm_content=cat_link)** provides a simple way to categorise your sources and keep them organised.
|
87 |
* **[WordAi](https://www.wprssaggregator.com/extension/wordai/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_cat_link&utm_content=cat_link)** and **[Spinner Chief](https://www.wprssaggregator.com/extension/spinnerchief/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_cat_link&utm_content=cat_link)** integrate the Feed to Post add-on with the respective 3rd-party content spinning services.
|
88 |
|
89 |
+
== Top-notch support ==
|
90 |
|
91 |
Our comprehensive [Knowledge Base](https://kb.wprssaggregator.com/) provides you with everything you need to install, set up and customise the plugin to your needs. You can also browse through a number of FAQs to get started.
|
92 |
|
93 |
If that doesn't do the trick, we provide support for the free version of WP RSS Aggregator via the support forum [here](https://wordpress.org/support/plugin/wp-rss-aggregator), while for premium support (owners of valid premium add-on licenses) and pre-sales questions please contact us via our [premium support channel](https://www.wprssaggregator.com/contact/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_contact_link&utm_content=contact_link).
|
94 |
|
95 |
+
Our plugin also includes a Help Beacon within your website's dashboard through which you can search our knowledge base without ever leaving your website.
|
96 |
|
97 |
== Additional information ==
|
98 |
|
99 |
+
We provide a [Feed Creator](http://createfeed.wprssaggregator.com/) service that allows you to generate full text RSS feeds from any webpage, even if it doesn't have its own RSS feed. It provides inline documentation on how to use the service.
|
100 |
|
101 |
Our terms & conditions can be found [here](https://www.wprssaggregator.com/terms-conditions/).
|
102 |
|
188 |
|
189 |
- - -
|
190 |
|
191 |
+
= Can I import the full text from any source site? =
|
192 |
+
|
193 |
+
In the majority of cases, this possible using our Feed to Post and Full Text RSS feeds add-ons, both of which are part of our most popular bundle, the [Pro Plan](https://www.wprssaggregator.com/pricing/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_fulltextfaq).
|
194 |
+
|
195 |
+
- - -
|
196 |
+
|
197 |
= Does WP RSS Aggregator work using JSON as the source? =
|
198 |
|
199 |
No, our plugin does not currently import from JSON, it only imports from RSS and Atom structured XML.
|
214 |
|
215 |
- - -
|
216 |
|
217 |
+
= Can I store imported feed items as Posts? =
|
218 |
|
219 |
+
Yes, you can do that using the [Feed to Post](http://www.wprssaggregator.com/extensions/feed-to-post/) premium add-on. You will not only be able to store items as posts, but as any post type. You can also set the author, set tags and categories, import images into the gallery or set featured images, and much more. These can then be displayed in your theme's blog page, via a page builder, etc. Add [Full Text RSS Feeds](http://www.wprssaggregator.com/extensions/full-text-rss-feeds/) into the mix for the most powerful combination of add-ons.
|
220 |
|
221 |
- - -
|
222 |
|
226 |
|
227 |
- - -
|
228 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
229 |
= Where can I find the documentation for the plugin? =
|
230 |
|
231 |
Our complete Knowledge Base with FAQs can be found [here](https://kb.wprssaggregator.com/).
|
254 |
|
255 |
== Changelog ==
|
256 |
|
257 |
+
= 4.18 (2021-03-08) =
|
258 |
+
**Added**
|
259 |
+
- The total import time is now recorded in the debug log.
|
260 |
+
|
261 |
+
**Changed**
|
262 |
+
- Omitting dev files from the plugin, reducing its size.
|
263 |
+
- Redesigned the "More Features" page.
|
264 |
+
- Feed items link to the original article when shown without a template and in RSS feeds.
|
265 |
+
- Allocating more PHP execution time for image downloads.
|
266 |
+
|
267 |
+
**Fixed**
|
268 |
+
- Images with HTML entities in the URL resulted in broken images and missing featured images.
|
269 |
+
- The code that checks when a feed is saved no longer runs unnecessarily.
|
270 |
+
- Fixed styling issues with the "Save" button in the Templates edit page.
|
271 |
+
- The max title length option in the "Default" template was being applied in the "Feed Items" page.
|
272 |
+
|
273 |
= 4.17.10 (2020-12-01) =
|
274 |
**Fixed**
|
275 |
- After updating the Templates add-on from v0.2, the add-on would be deactivated.
|
src/Container/ModuleContainer.php
CHANGED
@@ -62,17 +62,26 @@ class ModuleContainer implements ContainerInterface
|
|
62 |
*/
|
63 |
public function get($id)
|
64 |
{
|
|
|
|
|
65 |
// If no definition for the given ID, throw an exception
|
66 |
if (!$this->has($id)) {
|
|
|
67 |
throw new NotFoundException(
|
68 |
-
sprintf(__('Service "%s" was not found', 'wprss'), $id)
|
69 |
);
|
70 |
}
|
71 |
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
}
|
77 |
|
78 |
return $this->cache[$id];
|
62 |
*/
|
63 |
public function get($id)
|
64 |
{
|
65 |
+
static $stack = [];
|
66 |
+
|
67 |
// If no definition for the given ID, throw an exception
|
68 |
if (!$this->has($id)) {
|
69 |
+
$stackStr = implode("\n", $stack);
|
70 |
throw new NotFoundException(
|
71 |
+
sprintf(__('Service "%s" was not found; stack: %s', 'wprss'), $id, "\n$stackStr")
|
72 |
);
|
73 |
}
|
74 |
|
75 |
+
$stack[] = $id;
|
76 |
+
|
77 |
+
try {
|
78 |
+
// Invoke the definition and save the service in cache, if needed
|
79 |
+
if (!array_key_exists($id, $this->cache)) {
|
80 |
+
$container = ($this->proxy === null) ? $this : $this->proxy;
|
81 |
+
$this->cache[$id] = call_user_func_array($this->definitions[$id], [$container]);
|
82 |
+
}
|
83 |
+
} finally {
|
84 |
+
array_pop($stack);
|
85 |
}
|
86 |
|
87 |
return $this->cache[$id];
|
src/Handlers/FeedSources/FeedSourceSaveMetaHandler.php
CHANGED
@@ -12,6 +12,13 @@ use WP_Post;
|
|
12 |
*/
|
13 |
class FeedSourceSaveMetaHandler
|
14 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
/**
|
16 |
* @since [*some-version*]
|
17 |
*
|
@@ -31,10 +38,12 @@ class FeedSourceSaveMetaHandler
|
|
31 |
*
|
32 |
* @since [*some-version*]
|
33 |
*
|
|
|
34 |
* @param CollectionInterface $collection The feed sources collection.
|
35 |
*/
|
36 |
-
public function __construct(CollectionInterface $collection)
|
37 |
{
|
|
|
38 |
$this->collection = $collection;
|
39 |
$this->locked = false;
|
40 |
}
|
@@ -44,8 +53,20 @@ class FeedSourceSaveMetaHandler
|
|
44 |
*
|
45 |
* @since 4.14
|
46 |
*/
|
47 |
-
public function __invoke($postId,
|
48 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
// If the handler is locked (already running), stop to prevent an infinite loop
|
50 |
if ($this->locked) {
|
51 |
return;
|
@@ -62,14 +83,6 @@ class FeedSourceSaveMetaHandler
|
|
62 |
return;
|
63 |
}
|
64 |
|
65 |
-
// Get the post type object.
|
66 |
-
$post_type = get_post_type_object($post->post_type);
|
67 |
-
|
68 |
-
// Check if a revision. If so, stop
|
69 |
-
if ($post->post_type === 'revision') {
|
70 |
-
return;
|
71 |
-
}
|
72 |
-
|
73 |
// Check if the current user has permission to edit the post.
|
74 |
if (!current_user_can($post_type->cap->edit_post, $postId)) {
|
75 |
return;
|
12 |
*/
|
13 |
class FeedSourceSaveMetaHandler
|
14 |
{
|
15 |
+
/**
|
16 |
+
* @since 4.18
|
17 |
+
*
|
18 |
+
* @var string
|
19 |
+
*/
|
20 |
+
protected $postType;
|
21 |
+
|
22 |
/**
|
23 |
* @since [*some-version*]
|
24 |
*
|
38 |
*
|
39 |
* @since [*some-version*]
|
40 |
*
|
41 |
+
* @param string $postType The feed source post type.
|
42 |
* @param CollectionInterface $collection The feed sources collection.
|
43 |
*/
|
44 |
+
public function __construct($postType, CollectionInterface $collection)
|
45 |
{
|
46 |
+
$this->postType = $postType;
|
47 |
$this->collection = $collection;
|
48 |
$this->locked = false;
|
49 |
}
|
53 |
*
|
54 |
* @since 4.14
|
55 |
*/
|
56 |
+
public function __invoke($postId, $post)
|
57 |
{
|
58 |
+
if (!($post instanceof WP_Post)) {
|
59 |
+
return;
|
60 |
+
}
|
61 |
+
|
62 |
+
// Get the post type object.
|
63 |
+
$post_type = get_post_type_object($post->post_type);
|
64 |
+
|
65 |
+
// Check if a valid post type
|
66 |
+
if ($post->post_type !== $this->postType) {
|
67 |
+
return;
|
68 |
+
}
|
69 |
+
|
70 |
// If the handler is locked (already running), stop to prevent an infinite loop
|
71 |
if ($this->locked) {
|
72 |
return;
|
83 |
return;
|
84 |
}
|
85 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
// Check if the current user has permission to edit the post.
|
87 |
if (!current_user_can($post_type->cap->edit_post, $postId)) {
|
88 |
return;
|
src/Modules/FeedItemsModule.php
CHANGED
@@ -50,6 +50,12 @@ class FeedItemsModule implements ModuleInterface
|
|
50 |
new WpPostPermalinkProperty($idProp)
|
51 |
);
|
52 |
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
return [
|
54 |
'id' => $idProp,
|
55 |
'title' => new Property('post_title'),
|
@@ -57,7 +63,8 @@ class FeedItemsModule implements ModuleInterface
|
|
57 |
'excerpt' => new DefaultingProperty(['post_excerpt', 'post_content']),
|
58 |
'url' => $urlProp,
|
59 |
'permalink' => $urlProp,
|
60 |
-
'enclosure' =>
|
|
|
61 |
'author' => new Property('wprss_item_author'),
|
62 |
'date' => new Property('wprss_item_date'),
|
63 |
'timestamp' => new TimestampProperty(new Property('post_date_gmt'), 'Y-m-d H:i:s'),
|
@@ -69,6 +76,7 @@ class FeedItemsModule implements ModuleInterface
|
|
69 |
'embed_url' => new Property('wprss_item_embed_url'),
|
70 |
'is_yt' => new Property('wprss_item_is_yt'),
|
71 |
'yt_embed_url' => new Property('wprss_item_yt_embed_url'),
|
|
|
72 |
'source_id' => new Property('wprss_feed_id'),
|
73 |
'source_name' => new WpraItemSourceProperty(
|
74 |
new Property('wprss_item_source_name'),
|
@@ -256,5 +264,12 @@ class FeedItemsModule implements ModuleInterface
|
|
256 |
{
|
257 |
add_action('init', $c->get('wpra/feeds/items/handlers/register_cpt'));
|
258 |
add_action('admin_init', $c->get('wpra/feeds/items/handlers/add_cpt_capabilities'));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
259 |
}
|
260 |
}
|
50 |
new WpPostPermalinkProperty($idProp)
|
51 |
);
|
52 |
|
53 |
+
$enclosureProp = new WpraPostTypeDependentProperty(
|
54 |
+
$idProp,
|
55 |
+
new Property('wprss_item_enclosure'),
|
56 |
+
new Property('wprss_ftp_enclosure_link')
|
57 |
+
);
|
58 |
+
|
59 |
return [
|
60 |
'id' => $idProp,
|
61 |
'title' => new Property('post_title'),
|
63 |
'excerpt' => new DefaultingProperty(['post_excerpt', 'post_content']),
|
64 |
'url' => $urlProp,
|
65 |
'permalink' => $urlProp,
|
66 |
+
'enclosure' => $enclosureProp,
|
67 |
+
'enclosure_type' => new Property('wprss_item_enclosure_type'),
|
68 |
'author' => new Property('wprss_item_author'),
|
69 |
'date' => new Property('wprss_item_date'),
|
70 |
'timestamp' => new TimestampProperty(new Property('post_date_gmt'), 'Y-m-d H:i:s'),
|
76 |
'embed_url' => new Property('wprss_item_embed_url'),
|
77 |
'is_yt' => new Property('wprss_item_is_yt'),
|
78 |
'yt_embed_url' => new Property('wprss_item_yt_embed_url'),
|
79 |
+
'audio_url' => new Property('wprss_item_audio'),
|
80 |
'source_id' => new Property('wprss_feed_id'),
|
81 |
'source_name' => new WpraItemSourceProperty(
|
82 |
new Property('wprss_item_source_name'),
|
264 |
{
|
265 |
add_action('init', $c->get('wpra/feeds/items/handlers/register_cpt'));
|
266 |
add_action('admin_init', $c->get('wpra/feeds/items/handlers/add_cpt_capabilities'));
|
267 |
+
|
268 |
+
// Set the public permalink of feed items to be equal to the URL to the original article
|
269 |
+
add_filter('post_type_link', function($url, $post) {
|
270 |
+
return (get_post_type($post->ID) === 'wprss_feed_item')
|
271 |
+
? get_post_meta($post->ID, 'wprss_item_permalink', true)
|
272 |
+
: $url;
|
273 |
+
}, 10, 2);
|
274 |
}
|
275 |
}
|
src/Modules/FeedSourcesModule.php
CHANGED
@@ -342,6 +342,7 @@ class FeedSourcesModule implements ModuleInterface
|
|
342 |
*/
|
343 |
'wpra/feeds/sources/meta_box/save_handler' => function (ContainerInterface $c) {
|
344 |
return new FeedSourceSaveMetaHandler(
|
|
|
345 |
$c->get('wpra/feeds/sources/collection')
|
346 |
);
|
347 |
},
|
@@ -359,7 +360,7 @@ class FeedSourcesModule implements ModuleInterface
|
|
359 |
/*
|
360 |
* Extends the list of REST API endpoints to register the feed sources endpoints.
|
361 |
*
|
362 |
-
* @since
|
363 |
*/
|
364 |
'wpra/rest_api/v1/endpoints' => function (ContainerInterface $c, $endpoints) {
|
365 |
$endpoints['get_sources'] = new EndPoint(
|
342 |
*/
|
343 |
'wpra/feeds/sources/meta_box/save_handler' => function (ContainerInterface $c) {
|
344 |
return new FeedSourceSaveMetaHandler(
|
345 |
+
$c->get('wpra/feeds/sources/cpt/name'),
|
346 |
$c->get('wpra/feeds/sources/collection')
|
347 |
);
|
348 |
},
|
360 |
/*
|
361 |
* Extends the list of REST API endpoints to register the feed sources endpoints.
|
362 |
*
|
363 |
+
* @since 4.18
|
364 |
*/
|
365 |
'wpra/rest_api/v1/endpoints' => function (ContainerInterface $c, $endpoints) {
|
366 |
$endpoints['get_sources'] = new EndPoint(
|
src/Modules/FeedTemplatesModule.php
CHANGED
@@ -447,6 +447,7 @@ class FeedTemplatesModule implements ModuleInterface
|
|
447 |
'bullets_enabled' => true,
|
448 |
'bullet_type' => 'default',
|
449 |
'custom_css_classname' => '',
|
|
|
450 |
],
|
451 |
];
|
452 |
},
|
@@ -480,6 +481,7 @@ class FeedTemplatesModule implements ModuleInterface
|
|
480 |
'bullets_enabled' => __('Enable this option to show bullets next to feed items.', 'wprss'),
|
481 |
'bullet_type' => __('The bullet type to use for feed items.', 'wprss'),
|
482 |
'custom_css_classname' => __('You can add your own HTML class name to the template output. This lets you customize your template further using custom CSS styling or custom JS functionality.'),
|
|
|
483 |
],
|
484 |
];
|
485 |
},
|
@@ -587,6 +589,14 @@ class FeedTemplatesModule implements ModuleInterface
|
|
587 |
|
588 |
return $script;
|
589 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
590 |
/*
|
591 |
* The state for the templates script.
|
592 |
*
|
@@ -599,6 +609,7 @@ class FeedTemplatesModule implements ModuleInterface
|
|
599 |
'options' => $c->get('wpra/feeds/templates/template_options'),
|
600 |
'modules' => $c->get('wpra/feeds/templates/admin/js_modules'),
|
601 |
'base_url' => rest_url('/wpra/v1/templates'),
|
|
|
602 |
];
|
603 |
},
|
604 |
/*
|
447 |
'bullets_enabled' => true,
|
448 |
'bullet_type' => 'default',
|
449 |
'custom_css_classname' => '',
|
450 |
+
'audio_player_enabled' => false,
|
451 |
],
|
452 |
];
|
453 |
},
|
481 |
'bullets_enabled' => __('Enable this option to show bullets next to feed items.', 'wprss'),
|
482 |
'bullet_type' => __('The bullet type to use for feed items.', 'wprss'),
|
483 |
'custom_css_classname' => __('You can add your own HTML class name to the template output. This lets you customize your template further using custom CSS styling or custom JS functionality.'),
|
484 |
+
'audio_player_enabled' => __('If the feed item or post has an audio attachment, you can choose to show an audio player that plays the attached audio file.'),
|
485 |
],
|
486 |
];
|
487 |
},
|
589 |
|
590 |
return $script;
|
591 |
},
|
592 |
+
/*
|
593 |
+
* Whether audio features are enabled.
|
594 |
+
*
|
595 |
+
* @since 4.18
|
596 |
+
*/
|
597 |
+
'wpra/feeds/templates/audio_features_enabled' => function () {
|
598 |
+
return false;
|
599 |
+
},
|
600 |
/*
|
601 |
* The state for the templates script.
|
602 |
*
|
609 |
'options' => $c->get('wpra/feeds/templates/template_options'),
|
610 |
'modules' => $c->get('wpra/feeds/templates/admin/js_modules'),
|
611 |
'base_url' => rest_url('/wpra/v1/templates'),
|
612 |
+
'audio_features_enabled' => $c->get('wpra/feeds/templates/audio_features_enabled'),
|
613 |
];
|
614 |
},
|
615 |
/*
|
src/Query/DbQuery.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace RebelCode\Wpra\Core\Query;
|
4 |
+
|
5 |
+
class DbQuery
|
6 |
+
{
|
7 |
+
public $args;
|
8 |
+
|
9 |
+
public function __construct($args = [])
|
10 |
+
{
|
11 |
+
$this->args = array_merge(self::defaults(), $args);
|
12 |
+
}
|
13 |
+
|
14 |
+
public static function create(array $args = [])
|
15 |
+
{
|
16 |
+
return new self($args);
|
17 |
+
}
|
18 |
+
|
19 |
+
public static function defaults()
|
20 |
+
{
|
21 |
+
return [
|
22 |
+
'post_type' => 'any',
|
23 |
+
'post_status' => 'any',
|
24 |
+
'posts_per_page' => -1,
|
25 |
+
'suppress_filters' => true,
|
26 |
+
'cache_results' => false,
|
27 |
+
'no_found_rows' => true,
|
28 |
+
'ignore_sticky_posts' => true,
|
29 |
+
];
|
30 |
+
}
|
31 |
+
}
|
src/Templates/Feeds/Types/ListTemplateType.php
CHANGED
@@ -135,6 +135,10 @@ class ListTemplateType extends AbstractWpraFeedTemplateType
|
|
135 |
'options' => ['default', 'numbers'],
|
136 |
'default' => 'default',
|
137 |
],
|
|
|
|
|
|
|
|
|
138 |
];
|
139 |
}
|
140 |
}
|
135 |
'options' => ['default', 'numbers'],
|
136 |
'default' => 'default',
|
137 |
],
|
138 |
+
'audio_player_enabled' => [
|
139 |
+
'filter' => FILTER_VALIDATE_BOOLEAN,
|
140 |
+
'default' => false,
|
141 |
+
]
|
142 |
];
|
143 |
}
|
144 |
}
|
src/Twig/Extensions/WpraExtension.php
CHANGED
@@ -45,6 +45,7 @@ class WpraExtension extends AbstractExtension
|
|
45 |
$this->getWpraTooltipFunction(),
|
46 |
$this->getHtmlEntitiesDecodeFunction(),
|
47 |
$this->getWpraItemUrlFunction(),
|
|
|
48 |
];
|
49 |
}
|
50 |
|
@@ -163,10 +164,22 @@ class WpraExtension extends AbstractExtension
|
|
163 |
];
|
164 |
|
165 |
return new TwigFunction($name, function ($url, $options, $className = '') {
|
166 |
-
return
|
167 |
}, $options);
|
168 |
}
|
169 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
170 |
/**
|
171 |
* Retrieves the "wpra_word_limit" Twig filter.
|
172 |
*
|
45 |
$this->getWpraTooltipFunction(),
|
46 |
$this->getHtmlEntitiesDecodeFunction(),
|
47 |
$this->getWpraItemUrlFunction(),
|
48 |
+
$this->getWpraIsAudioFunction(),
|
49 |
];
|
50 |
}
|
51 |
|
164 |
];
|
165 |
|
166 |
return new TwigFunction($name, function ($url, $options, $className = '') {
|
167 |
+
return ' ' . $this->prepareLinkAttrs($url, $options, $className);
|
168 |
}, $options);
|
169 |
}
|
170 |
|
171 |
+
/**
|
172 |
+
* Retrieves the "wpra_is_audio_url" Twig function.
|
173 |
+
*
|
174 |
+
* @since 4.18
|
175 |
+
*
|
176 |
+
* @return TwigFunction The function instance.
|
177 |
+
*/
|
178 |
+
protected function getWpraIsAudioFunction()
|
179 |
+
{
|
180 |
+
return new TwigFunction('wpra_is_audio_url', 'wpra_is_audio_file');
|
181 |
+
}
|
182 |
+
|
183 |
/**
|
184 |
* Retrieves the "wpra_word_limit" Twig filter.
|
185 |
*
|
templates/admin/upsell/more-features-page/main.twig
CHANGED
@@ -13,9 +13,67 @@
|
|
13 |
|
14 |
<div id="add-ons" class="clearfix">
|
15 |
<div class="add-on-group clearfix">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
{% for item in items %}
|
17 |
{{ include('admin/upsell/more-features-page/' ~ item.type ~ '.twig') }}
|
18 |
{% endfor %}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
</div>
|
20 |
</div>
|
21 |
</div>
|
13 |
|
14 |
<div id="add-ons" class="clearfix">
|
15 |
<div class="add-on-group clearfix">
|
16 |
+
|
17 |
+
{# PRO PLAN #}
|
18 |
+
<div class="add-on wp-box bundle-plan">
|
19 |
+
<span class="corner-ribbon">Most Popular</span>
|
20 |
+
<div class="inner">
|
21 |
+
<h3>Pro Plan</h3>
|
22 |
+
<p>A discounted bundle including:</p>
|
23 |
+
<ul>
|
24 |
+
<li>Feed to Post</li>
|
25 |
+
<li>Full Text RSS Feeds</li>
|
26 |
+
<li>Templates</li>
|
27 |
+
<li>Keyword Filtering</li>
|
28 |
+
<li>Source Categories</li>
|
29 |
+
</ul>
|
30 |
+
</div>
|
31 |
+
<div class="footer">
|
32 |
+
<a class="button button-secondary" href="https://wprssaggregator.com/pricing">
|
33 |
+
See Pricing
|
34 |
+
</a>
|
35 |
+
</div>
|
36 |
+
</div>
|
37 |
+
|
38 |
+
{# BASIC PLAN #}
|
39 |
+
<div class="add-on bundle-plan">
|
40 |
+
<div class="inner">
|
41 |
+
<h3>Basic Plan</h3>
|
42 |
+
<p>A discounted bundle including:</p>
|
43 |
+
<ul>
|
44 |
+
<li>Templates</li>
|
45 |
+
<li>Keyword Filtering</li>
|
46 |
+
<li>Source Categories</li>
|
47 |
+
</ul>
|
48 |
+
</div>
|
49 |
+
<div class="footer">
|
50 |
+
<a class="button button-secondary" href="https://wprssaggregator.com/pricing">
|
51 |
+
See Pricing
|
52 |
+
</a>
|
53 |
+
</div>
|
54 |
+
</div>
|
55 |
+
|
56 |
+
{# ADD_ONS #}
|
57 |
{% for item in items %}
|
58 |
{{ include('admin/upsell/more-features-page/' ~ item.type ~ '.twig') }}
|
59 |
{% endfor %}
|
60 |
+
|
61 |
+
{# SPOTLIGHT #}
|
62 |
+
<div class="add-on spotlight">
|
63 |
+
<span class="corner-ribbon">NEW</span>
|
64 |
+
<div class="inner">
|
65 |
+
<h3>Instagram Feeds</h3>
|
66 |
+
<p>
|
67 |
+
Spotlight, a sister-product of WP RSS Aggregator, is the best and simplest way of adding
|
68 |
+
Instagram feeds anywhere on your site in under 2 minutes.
|
69 |
+
</p>
|
70 |
+
</div>
|
71 |
+
<div class="footer">
|
72 |
+
<a class="button button-secondary" href="https://spotlightwp.com">
|
73 |
+
Try Spotlight
|
74 |
+
</a>
|
75 |
+
</div>
|
76 |
+
</div>
|
77 |
</div>
|
78 |
</div>
|
79 |
</div>
|
templates/feeds/_parts/audio-player.twig
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{% set audio_url = item.audio_url ? item.audio_url : item.enclosure %}
|
2 |
+
{% set is_audio = wpra_is_audio_url(audio_url) %}
|
3 |
+
|
4 |
+
{% if options.audio_player_enabled and is_audio %}
|
5 |
+
<div class="wpra-feed-audio">
|
6 |
+
<audio controls>
|
7 |
+
<source src="{{ audio_url }}" type="{{ item.enclosure_type }}" />
|
8 |
+
Your browser does not support HTML5 audio players.
|
9 |
+
</audio>
|
10 |
+
</div>
|
11 |
+
{% endif %}
|
templates/feeds/list/feed-item.twig
CHANGED
@@ -50,3 +50,5 @@
|
|
50 |
</span>
|
51 |
{% endif %}
|
52 |
</div>
|
|
|
|
50 |
</span>
|
51 |
{% endif %}
|
52 |
</div>
|
53 |
+
|
54 |
+
{% include "feeds/_parts/audio-player.twig" %}
|
vendor/composer/ClassLoader.php
CHANGED
@@ -37,11 +37,13 @@ namespace Composer\Autoload;
|
|
37 |
*
|
38 |
* @author Fabien Potencier <fabien@symfony.com>
|
39 |
* @author Jordi Boggiano <j.boggiano@seld.be>
|
40 |
-
* @see
|
41 |
-
* @see
|
42 |
*/
|
43 |
class ClassLoader
|
44 |
{
|
|
|
|
|
45 |
// PSR-4
|
46 |
private $prefixLengthsPsr4 = array();
|
47 |
private $prefixDirsPsr4 = array();
|
@@ -57,6 +59,13 @@ class ClassLoader
|
|
57 |
private $missingClasses = array();
|
58 |
private $apcuPrefix;
|
59 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
public function getPrefixes()
|
61 |
{
|
62 |
if (!empty($this->prefixesPsr0)) {
|
@@ -300,6 +309,15 @@ class ClassLoader
|
|
300 |
public function register($prepend = false)
|
301 |
{
|
302 |
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
303 |
}
|
304 |
|
305 |
/**
|
@@ -308,6 +326,10 @@ class ClassLoader
|
|
308 |
public function unregister()
|
309 |
{
|
310 |
spl_autoload_unregister(array($this, 'loadClass'));
|
|
|
|
|
|
|
|
|
311 |
}
|
312 |
|
313 |
/**
|
@@ -367,6 +389,16 @@ class ClassLoader
|
|
367 |
return $file;
|
368 |
}
|
369 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
370 |
private function findFileWithExtension($class, $ext)
|
371 |
{
|
372 |
// PSR-4 lookup
|
37 |
*
|
38 |
* @author Fabien Potencier <fabien@symfony.com>
|
39 |
* @author Jordi Boggiano <j.boggiano@seld.be>
|
40 |
+
* @see https://www.php-fig.org/psr/psr-0/
|
41 |
+
* @see https://www.php-fig.org/psr/psr-4/
|
42 |
*/
|
43 |
class ClassLoader
|
44 |
{
|
45 |
+
private $vendorDir;
|
46 |
+
|
47 |
// PSR-4
|
48 |
private $prefixLengthsPsr4 = array();
|
49 |
private $prefixDirsPsr4 = array();
|
59 |
private $missingClasses = array();
|
60 |
private $apcuPrefix;
|
61 |
|
62 |
+
private static $registeredLoaders = array();
|
63 |
+
|
64 |
+
public function __construct($vendorDir = null)
|
65 |
+
{
|
66 |
+
$this->vendorDir = $vendorDir;
|
67 |
+
}
|
68 |
+
|
69 |
public function getPrefixes()
|
70 |
{
|
71 |
if (!empty($this->prefixesPsr0)) {
|
309 |
public function register($prepend = false)
|
310 |
{
|
311 |
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
312 |
+
|
313 |
+
if (null === $this->vendorDir) {
|
314 |
+
//no-op
|
315 |
+
} elseif ($prepend) {
|
316 |
+
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
|
317 |
+
} else {
|
318 |
+
unset(self::$registeredLoaders[$this->vendorDir]);
|
319 |
+
self::$registeredLoaders[$this->vendorDir] = $this;
|
320 |
+
}
|
321 |
}
|
322 |
|
323 |
/**
|
326 |
public function unregister()
|
327 |
{
|
328 |
spl_autoload_unregister(array($this, 'loadClass'));
|
329 |
+
|
330 |
+
if (null !== $this->vendorDir) {
|
331 |
+
unset(self::$registeredLoaders[$this->vendorDir]);
|
332 |
+
}
|
333 |
}
|
334 |
|
335 |
/**
|
389 |
return $file;
|
390 |
}
|
391 |
|
392 |
+
/**
|
393 |
+
* Returns the currently registered loaders indexed by their corresponding vendor directories.
|
394 |
+
*
|
395 |
+
* @return self[]
|
396 |
+
*/
|
397 |
+
public static function getRegisteredLoaders()
|
398 |
+
{
|
399 |
+
return self::$registeredLoaders;
|
400 |
+
}
|
401 |
+
|
402 |
private function findFileWithExtension($class, $ext)
|
403 |
{
|
404 |
// PSR-4 lookup
|
vendor/composer/InstalledVersions.php
ADDED
@@ -0,0 +1,647 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
|
5 |
+
|
6 |
+
|
7 |
+
|
8 |
+
|
9 |
+
|
10 |
+
|
11 |
+
|
12 |
+
|
13 |
+
namespace Composer;
|
14 |
+
|
15 |
+
use Composer\Autoload\ClassLoader;
|
16 |
+
use Composer\Semver\VersionParser;
|
17 |
+
|
18 |
+
|
19 |
+
|
20 |
+
|
21 |
+
|
22 |
+
|
23 |
+
class InstalledVersions
|
24 |
+
{
|
25 |
+
private static $installed = array (
|
26 |
+
'root' =>
|
27 |
+
array (
|
28 |
+
'pretty_version' => 'dev-develop',
|
29 |
+
'version' => 'dev-develop',
|
30 |
+
'aliases' =>
|
31 |
+
array (
|
32 |
+
),
|
33 |
+
'reference' => 'dbbd846351515ddbc9f72dc75ff1c3654e3bebf5',
|
34 |
+
'name' => 'wprss/core',
|
35 |
+
),
|
36 |
+
'versions' =>
|
37 |
+
array (
|
38 |
+
'container-interop/container-interop' =>
|
39 |
+
array (
|
40 |
+
'pretty_version' => '1.2.0',
|
41 |
+
'version' => '1.2.0.0',
|
42 |
+
'aliases' =>
|
43 |
+
array (
|
44 |
+
),
|
45 |
+
'reference' => '79cbf1341c22ec75643d841642dd5d6acd83bdb8',
|
46 |
+
),
|
47 |
+
'container-interop/container-interop-implementation' =>
|
48 |
+
array (
|
49 |
+
'provided' =>
|
50 |
+
array (
|
51 |
+
0 => '^1.0',
|
52 |
+
),
|
53 |
+
),
|
54 |
+
'container-interop/service-provider' =>
|
55 |
+
array (
|
56 |
+
'pretty_version' => 'v0.3.0',
|
57 |
+
'version' => '0.3.0.0',
|
58 |
+
'aliases' =>
|
59 |
+
array (
|
60 |
+
),
|
61 |
+
'reference' => '5cb38893b836edb00d3e1ace26c20ee1d29957cf',
|
62 |
+
),
|
63 |
+
'dhii/collections-abstract' =>
|
64 |
+
array (
|
65 |
+
'pretty_version' => 'v0.1.0',
|
66 |
+
'version' => '0.1.0.0',
|
67 |
+
'aliases' =>
|
68 |
+
array (
|
69 |
+
),
|
70 |
+
'reference' => '7c9141202af4d83b31e75efcbf481fa1cb588ad8',
|
71 |
+
),
|
72 |
+
'dhii/collections-abstract-base' =>
|
73 |
+
array (
|
74 |
+
'pretty_version' => 'v0.1.0',
|
75 |
+
'version' => '0.1.0.0',
|
76 |
+
'aliases' =>
|
77 |
+
array (
|
78 |
+
),
|
79 |
+
'reference' => '0ec0147451a72a13fb327ac6ff747c5e953c56f3',
|
80 |
+
),
|
81 |
+
'dhii/collections-interface' =>
|
82 |
+
array (
|
83 |
+
'pretty_version' => 'v0.1.2',
|
84 |
+
'version' => '0.1.2.0',
|
85 |
+
'aliases' =>
|
86 |
+
array (
|
87 |
+
),
|
88 |
+
'reference' => 'a8e9a30366a30d77bc270042a67150b3f8f6d94d',
|
89 |
+
),
|
90 |
+
'dhii/container-helper-base' =>
|
91 |
+
array (
|
92 |
+
'pretty_version' => 'v0.1-alpha8',
|
93 |
+
'version' => '0.1.0.0-alpha8',
|
94 |
+
'aliases' =>
|
95 |
+
array (
|
96 |
+
),
|
97 |
+
'reference' => '1b8206842e06b71abcff769aaddfc51bf8f317cd',
|
98 |
+
),
|
99 |
+
'dhii/di' =>
|
100 |
+
array (
|
101 |
+
'pretty_version' => 'v0.1.1',
|
102 |
+
'version' => '0.1.1.0',
|
103 |
+
'aliases' =>
|
104 |
+
array (
|
105 |
+
),
|
106 |
+
'reference' => '52efd50f1b11fcdd2f789bae483bdb858772c306',
|
107 |
+
),
|
108 |
+
'dhii/di-abstract' =>
|
109 |
+
array (
|
110 |
+
'pretty_version' => 'v0.1',
|
111 |
+
'version' => '0.1.0.0',
|
112 |
+
'aliases' =>
|
113 |
+
array (
|
114 |
+
),
|
115 |
+
'reference' => 'e87ee3782d5f4c44724e79c4b2e1a55103e5cd11',
|
116 |
+
),
|
117 |
+
'dhii/di-interface' =>
|
118 |
+
array (
|
119 |
+
'pretty_version' => 'v0.1',
|
120 |
+
'version' => '0.1.0.0',
|
121 |
+
'aliases' =>
|
122 |
+
array (
|
123 |
+
),
|
124 |
+
'reference' => '0320846a577d68b761e29acd5d4db40d88cc4f98',
|
125 |
+
),
|
126 |
+
'dhii/exception' =>
|
127 |
+
array (
|
128 |
+
'pretty_version' => 'v0.1-alpha5',
|
129 |
+
'version' => '0.1.0.0-alpha5',
|
130 |
+
'aliases' =>
|
131 |
+
array (
|
132 |
+
),
|
133 |
+
'reference' => 'f7afb934c970a4e167b2c7ba24fa3df50714e0fe',
|
134 |
+
),
|
135 |
+
'dhii/exception-helper-base' =>
|
136 |
+
array (
|
137 |
+
'replaced' =>
|
138 |
+
array (
|
139 |
+
0 => '0.1-alpha1|0.1-alpha2',
|
140 |
+
),
|
141 |
+
),
|
142 |
+
'dhii/exception-interface' =>
|
143 |
+
array (
|
144 |
+
'pretty_version' => 'v0.2',
|
145 |
+
'version' => '0.2.0.0',
|
146 |
+
'aliases' =>
|
147 |
+
array (
|
148 |
+
),
|
149 |
+
'reference' => 'b69feebf7cb2879cd43977a03342e2393b73f7fb',
|
150 |
+
),
|
151 |
+
'dhii/factory-interface' =>
|
152 |
+
array (
|
153 |
+
'pretty_version' => 'v0.1',
|
154 |
+
'version' => '0.1.0.0',
|
155 |
+
'aliases' =>
|
156 |
+
array (
|
157 |
+
),
|
158 |
+
'reference' => 'b8d217aec8838e64ccaa770cb03dc164bf6f0515',
|
159 |
+
),
|
160 |
+
'dhii/i18n-helper-base' =>
|
161 |
+
array (
|
162 |
+
'pretty_version' => 'v0.1-alpha1',
|
163 |
+
'version' => '0.1.0.0-alpha1',
|
164 |
+
'aliases' =>
|
165 |
+
array (
|
166 |
+
),
|
167 |
+
'reference' => 'fc4c881f3e528ea918588831ebeffb92738f8dd5',
|
168 |
+
),
|
169 |
+
'dhii/i18n-interface' =>
|
170 |
+
array (
|
171 |
+
'pretty_version' => 'v0.2',
|
172 |
+
'version' => '0.2.0.0',
|
173 |
+
'aliases' =>
|
174 |
+
array (
|
175 |
+
),
|
176 |
+
'reference' => '7eaf0731ba80eea37a5deea6d894a0326e10be67',
|
177 |
+
),
|
178 |
+
'dhii/iterator-helper-base' =>
|
179 |
+
array (
|
180 |
+
'pretty_version' => 'v0.1-alpha2',
|
181 |
+
'version' => '0.1.0.0-alpha2',
|
182 |
+
'aliases' =>
|
183 |
+
array (
|
184 |
+
),
|
185 |
+
'reference' => 'cf62fb9f8b658a82815f15a2d906d8d1ff5c52ce',
|
186 |
+
),
|
187 |
+
'dhii/normalization-helper-base' =>
|
188 |
+
array (
|
189 |
+
'pretty_version' => 'v0.1-alpha4',
|
190 |
+
'version' => '0.1.0.0-alpha4',
|
191 |
+
'aliases' =>
|
192 |
+
array (
|
193 |
+
),
|
194 |
+
'reference' => '1b64f0ea6b3e32f9478f854f6049500795b51da7',
|
195 |
+
),
|
196 |
+
'dhii/output-renderer-abstract' =>
|
197 |
+
array (
|
198 |
+
'pretty_version' => 'v0.1-alpha2',
|
199 |
+
'version' => '0.1.0.0-alpha2',
|
200 |
+
'aliases' =>
|
201 |
+
array (
|
202 |
+
),
|
203 |
+
'reference' => '0f6e5eed940025332dd1986d6c771e10f7197b1a',
|
204 |
+
),
|
205 |
+
'dhii/output-renderer-base' =>
|
206 |
+
array (
|
207 |
+
'pretty_version' => 'v0.1-alpha1',
|
208 |
+
'version' => '0.1.0.0-alpha1',
|
209 |
+
'aliases' =>
|
210 |
+
array (
|
211 |
+
),
|
212 |
+
'reference' => '700483a37016e502be2ead9580bb9258ad8bf17b',
|
213 |
+
),
|
214 |
+
'dhii/output-renderer-interface' =>
|
215 |
+
array (
|
216 |
+
'pretty_version' => 'v0.3',
|
217 |
+
'version' => '0.3.0.0',
|
218 |
+
'aliases' =>
|
219 |
+
array (
|
220 |
+
),
|
221 |
+
'reference' => '407014d7fd1af0427958f2acd61aff008ee9e032',
|
222 |
+
),
|
223 |
+
'dhii/stats-abstract' =>
|
224 |
+
array (
|
225 |
+
'pretty_version' => 'v0.1.0',
|
226 |
+
'version' => '0.1.0.0',
|
227 |
+
'aliases' =>
|
228 |
+
array (
|
229 |
+
),
|
230 |
+
'reference' => '71f6702c3257c71ab3917b6d076d3c3588cc9f49',
|
231 |
+
),
|
232 |
+
'dhii/stats-interface' =>
|
233 |
+
array (
|
234 |
+
'pretty_version' => 'v0.1.0',
|
235 |
+
'version' => '0.1.0.0',
|
236 |
+
'aliases' =>
|
237 |
+
array (
|
238 |
+
),
|
239 |
+
'reference' => '36d09a8b8a3b8058214dae6eefb8ecdd98e0f0ba',
|
240 |
+
),
|
241 |
+
'dhii/stringable-interface' =>
|
242 |
+
array (
|
243 |
+
'pretty_version' => 'v0.1',
|
244 |
+
'version' => '0.1.0.0',
|
245 |
+
'aliases' =>
|
246 |
+
array (
|
247 |
+
),
|
248 |
+
'reference' => 'b6653905eef2ebf377749feb80a6d18abbe913ef',
|
249 |
+
),
|
250 |
+
'dhii/transformer-interface' =>
|
251 |
+
array (
|
252 |
+
'pretty_version' => 'v0.1-alpha1',
|
253 |
+
'version' => '0.1.0.0-alpha1',
|
254 |
+
'aliases' =>
|
255 |
+
array (
|
256 |
+
),
|
257 |
+
'reference' => 'e774efef46413eb34bdafc19a6bd74fbf656235d',
|
258 |
+
),
|
259 |
+
'dhii/validation-abstract' =>
|
260 |
+
array (
|
261 |
+
'pretty_version' => 'v0.2-alpha1',
|
262 |
+
'version' => '0.2.0.0-alpha1',
|
263 |
+
'aliases' =>
|
264 |
+
array (
|
265 |
+
),
|
266 |
+
'reference' => 'dff998ba3476927a0fc6d10bb022425de8f1c844',
|
267 |
+
),
|
268 |
+
'dhii/validation-base' =>
|
269 |
+
array (
|
270 |
+
'pretty_version' => 'v0.2-alpha2',
|
271 |
+
'version' => '0.2.0.0-alpha2',
|
272 |
+
'aliases' =>
|
273 |
+
array (
|
274 |
+
),
|
275 |
+
'reference' => '9e75c5f886a2403c6989c36c2d4ffcfae158172e',
|
276 |
+
),
|
277 |
+
'dhii/validation-interface' =>
|
278 |
+
array (
|
279 |
+
'pretty_version' => 'v0.2',
|
280 |
+
'version' => '0.2.0.0',
|
281 |
+
'aliases' =>
|
282 |
+
array (
|
283 |
+
),
|
284 |
+
'reference' => 'a26026ae5cdf0a650b3511a22dbcb9329073b82c',
|
285 |
+
),
|
286 |
+
'erusev/parsedown' =>
|
287 |
+
array (
|
288 |
+
'pretty_version' => '1.7.4',
|
289 |
+
'version' => '1.7.4.0',
|
290 |
+
'aliases' =>
|
291 |
+
array (
|
292 |
+
),
|
293 |
+
'reference' => 'cb17b6477dfff935958ba01325f2e8a2bfa6dab3',
|
294 |
+
),
|
295 |
+
'mnapoli/php-di' =>
|
296 |
+
array (
|
297 |
+
'replaced' =>
|
298 |
+
array (
|
299 |
+
0 => '*',
|
300 |
+
),
|
301 |
+
),
|
302 |
+
'php-di/invoker' =>
|
303 |
+
array (
|
304 |
+
'pretty_version' => '1.3.3',
|
305 |
+
'version' => '1.3.3.0',
|
306 |
+
'aliases' =>
|
307 |
+
array (
|
308 |
+
),
|
309 |
+
'reference' => '1f4ca63b9abc66109e53b255e465d0ddb5c2e3f7',
|
310 |
+
),
|
311 |
+
'php-di/php-di' =>
|
312 |
+
array (
|
313 |
+
'pretty_version' => '5.2.2',
|
314 |
+
'version' => '5.2.2.0',
|
315 |
+
'aliases' =>
|
316 |
+
array (
|
317 |
+
),
|
318 |
+
'reference' => 'f574bcc841201ab04587b1c6da1234d4044f67d8',
|
319 |
+
),
|
320 |
+
'php-di/phpdoc-reader' =>
|
321 |
+
array (
|
322 |
+
'pretty_version' => '2.1.1',
|
323 |
+
'version' => '2.1.1.0',
|
324 |
+
'aliases' =>
|
325 |
+
array (
|
326 |
+
),
|
327 |
+
'reference' => '15678f7451c020226807f520efb867ad26fbbfcf',
|
328 |
+
),
|
329 |
+
'psr/container' =>
|
330 |
+
array (
|
331 |
+
'pretty_version' => '1.0.0',
|
332 |
+
'version' => '1.0.0.0',
|
333 |
+
'aliases' =>
|
334 |
+
array (
|
335 |
+
),
|
336 |
+
'reference' => 'b7ce3b176482dbbc1245ebf52b181af44c2cf55f',
|
337 |
+
),
|
338 |
+
'psr/log' =>
|
339 |
+
array (
|
340 |
+
'pretty_version' => '1.1.2',
|
341 |
+
'version' => '1.1.2.0',
|
342 |
+
'aliases' =>
|
343 |
+
array (
|
344 |
+
),
|
345 |
+
'reference' => '446d54b4cb6bf489fc9d75f55843658e6f25d801',
|
346 |
+
),
|
347 |
+
'rebelcode/composer-cleanup-plugin' =>
|
348 |
+
array (
|
349 |
+
'pretty_version' => 'v0.2',
|
350 |
+
'version' => '0.2.0.0',
|
351 |
+
'aliases' =>
|
352 |
+
array (
|
353 |
+
),
|
354 |
+
'reference' => '3677eb752eb8ca042ba6f725b33f419b93857a62',
|
355 |
+
),
|
356 |
+
'symfony/polyfill-ctype' =>
|
357 |
+
array (
|
358 |
+
'pretty_version' => 'v1.13.1',
|
359 |
+
'version' => '1.13.1.0',
|
360 |
+
'aliases' =>
|
361 |
+
array (
|
362 |
+
),
|
363 |
+
'reference' => 'f8f0b461be3385e56d6de3dbb5a0df24c0c275e3',
|
364 |
+
),
|
365 |
+
'symfony/polyfill-mbstring' =>
|
366 |
+
array (
|
367 |
+
'pretty_version' => 'v1.17.1',
|
368 |
+
'version' => '1.17.1.0',
|
369 |
+
'aliases' =>
|
370 |
+
array (
|
371 |
+
),
|
372 |
+
'reference' => '7110338d81ce1cbc3e273136e4574663627037a7',
|
373 |
+
),
|
374 |
+
'symfony/translation' =>
|
375 |
+
array (
|
376 |
+
'pretty_version' => 'v2.8.52',
|
377 |
+
'version' => '2.8.52.0',
|
378 |
+
'aliases' =>
|
379 |
+
array (
|
380 |
+
),
|
381 |
+
'reference' => 'fc58c2a19e56c29f5ba2736ec40d0119a0de2089',
|
382 |
+
),
|
383 |
+
'twig/extensions' =>
|
384 |
+
array (
|
385 |
+
'pretty_version' => 'v1.5.4',
|
386 |
+
'version' => '1.5.4.0',
|
387 |
+
'aliases' =>
|
388 |
+
array (
|
389 |
+
),
|
390 |
+
'reference' => '57873c8b0c1be51caa47df2cdb824490beb16202',
|
391 |
+
),
|
392 |
+
'twig/twig' =>
|
393 |
+
array (
|
394 |
+
'pretty_version' => 'v1.41.0',
|
395 |
+
'version' => '1.41.0.0',
|
396 |
+
'aliases' =>
|
397 |
+
array (
|
398 |
+
),
|
399 |
+
'reference' => '575cd5028362da591facde1ef5d7b94553c375c9',
|
400 |
+
),
|
401 |
+
'wprss/core' =>
|
402 |
+
array (
|
403 |
+
'pretty_version' => 'dev-develop',
|
404 |
+
'version' => 'dev-develop',
|
405 |
+
'aliases' =>
|
406 |
+
array (
|
407 |
+
),
|
408 |
+
'reference' => 'dbbd846351515ddbc9f72dc75ff1c3654e3bebf5',
|
409 |
+
),
|
410 |
+
),
|
411 |
+
);
|
412 |
+
private static $canGetVendors;
|
413 |
+
private static $installedByVendor = array();
|
414 |
+
|
415 |
+
|
416 |
+
|
417 |
+
|
418 |
+
|
419 |
+
|
420 |
+
|
421 |
+
public static function getInstalledPackages()
|
422 |
+
{
|
423 |
+
$packages = array();
|
424 |
+
foreach (self::getInstalled() as $installed) {
|
425 |
+
$packages[] = array_keys($installed['versions']);
|
426 |
+
}
|
427 |
+
|
428 |
+
|
429 |
+
if (1 === \count($packages)) {
|
430 |
+
return $packages[0];
|
431 |
+
}
|
432 |
+
|
433 |
+
return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
|
434 |
+
}
|
435 |
+
|
436 |
+
|
437 |
+
|
438 |
+
|
439 |
+
|
440 |
+
|
441 |
+
|
442 |
+
|
443 |
+
|
444 |
+
public static function isInstalled($packageName)
|
445 |
+
{
|
446 |
+
foreach (self::getInstalled() as $installed) {
|
447 |
+
if (isset($installed['versions'][$packageName])) {
|
448 |
+
return true;
|
449 |
+
}
|
450 |
+
}
|
451 |
+
|
452 |
+
return false;
|
453 |
+
}
|
454 |
+
|
455 |
+
|
456 |
+
|
457 |
+
|
458 |
+
|
459 |
+
|
460 |
+
|
461 |
+
|
462 |
+
|
463 |
+
|
464 |
+
|
465 |
+
|
466 |
+
|
467 |
+
|
468 |
+
public static function satisfies(VersionParser $parser, $packageName, $constraint)
|
469 |
+
{
|
470 |
+
$constraint = $parser->parseConstraints($constraint);
|
471 |
+
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
|
472 |
+
|
473 |
+
return $provided->matches($constraint);
|
474 |
+
}
|
475 |
+
|
476 |
+
|
477 |
+
|
478 |
+
|
479 |
+
|
480 |
+
|
481 |
+
|
482 |
+
|
483 |
+
|
484 |
+
|
485 |
+
public static function getVersionRanges($packageName)
|
486 |
+
{
|
487 |
+
foreach (self::getInstalled() as $installed) {
|
488 |
+
if (!isset($installed['versions'][$packageName])) {
|
489 |
+
continue;
|
490 |
+
}
|
491 |
+
|
492 |
+
$ranges = array();
|
493 |
+
if (isset($installed['versions'][$packageName]['pretty_version'])) {
|
494 |
+
$ranges[] = $installed['versions'][$packageName]['pretty_version'];
|
495 |
+
}
|
496 |
+
if (array_key_exists('aliases', $installed['versions'][$packageName])) {
|
497 |
+
$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
|
498 |
+
}
|
499 |
+
if (array_key_exists('replaced', $installed['versions'][$packageName])) {
|
500 |
+
$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
|
501 |
+
}
|
502 |
+
if (array_key_exists('provided', $installed['versions'][$packageName])) {
|
503 |
+
$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
|
504 |
+
}
|
505 |
+
|
506 |
+
return implode(' || ', $ranges);
|
507 |
+
}
|
508 |
+
|
509 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
510 |
+
}
|
511 |
+
|
512 |
+
|
513 |
+
|
514 |
+
|
515 |
+
|
516 |
+
public static function getVersion($packageName)
|
517 |
+
{
|
518 |
+
foreach (self::getInstalled() as $installed) {
|
519 |
+
if (!isset($installed['versions'][$packageName])) {
|
520 |
+
continue;
|
521 |
+
}
|
522 |
+
|
523 |
+
if (!isset($installed['versions'][$packageName]['version'])) {
|
524 |
+
return null;
|
525 |
+
}
|
526 |
+
|
527 |
+
return $installed['versions'][$packageName]['version'];
|
528 |
+
}
|
529 |
+
|
530 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
531 |
+
}
|
532 |
+
|
533 |
+
|
534 |
+
|
535 |
+
|
536 |
+
|
537 |
+
public static function getPrettyVersion($packageName)
|
538 |
+
{
|
539 |
+
foreach (self::getInstalled() as $installed) {
|
540 |
+
if (!isset($installed['versions'][$packageName])) {
|
541 |
+
continue;
|
542 |
+
}
|
543 |
+
|
544 |
+
if (!isset($installed['versions'][$packageName]['pretty_version'])) {
|
545 |
+
return null;
|
546 |
+
}
|
547 |
+
|
548 |
+
return $installed['versions'][$packageName]['pretty_version'];
|
549 |
+
}
|
550 |
+
|
551 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
552 |
+
}
|
553 |
+
|
554 |
+
|
555 |
+
|
556 |
+
|
557 |
+
|
558 |
+
public static function getReference($packageName)
|
559 |
+
{
|
560 |
+
foreach (self::getInstalled() as $installed) {
|
561 |
+
if (!isset($installed['versions'][$packageName])) {
|
562 |
+
continue;
|
563 |
+
}
|
564 |
+
|
565 |
+
if (!isset($installed['versions'][$packageName]['reference'])) {
|
566 |
+
return null;
|
567 |
+
}
|
568 |
+
|
569 |
+
return $installed['versions'][$packageName]['reference'];
|
570 |
+
}
|
571 |
+
|
572 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
573 |
+
}
|
574 |
+
|
575 |
+
|
576 |
+
|
577 |
+
|
578 |
+
|
579 |
+
public static function getRootPackage()
|
580 |
+
{
|
581 |
+
$installed = self::getInstalled();
|
582 |
+
|
583 |
+
return $installed[0]['root'];
|
584 |
+
}
|
585 |
+
|
586 |
+
|
587 |
+
|
588 |
+
|
589 |
+
|
590 |
+
|
591 |
+
|
592 |
+
public static function getRawData()
|
593 |
+
{
|
594 |
+
return self::$installed;
|
595 |
+
}
|
596 |
+
|
597 |
+
|
598 |
+
|
599 |
+
|
600 |
+
|
601 |
+
|
602 |
+
|
603 |
+
|
604 |
+
|
605 |
+
|
606 |
+
|
607 |
+
|
608 |
+
|
609 |
+
|
610 |
+
|
611 |
+
|
612 |
+
|
613 |
+
|
614 |
+
|
615 |
+
public static function reload($data)
|
616 |
+
{
|
617 |
+
self::$installed = $data;
|
618 |
+
self::$installedByVendor = array();
|
619 |
+
}
|
620 |
+
|
621 |
+
|
622 |
+
|
623 |
+
|
624 |
+
private static function getInstalled()
|
625 |
+
{
|
626 |
+
if (null === self::$canGetVendors) {
|
627 |
+
self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
|
628 |
+
}
|
629 |
+
|
630 |
+
$installed = array();
|
631 |
+
|
632 |
+
if (self::$canGetVendors) {
|
633 |
+
|
634 |
+
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
|
635 |
+
if (isset(self::$installedByVendor[$vendorDir])) {
|
636 |
+
$installed[] = self::$installedByVendor[$vendorDir];
|
637 |
+
} elseif (is_file($vendorDir.'/composer/installed.php')) {
|
638 |
+
$installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
|
639 |
+
}
|
640 |
+
}
|
641 |
+
}
|
642 |
+
|
643 |
+
$installed[] = self::$installed;
|
644 |
+
|
645 |
+
return $installed;
|
646 |
+
}
|
647 |
+
}
|
vendor/composer/autoload_classmap.php
CHANGED
@@ -6,6 +6,7 @@ $vendorDir = dirname(dirname(__FILE__));
|
|
6 |
$baseDir = dirname($vendorDir);
|
7 |
|
8 |
return array(
|
|
|
9 |
'DI\\Annotation\\Inject' => $vendorDir . '/php-di/php-di/src/DI/Annotation/Inject.php',
|
10 |
'DI\\Annotation\\Injectable' => $vendorDir . '/php-di/php-di/src/DI/Annotation/Injectable.php',
|
11 |
'DI\\Cache\\ArrayCache' => $vendorDir . '/php-di/php-di/src/DI/Cache/ArrayCache.php',
|
@@ -275,7 +276,6 @@ return array(
|
|
275 |
'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php',
|
276 |
'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php',
|
277 |
'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php',
|
278 |
-
'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
279 |
'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
280 |
'Psr\\Log\\Test\\TestLogger' => $vendorDir . '/psr/log/Psr/Log/Test/TestLogger.php',
|
281 |
'RebelCode\\Composer\\CleanupPlugin' => $vendorDir . '/rebelcode/composer-cleanup-plugin/src/CleanupPlugin.php',
|
@@ -429,6 +429,7 @@ return array(
|
|
429 |
'RebelCode\\Wpra\\Core\\Modules\\WpModule' => $baseDir . '/src/Modules/WpModule.php',
|
430 |
'RebelCode\\Wpra\\Core\\Plugin' => $baseDir . '/src/Plugin.php',
|
431 |
'RebelCode\\Wpra\\Core\\Query\\AbstractWpQueryIterator' => $baseDir . '/src/Query/AbstractWpQueryIterator.php',
|
|
|
432 |
'RebelCode\\Wpra\\Core\\Query\\WpQueryIterator' => $baseDir . '/src/Query/WpQueryIterator.php',
|
433 |
'RebelCode\\Wpra\\Core\\RestApi\\Auth\\AbstractAuthValidator' => $baseDir . '/src/RestApi/Auth/AbstractAuthValidator.php',
|
434 |
'RebelCode\\Wpra\\Core\\RestApi\\Auth\\AuthUserIsAdmin' => $baseDir . '/src/RestApi/Auth/AuthUserIsAdmin.php',
|
6 |
$baseDir = dirname($vendorDir);
|
7 |
|
8 |
return array(
|
9 |
+
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
|
10 |
'DI\\Annotation\\Inject' => $vendorDir . '/php-di/php-di/src/DI/Annotation/Inject.php',
|
11 |
'DI\\Annotation\\Injectable' => $vendorDir . '/php-di/php-di/src/DI/Annotation/Injectable.php',
|
12 |
'DI\\Cache\\ArrayCache' => $vendorDir . '/php-di/php-di/src/DI/Cache/ArrayCache.php',
|
276 |
'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php',
|
277 |
'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php',
|
278 |
'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php',
|
|
|
279 |
'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
280 |
'Psr\\Log\\Test\\TestLogger' => $vendorDir . '/psr/log/Psr/Log/Test/TestLogger.php',
|
281 |
'RebelCode\\Composer\\CleanupPlugin' => $vendorDir . '/rebelcode/composer-cleanup-plugin/src/CleanupPlugin.php',
|
429 |
'RebelCode\\Wpra\\Core\\Modules\\WpModule' => $baseDir . '/src/Modules/WpModule.php',
|
430 |
'RebelCode\\Wpra\\Core\\Plugin' => $baseDir . '/src/Plugin.php',
|
431 |
'RebelCode\\Wpra\\Core\\Query\\AbstractWpQueryIterator' => $baseDir . '/src/Query/AbstractWpQueryIterator.php',
|
432 |
+
'RebelCode\\Wpra\\Core\\Query\\DbQuery' => $baseDir . '/src/Query/DbQuery.php',
|
433 |
'RebelCode\\Wpra\\Core\\Query\\WpQueryIterator' => $baseDir . '/src/Query/WpQueryIterator.php',
|
434 |
'RebelCode\\Wpra\\Core\\RestApi\\Auth\\AbstractAuthValidator' => $baseDir . '/src/RestApi/Auth/AbstractAuthValidator.php',
|
435 |
'RebelCode\\Wpra\\Core\\RestApi\\Auth\\AuthUserIsAdmin' => $baseDir . '/src/RestApi/Auth/AuthUserIsAdmin.php',
|
vendor/composer/autoload_real.php
CHANGED
@@ -22,13 +22,15 @@ class ComposerAutoloaderInit46c8b76c439f86ad826af1a4d36b4e60
|
|
22 |
return self::$loader;
|
23 |
}
|
24 |
|
|
|
|
|
25 |
spl_autoload_register(array('ComposerAutoloaderInit46c8b76c439f86ad826af1a4d36b4e60', 'loadClassLoader'), true, true);
|
26 |
-
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
27 |
spl_autoload_unregister(array('ComposerAutoloaderInit46c8b76c439f86ad826af1a4d36b4e60', 'loadClassLoader'));
|
28 |
|
29 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
30 |
if ($useStaticLoader) {
|
31 |
-
|
32 |
|
33 |
call_user_func(\Composer\Autoload\ComposerStaticInit46c8b76c439f86ad826af1a4d36b4e60::getInitializer($loader));
|
34 |
} else {
|
22 |
return self::$loader;
|
23 |
}
|
24 |
|
25 |
+
require __DIR__ . '/platform_check.php';
|
26 |
+
|
27 |
spl_autoload_register(array('ComposerAutoloaderInit46c8b76c439f86ad826af1a4d36b4e60', 'loadClassLoader'), true, true);
|
28 |
+
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
|
29 |
spl_autoload_unregister(array('ComposerAutoloaderInit46c8b76c439f86ad826af1a4d36b4e60', 'loadClassLoader'));
|
30 |
|
31 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
32 |
if ($useStaticLoader) {
|
33 |
+
require __DIR__ . '/autoload_static.php';
|
34 |
|
35 |
call_user_func(\Composer\Autoload\ComposerStaticInit46c8b76c439f86ad826af1a4d36b4e60::getInitializer($loader));
|
36 |
} else {
|
vendor/composer/autoload_static.php
CHANGED
@@ -205,6 +205,7 @@ class ComposerStaticInit46c8b76c439f86ad826af1a4d36b4e60
|
|
205 |
);
|
206 |
|
207 |
public static $classMap = array (
|
|
|
208 |
'DI\\Annotation\\Inject' => __DIR__ . '/..' . '/php-di/php-di/src/DI/Annotation/Inject.php',
|
209 |
'DI\\Annotation\\Injectable' => __DIR__ . '/..' . '/php-di/php-di/src/DI/Annotation/Injectable.php',
|
210 |
'DI\\Cache\\ArrayCache' => __DIR__ . '/..' . '/php-di/php-di/src/DI/Cache/ArrayCache.php',
|
@@ -474,7 +475,6 @@ class ComposerStaticInit46c8b76c439f86ad826af1a4d36b4e60
|
|
474 |
'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerInterface.php',
|
475 |
'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerTrait.php',
|
476 |
'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/NullLogger.php',
|
477 |
-
'Psr\\Log\\Test\\DummyTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
478 |
'Psr\\Log\\Test\\LoggerInterfaceTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
479 |
'Psr\\Log\\Test\\TestLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/TestLogger.php',
|
480 |
'RebelCode\\Composer\\CleanupPlugin' => __DIR__ . '/..' . '/rebelcode/composer-cleanup-plugin/src/CleanupPlugin.php',
|
@@ -628,6 +628,7 @@ class ComposerStaticInit46c8b76c439f86ad826af1a4d36b4e60
|
|
628 |
'RebelCode\\Wpra\\Core\\Modules\\WpModule' => __DIR__ . '/../..' . '/src/Modules/WpModule.php',
|
629 |
'RebelCode\\Wpra\\Core\\Plugin' => __DIR__ . '/../..' . '/src/Plugin.php',
|
630 |
'RebelCode\\Wpra\\Core\\Query\\AbstractWpQueryIterator' => __DIR__ . '/../..' . '/src/Query/AbstractWpQueryIterator.php',
|
|
|
631 |
'RebelCode\\Wpra\\Core\\Query\\WpQueryIterator' => __DIR__ . '/../..' . '/src/Query/WpQueryIterator.php',
|
632 |
'RebelCode\\Wpra\\Core\\RestApi\\Auth\\AbstractAuthValidator' => __DIR__ . '/../..' . '/src/RestApi/Auth/AbstractAuthValidator.php',
|
633 |
'RebelCode\\Wpra\\Core\\RestApi\\Auth\\AuthUserIsAdmin' => __DIR__ . '/../..' . '/src/RestApi/Auth/AuthUserIsAdmin.php',
|
205 |
);
|
206 |
|
207 |
public static $classMap = array (
|
208 |
+
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
|
209 |
'DI\\Annotation\\Inject' => __DIR__ . '/..' . '/php-di/php-di/src/DI/Annotation/Inject.php',
|
210 |
'DI\\Annotation\\Injectable' => __DIR__ . '/..' . '/php-di/php-di/src/DI/Annotation/Injectable.php',
|
211 |
'DI\\Cache\\ArrayCache' => __DIR__ . '/..' . '/php-di/php-di/src/DI/Cache/ArrayCache.php',
|
475 |
'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerInterface.php',
|
476 |
'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerTrait.php',
|
477 |
'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/NullLogger.php',
|
|
|
478 |
'Psr\\Log\\Test\\LoggerInterfaceTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
479 |
'Psr\\Log\\Test\\TestLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/TestLogger.php',
|
480 |
'RebelCode\\Composer\\CleanupPlugin' => __DIR__ . '/..' . '/rebelcode/composer-cleanup-plugin/src/CleanupPlugin.php',
|
628 |
'RebelCode\\Wpra\\Core\\Modules\\WpModule' => __DIR__ . '/../..' . '/src/Modules/WpModule.php',
|
629 |
'RebelCode\\Wpra\\Core\\Plugin' => __DIR__ . '/../..' . '/src/Plugin.php',
|
630 |
'RebelCode\\Wpra\\Core\\Query\\AbstractWpQueryIterator' => __DIR__ . '/../..' . '/src/Query/AbstractWpQueryIterator.php',
|
631 |
+
'RebelCode\\Wpra\\Core\\Query\\DbQuery' => __DIR__ . '/../..' . '/src/Query/DbQuery.php',
|
632 |
'RebelCode\\Wpra\\Core\\Query\\WpQueryIterator' => __DIR__ . '/../..' . '/src/Query/WpQueryIterator.php',
|
633 |
'RebelCode\\Wpra\\Core\\RestApi\\Auth\\AbstractAuthValidator' => __DIR__ . '/../..' . '/src/RestApi/Auth/AbstractAuthValidator.php',
|
634 |
'RebelCode\\Wpra\\Core\\RestApi\\Auth\\AuthUserIsAdmin' => __DIR__ . '/../..' . '/src/RestApi/Auth/AuthUserIsAdmin.php',
|
vendor/composer/installed.json
CHANGED
@@ -1,1948 +1,1994 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
"
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
"dist": {
|
12 |
-
"type": "zip",
|
13 |
-
"url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8",
|
14 |
-
"reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8",
|
15 |
-
"shasum": ""
|
16 |
-
},
|
17 |
-
"require": {
|
18 |
-
"psr/container": "^1.0"
|
19 |
-
},
|
20 |
-
"time": "2017-02-14T19:40:03+00:00",
|
21 |
-
"type": "library",
|
22 |
-
"installation-source": "dist",
|
23 |
-
"autoload": {
|
24 |
-
"psr-4": {
|
25 |
-
"Interop\\Container\\": "src/Interop/Container/"
|
26 |
-
}
|
27 |
-
},
|
28 |
-
"notification-url": "https://packagist.org/downloads/",
|
29 |
-
"license": [
|
30 |
-
"MIT"
|
31 |
-
],
|
32 |
-
"description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
|
33 |
-
"homepage": "https://github.com/container-interop/container-interop",
|
34 |
-
"abandoned": "psr/container"
|
35 |
-
},
|
36 |
-
{
|
37 |
-
"name": "container-interop/service-provider",
|
38 |
-
"version": "v0.3.0",
|
39 |
-
"version_normalized": "0.3.0.0",
|
40 |
-
"source": {
|
41 |
-
"type": "git",
|
42 |
-
"url": "https://github.com/container-interop/service-provider.git",
|
43 |
-
"reference": "5cb38893b836edb00d3e1ace26c20ee1d29957cf"
|
44 |
-
},
|
45 |
-
"dist": {
|
46 |
-
"type": "zip",
|
47 |
-
"url": "https://api.github.com/repos/container-interop/service-provider/zipball/5cb38893b836edb00d3e1ace26c20ee1d29957cf",
|
48 |
-
"reference": "5cb38893b836edb00d3e1ace26c20ee1d29957cf",
|
49 |
-
"shasum": ""
|
50 |
-
},
|
51 |
-
"require": {
|
52 |
-
"container-interop/container-interop": "^1.1"
|
53 |
-
},
|
54 |
-
"time": "2016-05-16T07:42:22+00:00",
|
55 |
-
"type": "library",
|
56 |
-
"installation-source": "dist",
|
57 |
-
"autoload": {
|
58 |
-
"psr-4": {
|
59 |
-
"Interop\\Container\\": "src/"
|
60 |
-
}
|
61 |
-
},
|
62 |
-
"notification-url": "https://packagist.org/downloads/",
|
63 |
-
"license": [
|
64 |
-
"MIT"
|
65 |
-
],
|
66 |
-
"description": "Promoting container interoperability through standard service providers",
|
67 |
-
"homepage": "https://github.com/container-interop/service-provider"
|
68 |
-
},
|
69 |
-
{
|
70 |
-
"name": "dhii/collections-abstract",
|
71 |
-
"version": "v0.1.0",
|
72 |
-
"version_normalized": "0.1.0.0",
|
73 |
-
"source": {
|
74 |
-
"type": "git",
|
75 |
-
"url": "https://github.com/Dhii/collections-abstract.git",
|
76 |
-
"reference": "7c9141202af4d83b31e75efcbf481fa1cb588ad8"
|
77 |
-
},
|
78 |
-
"dist": {
|
79 |
-
"type": "zip",
|
80 |
-
"url": "https://api.github.com/repos/Dhii/collections-abstract/zipball/7c9141202af4d83b31e75efcbf481fa1cb588ad8",
|
81 |
-
"reference": "7c9141202af4d83b31e75efcbf481fa1cb588ad8",
|
82 |
-
"shasum": ""
|
83 |
-
},
|
84 |
-
"require": {
|
85 |
-
"dhii/collections-abstract-base": "^0.1.0",
|
86 |
-
"dhii/collections-interface": "^0.1.1",
|
87 |
-
"dhii/stats-abstract": "^0.1.0"
|
88 |
-
},
|
89 |
-
"require-dev": {
|
90 |
-
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
91 |
-
"phpunit/phpunit": "4.*",
|
92 |
-
"ptrofimov/xpmock": "^1.1"
|
93 |
-
},
|
94 |
-
"time": "2016-11-10T19:29:24+00:00",
|
95 |
-
"type": "library",
|
96 |
-
"installation-source": "dist",
|
97 |
-
"autoload": {
|
98 |
-
"psr-4": {
|
99 |
-
"Dhii\\Collection\\": "src/"
|
100 |
-
}
|
101 |
-
},
|
102 |
-
"notification-url": "https://packagist.org/downloads/",
|
103 |
-
"license": [
|
104 |
-
"MIT"
|
105 |
-
],
|
106 |
-
"authors": [
|
107 |
-
{
|
108 |
-
"name": "Dhii Team",
|
109 |
-
"email": "development@dhii.co"
|
110 |
-
}
|
111 |
-
],
|
112 |
-
"description": "A collections library"
|
113 |
-
},
|
114 |
-
{
|
115 |
-
"name": "dhii/collections-abstract-base",
|
116 |
-
"version": "v0.1.0",
|
117 |
-
"version_normalized": "0.1.0.0",
|
118 |
-
"source": {
|
119 |
-
"type": "git",
|
120 |
-
"url": "https://github.com/Dhii/collections-abstract-base.git",
|
121 |
-
"reference": "0ec0147451a72a13fb327ac6ff747c5e953c56f3"
|
122 |
-
},
|
123 |
-
"dist": {
|
124 |
-
"type": "zip",
|
125 |
-
"url": "https://api.github.com/repos/Dhii/collections-abstract-base/zipball/0ec0147451a72a13fb327ac6ff747c5e953c56f3",
|
126 |
-
"reference": "0ec0147451a72a13fb327ac6ff747c5e953c56f3",
|
127 |
-
"shasum": ""
|
128 |
-
},
|
129 |
-
"require": {
|
130 |
-
"dhii/collections-interface": "^0.1.1"
|
131 |
-
},
|
132 |
-
"require-dev": {
|
133 |
-
"codeclimate/php-test-reporter": "dev-master",
|
134 |
-
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
135 |
-
"phpunit/phpunit": "^4.8",
|
136 |
-
"ptrofimov/xpmock": "^1.1"
|
137 |
-
},
|
138 |
-
"time": "2016-11-10T15:09:37+00:00",
|
139 |
-
"type": "library",
|
140 |
-
"installation-source": "dist",
|
141 |
-
"autoload": {
|
142 |
-
"psr-4": {
|
143 |
-
"Dhii\\Collection\\": "src/"
|
144 |
-
}
|
145 |
-
},
|
146 |
-
"notification-url": "https://packagist.org/downloads/",
|
147 |
-
"license": [
|
148 |
-
"MIT"
|
149 |
-
],
|
150 |
-
"authors": [
|
151 |
-
{
|
152 |
-
"name": "Dhii Team",
|
153 |
-
"email": "development@dhii.co"
|
154 |
-
}
|
155 |
-
],
|
156 |
-
"description": "Collection base classes that do not depend on other non-collection packages, on which there is a dependency of other collection packages that depend on this package. This is done to avoid circular reference in the collection toolchain",
|
157 |
-
"abandoned": "dhii/collections"
|
158 |
-
},
|
159 |
-
{
|
160 |
-
"name": "dhii/collections-interface",
|
161 |
-
"version": "v0.1.2",
|
162 |
-
"version_normalized": "0.1.2.0",
|
163 |
-
"source": {
|
164 |
-
"type": "git",
|
165 |
-
"url": "https://github.com/Dhii/collections-interface.git",
|
166 |
-
"reference": "a8e9a30366a30d77bc270042a67150b3f8f6d94d"
|
167 |
-
},
|
168 |
-
"dist": {
|
169 |
-
"type": "zip",
|
170 |
-
"url": "https://api.github.com/repos/Dhii/collections-interface/zipball/a8e9a30366a30d77bc270042a67150b3f8f6d94d",
|
171 |
-
"reference": "a8e9a30366a30d77bc270042a67150b3f8f6d94d",
|
172 |
-
"shasum": ""
|
173 |
-
},
|
174 |
-
"require": {
|
175 |
-
"php": "^5.3 | ^7.0"
|
176 |
-
},
|
177 |
-
"require-dev": {
|
178 |
-
"codeclimate/php-test-reporter": "dev-master",
|
179 |
-
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
180 |
-
"phpunit/phpunit": "^4.8"
|
181 |
-
},
|
182 |
-
"time": "2016-11-16T14:45:08+00:00",
|
183 |
-
"type": "library",
|
184 |
-
"installation-source": "dist",
|
185 |
-
"autoload": {
|
186 |
-
"psr-4": {
|
187 |
-
"Dhii\\Collection\\": "src/"
|
188 |
-
}
|
189 |
-
},
|
190 |
-
"notification-url": "https://packagist.org/downloads/",
|
191 |
-
"license": [
|
192 |
-
"MIT"
|
193 |
-
],
|
194 |
-
"authors": [
|
195 |
-
{
|
196 |
-
"name": "Dhii Team",
|
197 |
-
"email": "development@dhii.co"
|
198 |
-
}
|
199 |
-
],
|
200 |
-
"description": "Interfaces for collections"
|
201 |
-
},
|
202 |
-
{
|
203 |
-
"name": "dhii/container-helper-base",
|
204 |
-
"version": "v0.1-alpha8",
|
205 |
-
"version_normalized": "0.1.0.0-alpha8",
|
206 |
-
"source": {
|
207 |
-
"type": "git",
|
208 |
-
"url": "https://github.com/Dhii/container-helper-base.git",
|
209 |
-
"reference": "1b8206842e06b71abcff769aaddfc51bf8f317cd"
|
210 |
-
},
|
211 |
-
"dist": {
|
212 |
-
"type": "zip",
|
213 |
-
"url": "https://api.github.com/repos/Dhii/container-helper-base/zipball/1b8206842e06b71abcff769aaddfc51bf8f317cd",
|
214 |
-
"reference": "1b8206842e06b71abcff769aaddfc51bf8f317cd",
|
215 |
-
"shasum": ""
|
216 |
-
},
|
217 |
-
"require": {
|
218 |
-
"php": "^5.4 | ^7.0"
|
219 |
-
},
|
220 |
-
"require-dev": {
|
221 |
-
"codeclimate/php-test-reporter": "<=0.3.2",
|
222 |
-
"dhii/php-cs-fixer-config": "^0.1",
|
223 |
-
"dhii/stringable-interface": "^0.1",
|
224 |
-
"phpunit/phpunit": "^4.8",
|
225 |
-
"psr/container": "^1.0",
|
226 |
-
"ptrofimov/xpmock": "^1.1"
|
227 |
-
},
|
228 |
-
"time": "2018-07-30T09:59:15+00:00",
|
229 |
-
"type": "library",
|
230 |
-
"extra": {
|
231 |
-
"branch-alias": {
|
232 |
-
"dev-develop": "0.1.x-dev"
|
233 |
-
}
|
234 |
-
},
|
235 |
-
"installation-source": "dist",
|
236 |
-
"autoload": {
|
237 |
-
"psr-4": {
|
238 |
-
"Dhii\\Data\\Container\\": "src"
|
239 |
-
}
|
240 |
-
},
|
241 |
-
"notification-url": "https://packagist.org/downloads/",
|
242 |
-
"license": [
|
243 |
-
"MIT"
|
244 |
-
],
|
245 |
-
"authors": [
|
246 |
-
{
|
247 |
-
"name": "Dhii Team",
|
248 |
-
"email": "development@dhii.co"
|
249 |
-
}
|
250 |
-
],
|
251 |
-
"description": "Helper functionality for working with container."
|
252 |
-
},
|
253 |
-
{
|
254 |
-
"name": "dhii/di",
|
255 |
-
"version": "v0.1.1",
|
256 |
-
"version_normalized": "0.1.1.0",
|
257 |
-
"source": {
|
258 |
-
"type": "git",
|
259 |
-
"url": "https://github.com/Dhii/di.git",
|
260 |
-
"reference": "52efd50f1b11fcdd2f789bae483bdb858772c306"
|
261 |
-
},
|
262 |
-
"dist": {
|
263 |
-
"type": "zip",
|
264 |
-
"url": "https://api.github.com/repos/Dhii/di/zipball/52efd50f1b11fcdd2f789bae483bdb858772c306",
|
265 |
-
"reference": "52efd50f1b11fcdd2f789bae483bdb858772c306",
|
266 |
-
"shasum": ""
|
267 |
-
},
|
268 |
-
"require": {
|
269 |
-
"container-interop/container-interop": "^1.1",
|
270 |
-
"container-interop/service-provider": "^0.3",
|
271 |
-
"dhii/di-abstract": "^0.1",
|
272 |
-
"dhii/di-interface": "^0.1",
|
273 |
-
"php": "^5.3 | ^7.0"
|
274 |
-
},
|
275 |
-
"provide": {
|
276 |
-
"container-interop/container-interop-implementation": "^1.0"
|
277 |
-
},
|
278 |
-
"require-dev": {
|
279 |
-
"codeclimate/php-test-reporter": "<=0.3.2",
|
280 |
-
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
281 |
-
"phpunit/phpunit": "^4.8",
|
282 |
-
"ptrofimov/xpmock": "^1.1"
|
283 |
-
},
|
284 |
-
"time": "2017-02-03T13:33:48+00:00",
|
285 |
-
"type": "library",
|
286 |
-
"installation-source": "dist",
|
287 |
-
"autoload": {
|
288 |
-
"psr-4": {
|
289 |
-
"Dhii\\Di\\": "src/"
|
290 |
-
}
|
291 |
-
},
|
292 |
-
"notification-url": "https://packagist.org/downloads/",
|
293 |
-
"license": [
|
294 |
-
"MIT"
|
295 |
-
],
|
296 |
-
"authors": [
|
297 |
-
{
|
298 |
-
"name": "Dhii Team",
|
299 |
-
"email": "development@dhii.co"
|
300 |
-
}
|
301 |
-
],
|
302 |
-
"description": "A DI container implementation",
|
303 |
-
"keywords": [
|
304 |
-
"container",
|
305 |
-
"dependency injection",
|
306 |
-
"di"
|
307 |
-
],
|
308 |
-
"abandoned": "dhii/containers"
|
309 |
-
},
|
310 |
-
{
|
311 |
-
"name": "dhii/di-abstract",
|
312 |
-
"version": "v0.1",
|
313 |
-
"version_normalized": "0.1.0.0",
|
314 |
-
"source": {
|
315 |
-
"type": "git",
|
316 |
-
"url": "https://github.com/Dhii/di-abstract.git",
|
317 |
-
"reference": "e87ee3782d5f4c44724e79c4b2e1a55103e5cd11"
|
318 |
-
},
|
319 |
-
"dist": {
|
320 |
-
"type": "zip",
|
321 |
-
"url": "https://api.github.com/repos/Dhii/di-abstract/zipball/e87ee3782d5f4c44724e79c4b2e1a55103e5cd11",
|
322 |
-
"reference": "e87ee3782d5f4c44724e79c4b2e1a55103e5cd11",
|
323 |
-
"shasum": ""
|
324 |
-
},
|
325 |
-
"require": {
|
326 |
-
"container-interop/container-interop": "^1.1",
|
327 |
-
"container-interop/service-provider": "^0.3",
|
328 |
-
"dhii/di-interface": "^0.1",
|
329 |
-
"php": "^5.3 | ^7.0"
|
330 |
-
},
|
331 |
-
"require-dev": {
|
332 |
-
"codeclimate/php-test-reporter": "<=0.3.2",
|
333 |
-
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
334 |
-
"phpunit/phpunit": "^4.8",
|
335 |
-
"ptrofimov/xpmock": "^1.1"
|
336 |
-
},
|
337 |
-
"time": "2017-02-02T18:30:06+00:00",
|
338 |
-
"type": "library",
|
339 |
-
"installation-source": "dist",
|
340 |
-
"autoload": {
|
341 |
-
"psr-4": {
|
342 |
-
"Dhii\\Di\\": "src/"
|
343 |
-
}
|
344 |
-
},
|
345 |
-
"notification-url": "https://packagist.org/downloads/",
|
346 |
-
"license": [
|
347 |
-
"MIT"
|
348 |
-
],
|
349 |
-
"authors": [
|
350 |
-
{
|
351 |
-
"name": "Dhii Team",
|
352 |
-
"email": "development@dhii.co"
|
353 |
-
}
|
354 |
-
],
|
355 |
-
"description": "Base abstract classes for DI container implementations"
|
356 |
-
},
|
357 |
-
{
|
358 |
-
"name": "dhii/di-interface",
|
359 |
-
"version": "v0.1",
|
360 |
-
"version_normalized": "0.1.0.0",
|
361 |
-
"source": {
|
362 |
-
"type": "git",
|
363 |
-
"url": "https://github.com/Dhii/di-interface.git",
|
364 |
-
"reference": "0320846a577d68b761e29acd5d4db40d88cc4f98"
|
365 |
-
},
|
366 |
-
"dist": {
|
367 |
-
"type": "zip",
|
368 |
-
"url": "https://api.github.com/repos/Dhii/di-interface/zipball/0320846a577d68b761e29acd5d4db40d88cc4f98",
|
369 |
-
"reference": "0320846a577d68b761e29acd5d4db40d88cc4f98",
|
370 |
-
"shasum": ""
|
371 |
-
},
|
372 |
-
"require": {
|
373 |
-
"container-interop/container-interop": "^1.1",
|
374 |
-
"container-interop/service-provider": "^0.3",
|
375 |
-
"php": "^5.3 | ^7.0"
|
376 |
-
},
|
377 |
-
"require-dev": {
|
378 |
-
"codeclimate/php-test-reporter": "<=0.3.2",
|
379 |
-
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
380 |
-
"phpunit/phpunit": "^4.8",
|
381 |
-
"ptrofimov/xpmock": "^1.1"
|
382 |
-
},
|
383 |
-
"time": "2017-02-02T13:12:09+00:00",
|
384 |
-
"type": "library",
|
385 |
-
"installation-source": "dist",
|
386 |
-
"autoload": {
|
387 |
-
"psr-4": {
|
388 |
-
"Dhii\\Di\\": "src/"
|
389 |
-
}
|
390 |
-
},
|
391 |
-
"notification-url": "https://packagist.org/downloads/",
|
392 |
-
"license": [
|
393 |
-
"MIT"
|
394 |
-
],
|
395 |
-
"authors": [
|
396 |
-
{
|
397 |
-
"name": "Dhii Team",
|
398 |
-
"email": "development@dhii.co"
|
399 |
-
}
|
400 |
-
],
|
401 |
-
"description": "Interfaces for DI container implementations"
|
402 |
-
},
|
403 |
-
{
|
404 |
-
"name": "dhii/exception",
|
405 |
-
"version": "v0.1-alpha5",
|
406 |
-
"version_normalized": "0.1.0.0-alpha5",
|
407 |
-
"source": {
|
408 |
-
"type": "git",
|
409 |
-
"url": "https://github.com/Dhii/exception.git",
|
410 |
-
"reference": "f7afb934c970a4e167b2c7ba24fa3df50714e0fe"
|
411 |
-
},
|
412 |
-
"dist": {
|
413 |
-
"type": "zip",
|
414 |
-
"url": "https://api.github.com/repos/Dhii/exception/zipball/f7afb934c970a4e167b2c7ba24fa3df50714e0fe",
|
415 |
-
"reference": "f7afb934c970a4e167b2c7ba24fa3df50714e0fe",
|
416 |
-
"shasum": ""
|
417 |
-
},
|
418 |
-
"require": {
|
419 |
-
"dhii/exception-interface": "^0.2",
|
420 |
-
"dhii/i18n-helper-base": "^0.1",
|
421 |
-
"dhii/normalization-helper-base": "^0.1",
|
422 |
-
"php": "^5.4 | ^7.0"
|
423 |
-
},
|
424 |
-
"replace": {
|
425 |
-
"dhii/exception-helper-base": "0.1-alpha1|0.1-alpha2"
|
426 |
-
},
|
427 |
-
"require-dev": {
|
428 |
-
"codeclimate/php-test-reporter": "<=0.3.2",
|
429 |
-
"dhii/php-cs-fixer-config": "^0.1",
|
430 |
-
"dhii/stringable-interface": "^0.1",
|
431 |
-
"phpunit/phpunit": "^4.8",
|
432 |
-
"ptrofimov/xpmock": "^1.1"
|
433 |
-
},
|
434 |
-
"time": "2018-04-02T15:18:58+00:00",
|
435 |
-
"type": "library",
|
436 |
-
"extra": {
|
437 |
-
"branch-alias": {
|
438 |
-
"dev-develop": "0.1.x-dev"
|
439 |
-
}
|
440 |
-
},
|
441 |
-
"installation-source": "dist",
|
442 |
-
"autoload": {
|
443 |
-
"psr-4": {
|
444 |
-
"Dhii\\Exception\\": "src"
|
445 |
-
}
|
446 |
-
},
|
447 |
-
"notification-url": "https://packagist.org/downloads/",
|
448 |
-
"license": [
|
449 |
-
"MIT"
|
450 |
-
],
|
451 |
-
"authors": [
|
452 |
-
{
|
453 |
-
"name": "Dhii Team",
|
454 |
-
"email": "development@dhii.co"
|
455 |
-
}
|
456 |
-
],
|
457 |
-
"description": "Standards-compliant exception classes"
|
458 |
-
},
|
459 |
-
{
|
460 |
-
"name": "dhii/exception-interface",
|
461 |
-
"version": "v0.2",
|
462 |
-
"version_normalized": "0.2.0.0",
|
463 |
-
"source": {
|
464 |
-
"type": "git",
|
465 |
-
"url": "https://github.com/Dhii/exception-interface.git",
|
466 |
-
"reference": "b69feebf7cb2879cd43977a03342e2393b73f7fb"
|
467 |
-
},
|
468 |
-
"dist": {
|
469 |
-
"type": "zip",
|
470 |
-
"url": "https://api.github.com/repos/Dhii/exception-interface/zipball/b69feebf7cb2879cd43977a03342e2393b73f7fb",
|
471 |
-
"reference": "b69feebf7cb2879cd43977a03342e2393b73f7fb",
|
472 |
-
"shasum": ""
|
473 |
-
},
|
474 |
-
"require": {
|
475 |
-
"dhii/stringable-interface": "^0.1",
|
476 |
-
"php": "^5.3 | ^7.0"
|
477 |
-
},
|
478 |
-
"require-dev": {
|
479 |
-
"codeclimate/php-test-reporter": "<=0.3.2",
|
480 |
-
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
481 |
-
"phpunit/phpunit": "^4.8",
|
482 |
-
"ptrofimov/xpmock": "^1.1"
|
483 |
-
},
|
484 |
-
"time": "2018-08-29T10:42:04+00:00",
|
485 |
-
"type": "library",
|
486 |
-
"extra": {
|
487 |
-
"branch-alias": {
|
488 |
-
"dev-develop": "0.2.x-dev"
|
489 |
-
}
|
490 |
-
},
|
491 |
-
"installation-source": "dist",
|
492 |
-
"autoload": {
|
493 |
-
"psr-4": {
|
494 |
-
"Dhii\\Exception\\": "src"
|
495 |
-
}
|
496 |
-
},
|
497 |
-
"notification-url": "https://packagist.org/downloads/",
|
498 |
-
"license": [
|
499 |
-
"MIT"
|
500 |
-
],
|
501 |
-
"authors": [
|
502 |
-
{
|
503 |
-
"name": "Dhii Team",
|
504 |
-
"email": "development@dhii.co"
|
505 |
-
}
|
506 |
-
],
|
507 |
-
"description": "Interfaces for most common exceptions"
|
508 |
-
},
|
509 |
-
{
|
510 |
-
"name": "dhii/factory-interface",
|
511 |
-
"version": "v0.1",
|
512 |
-
"version_normalized": "0.1.0.0",
|
513 |
-
"source": {
|
514 |
-
"type": "git",
|
515 |
-
"url": "https://github.com/Dhii/factory-interface.git",
|
516 |
-
"reference": "b8d217aec8838e64ccaa770cb03dc164bf6f0515"
|
517 |
-
},
|
518 |
-
"dist": {
|
519 |
-
"type": "zip",
|
520 |
-
"url": "https://api.github.com/repos/Dhii/factory-interface/zipball/b8d217aec8838e64ccaa770cb03dc164bf6f0515",
|
521 |
-
"reference": "b8d217aec8838e64ccaa770cb03dc164bf6f0515",
|
522 |
-
"shasum": ""
|
523 |
-
},
|
524 |
-
"require": {
|
525 |
-
"dhii/exception-interface": "^0.1|^0.2",
|
526 |
-
"php": "^5.3 | ^7.0"
|
527 |
-
},
|
528 |
-
"require-dev": {
|
529 |
-
"codeclimate/php-test-reporter": "<=0.3.2",
|
530 |
-
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
531 |
-
"dhii/stringable-interface": "^0.1",
|
532 |
-
"phpunit/phpunit": "^4.8",
|
533 |
-
"psr/container": "^1.0",
|
534 |
-
"ptrofimov/xpmock": "^1.1"
|
535 |
-
},
|
536 |
-
"time": "2018-08-29T11:15:09+00:00",
|
537 |
-
"type": "library",
|
538 |
-
"extra": {
|
539 |
-
"branch-alias": {
|
540 |
-
"dev-develop": "0.1.x-dev"
|
541 |
-
}
|
542 |
-
},
|
543 |
-
"installation-source": "dist",
|
544 |
-
"autoload": {
|
545 |
-
"psr-4": {
|
546 |
-
"Dhii\\Factory\\": "src"
|
547 |
-
}
|
548 |
-
},
|
549 |
-
"notification-url": "https://packagist.org/downloads/",
|
550 |
-
"license": [
|
551 |
-
"MIT"
|
552 |
-
],
|
553 |
-
"authors": [
|
554 |
-
{
|
555 |
-
"name": "Dhii Team",
|
556 |
-
"email": "development@dhii.co"
|
557 |
-
}
|
558 |
-
],
|
559 |
-
"description": "Interfaces for working with factories."
|
560 |
-
},
|
561 |
-
{
|
562 |
-
"name": "dhii/i18n-helper-base",
|
563 |
-
"version": "v0.1-alpha1",
|
564 |
-
"version_normalized": "0.1.0.0-alpha1",
|
565 |
-
"source": {
|
566 |
-
"type": "git",
|
567 |
-
"url": "https://github.com/Dhii/i18n-helper-base.git",
|
568 |
-
"reference": "fc4c881f3e528ea918588831ebeffb92738f8dd5"
|
569 |
-
},
|
570 |
-
"dist": {
|
571 |
-
"type": "zip",
|
572 |
-
"url": "https://api.github.com/repos/Dhii/i18n-helper-base/zipball/fc4c881f3e528ea918588831ebeffb92738f8dd5",
|
573 |
-
"reference": "fc4c881f3e528ea918588831ebeffb92738f8dd5",
|
574 |
-
"shasum": ""
|
575 |
-
},
|
576 |
-
"require": {
|
577 |
-
"dhii/i18n-interface": "^0.1|^0.2",
|
578 |
-
"php": "^5.4 | ^7.0"
|
579 |
-
},
|
580 |
-
"require-dev": {
|
581 |
-
"codeclimate/php-test-reporter": "<=0.3.2",
|
582 |
-
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
583 |
-
"phpunit/phpunit": "^4.8",
|
584 |
-
"ptrofimov/xpmock": "^1.1"
|
585 |
-
},
|
586 |
-
"time": "2018-03-07T22:38:07+00:00",
|
587 |
-
"type": "library",
|
588 |
-
"extra": {
|
589 |
-
"branch-alias": {
|
590 |
-
"dev-develop": "0.1.x-dev"
|
591 |
-
}
|
592 |
-
},
|
593 |
-
"installation-source": "dist",
|
594 |
-
"autoload": {
|
595 |
-
"psr-4": {
|
596 |
-
"Dhii\\I18n\\": "src"
|
597 |
-
}
|
598 |
-
},
|
599 |
-
"notification-url": "https://packagist.org/downloads/",
|
600 |
-
"license": [
|
601 |
-
"MIT"
|
602 |
-
],
|
603 |
-
"authors": [
|
604 |
-
{
|
605 |
-
"name": "Dhii Team",
|
606 |
-
"email": "development@dhii.co"
|
607 |
-
}
|
608 |
-
],
|
609 |
-
"description": "A base for internationalization consumers",
|
610 |
-
"abandoned": true
|
611 |
-
},
|
612 |
-
{
|
613 |
-
"name": "dhii/i18n-interface",
|
614 |
-
"version": "v0.2",
|
615 |
-
"version_normalized": "0.2.0.0",
|
616 |
-
"source": {
|
617 |
-
"type": "git",
|
618 |
-
"url": "https://github.com/Dhii/i18n-interface.git",
|
619 |
-
"reference": "7eaf0731ba80eea37a5deea6d894a0326e10be67"
|
620 |
-
},
|
621 |
-
"dist": {
|
622 |
-
"type": "zip",
|
623 |
-
"url": "https://api.github.com/repos/Dhii/i18n-interface/zipball/7eaf0731ba80eea37a5deea6d894a0326e10be67",
|
624 |
-
"reference": "7eaf0731ba80eea37a5deea6d894a0326e10be67",
|
625 |
-
"shasum": ""
|
626 |
-
},
|
627 |
-
"require": {
|
628 |
-
"php": "^5.3 | ^7.0"
|
629 |
-
},
|
630 |
-
"require-dev": {
|
631 |
-
"codeclimate/php-test-reporter": "<=0.3.2",
|
632 |
-
"dhii/data-key-value-aware-interface": "^0.1",
|
633 |
-
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
634 |
-
"dhii/stringable-interface": "^0.1",
|
635 |
-
"phpunit/phpunit": "^4.8",
|
636 |
-
"ptrofimov/xpmock": "^1.1"
|
637 |
-
},
|
638 |
-
"time": "2017-03-15T16:01:39+00:00",
|
639 |
-
"type": "library",
|
640 |
-
"installation-source": "dist",
|
641 |
-
"autoload": {
|
642 |
-
"psr-4": {
|
643 |
-
"Dhii\\I18n\\": "src/"
|
644 |
-
}
|
645 |
-
},
|
646 |
-
"notification-url": "https://packagist.org/downloads/",
|
647 |
-
"license": [
|
648 |
-
"MIT"
|
649 |
-
],
|
650 |
-
"authors": [
|
651 |
-
{
|
652 |
-
"name": "Dhii Team",
|
653 |
-
"email": "development@dhii.co"
|
654 |
-
}
|
655 |
-
],
|
656 |
-
"description": "Interfaces for internationalization."
|
657 |
-
},
|
658 |
-
{
|
659 |
-
"name": "dhii/iterator-helper-base",
|
660 |
-
"version": "v0.1-alpha2",
|
661 |
-
"version_normalized": "0.1.0.0-alpha2",
|
662 |
-
"source": {
|
663 |
-
"type": "git",
|
664 |
-
"url": "https://github.com/Dhii/iterator-helper-base.git",
|
665 |
-
"reference": "cf62fb9f8b658a82815f15a2d906d8d1ff5c52ce"
|
666 |
-
},
|
667 |
-
"dist": {
|
668 |
-
"type": "zip",
|
669 |
-
"url": "https://api.github.com/repos/Dhii/iterator-helper-base/zipball/cf62fb9f8b658a82815f15a2d906d8d1ff5c52ce",
|
670 |
-
"reference": "cf62fb9f8b658a82815f15a2d906d8d1ff5c52ce",
|
671 |
-
"shasum": ""
|
672 |
-
},
|
673 |
-
"require": {
|
674 |
-
"dhii/exception": "^0.1-alpha4",
|
675 |
-
"php": "^5.4 | ^7.0"
|
676 |
-
},
|
677 |
-
"require-dev": {
|
678 |
-
"codeclimate/php-test-reporter": "<=0.3.2",
|
679 |
-
"dhii/invocable-interface": "0.1-alpha1",
|
680 |
-
"dhii/php-cs-fixer-config": "^0.1",
|
681 |
-
"dhii/stringable-interface": "^0.1",
|
682 |
-
"phpunit/phpunit": "^4.8",
|
683 |
-
"ptrofimov/xpmock": "dev-master"
|
684 |
-
},
|
685 |
-
"suggest": {
|
686 |
-
"dhii/callback-abstract": "For structural invocation of callables"
|
687 |
-
},
|
688 |
-
"time": "2018-03-22T11:25:07+00:00",
|
689 |
-
"type": "library",
|
690 |
-
"extra": {
|
691 |
-
"branch-alias": {
|
692 |
-
"dev-develop": "0.1.x-dev"
|
693 |
-
}
|
694 |
-
},
|
695 |
-
"installation-source": "dist",
|
696 |
-
"autoload": {
|
697 |
-
"psr-4": {
|
698 |
-
"Dhii\\Iterator\\": "src"
|
699 |
-
}
|
700 |
-
},
|
701 |
-
"notification-url": "https://packagist.org/downloads/",
|
702 |
-
"license": [
|
703 |
-
"MIT"
|
704 |
-
],
|
705 |
-
"authors": [
|
706 |
-
{
|
707 |
-
"name": "Dhii Team",
|
708 |
-
"email": "development@dhii.co"
|
709 |
-
}
|
710 |
-
],
|
711 |
-
"description": "Common functionality for working with iterables"
|
712 |
-
},
|
713 |
-
{
|
714 |
-
"name": "dhii/normalization-helper-base",
|
715 |
-
"version": "v0.1-alpha4",
|
716 |
-
"version_normalized": "0.1.0.0-alpha4",
|
717 |
-
"source": {
|
718 |
-
"type": "git",
|
719 |
-
"url": "https://github.com/Dhii/normalization-helper-base.git",
|
720 |
-
"reference": "1b64f0ea6b3e32f9478f854f6049500795b51da7"
|
721 |
-
},
|
722 |
-
"dist": {
|
723 |
-
"type": "zip",
|
724 |
-
"url": "https://api.github.com/repos/Dhii/normalization-helper-base/zipball/1b64f0ea6b3e32f9478f854f6049500795b51da7",
|
725 |
-
"reference": "1b64f0ea6b3e32f9478f854f6049500795b51da7",
|
726 |
-
"shasum": ""
|
727 |
-
},
|
728 |
-
"require": {
|
729 |
-
"php": "^5.4 | ^7.0"
|
730 |
-
},
|
731 |
-
"require-dev": {
|
732 |
-
"codeclimate/php-test-reporter": "<=0.3.2",
|
733 |
-
"dhii/php-cs-fixer-config": "^0.1",
|
734 |
-
"dhii/stringable-interface": "^0.1",
|
735 |
-
"phpunit/phpunit": "^4.8",
|
736 |
-
"ptrofimov/xpmock": "^1.1"
|
737 |
-
},
|
738 |
-
"time": "2018-06-04T08:55:31+00:00",
|
739 |
-
"type": "library",
|
740 |
-
"extra": {
|
741 |
-
"branch-alias": {
|
742 |
-
"dev-develop": "0.1.x-dev"
|
743 |
-
}
|
744 |
-
},
|
745 |
-
"installation-source": "dist",
|
746 |
-
"autoload": {
|
747 |
-
"psr-4": {
|
748 |
-
"Dhii\\Util\\Normalization\\": "src"
|
749 |
-
}
|
750 |
-
},
|
751 |
-
"notification-url": "https://packagist.org/downloads/",
|
752 |
-
"license": [
|
753 |
-
"MIT"
|
754 |
-
],
|
755 |
-
"authors": [
|
756 |
-
{
|
757 |
-
"name": "Dhii Team",
|
758 |
-
"email": "development@dhii.co"
|
759 |
-
}
|
760 |
-
],
|
761 |
-
"description": "Functionality for normalizing values."
|
762 |
-
},
|
763 |
-
{
|
764 |
-
"name": "dhii/output-renderer-abstract",
|
765 |
-
"version": "v0.1-alpha2",
|
766 |
-
"version_normalized": "0.1.0.0-alpha2",
|
767 |
-
"source": {
|
768 |
-
"type": "git",
|
769 |
-
"url": "https://github.com/Dhii/output-renderer-abstract.git",
|
770 |
-
"reference": "0f6e5eed940025332dd1986d6c771e10f7197b1a"
|
771 |
-
},
|
772 |
-
"dist": {
|
773 |
-
"type": "zip",
|
774 |
-
"url": "https://api.github.com/repos/Dhii/output-renderer-abstract/zipball/0f6e5eed940025332dd1986d6c771e10f7197b1a",
|
775 |
-
"reference": "0f6e5eed940025332dd1986d6c771e10f7197b1a",
|
776 |
-
"shasum": ""
|
777 |
-
},
|
778 |
-
"require": {
|
779 |
-
"dhii/output-renderer-interface": "^0.2 | ^0.3",
|
780 |
-
"php": "^5.4 | ^7.0",
|
781 |
-
"psr/container": "^1.0"
|
782 |
-
},
|
783 |
-
"require-dev": {
|
784 |
-
"codeclimate/php-test-reporter": "<=0.3.2",
|
785 |
-
"dhii/exception-interface": "^0.2-alpha3",
|
786 |
-
"dhii/invocable-interface": "^0.1-alpha1",
|
787 |
-
"dhii/php-cs-fixer-config": "^0.1",
|
788 |
-
"dhii/validation-interface": "^0.1 | ^0.2-alpha1",
|
789 |
-
"phpunit/phpunit": "^4.8",
|
790 |
-
"ptrofimov/xpmock": "^1.1"
|
791 |
-
},
|
792 |
-
"suggest": {
|
793 |
-
"dhii/container-helper-base": "For normalizing context containers"
|
794 |
-
},
|
795 |
-
"time": "2018-05-10T12:31:09+00:00",
|
796 |
-
"type": "library",
|
797 |
-
"extra": {
|
798 |
-
"branch-alias": {
|
799 |
-
"dev-develop": "0.1.x-dev"
|
800 |
-
}
|
801 |
-
},
|
802 |
-
"installation-source": "dist",
|
803 |
-
"autoload": {
|
804 |
-
"psr-4": {
|
805 |
-
"Dhii\\Output\\": "src"
|
806 |
-
}
|
807 |
-
},
|
808 |
-
"notification-url": "https://packagist.org/downloads/",
|
809 |
-
"license": [
|
810 |
-
"MIT"
|
811 |
-
],
|
812 |
-
"authors": [
|
813 |
-
{
|
814 |
-
"name": "Dhii Team",
|
815 |
-
"email": "development@dhii.co"
|
816 |
-
}
|
817 |
-
],
|
818 |
-
"description": "Common abstract functionality for output renderers.",
|
819 |
-
"abandoned": true
|
820 |
-
},
|
821 |
-
{
|
822 |
-
"name": "dhii/output-renderer-base",
|
823 |
-
"version": "v0.1-alpha1",
|
824 |
-
"version_normalized": "0.1.0.0-alpha1",
|
825 |
-
"source": {
|
826 |
-
"type": "git",
|
827 |
-
"url": "https://github.com/Dhii/output-renderer-base.git",
|
828 |
-
"reference": "700483a37016e502be2ead9580bb9258ad8bf17b"
|
829 |
-
},
|
830 |
-
"dist": {
|
831 |
-
"type": "zip",
|
832 |
-
"url": "https://api.github.com/repos/Dhii/output-renderer-base/zipball/700483a37016e502be2ead9580bb9258ad8bf17b",
|
833 |
-
"reference": "700483a37016e502be2ead9580bb9258ad8bf17b",
|
834 |
-
"shasum": ""
|
835 |
-
},
|
836 |
-
"require": {
|
837 |
-
"dhii/container-helper-base": "^0.1-alpha5",
|
838 |
-
"dhii/exception": "^0.1-alpha4",
|
839 |
-
"dhii/i18n-helper-base": "^0.1-alpha1",
|
840 |
-
"dhii/output-renderer-abstract": "^0.1-alpha1",
|
841 |
-
"dhii/output-renderer-interface": "^0.2 | ^0.3-alpha1",
|
842 |
-
"php": "^5.4 | ^7.0"
|
843 |
-
},
|
844 |
-
"require-dev": {
|
845 |
-
"codeclimate/php-test-reporter": "<=0.3.2",
|
846 |
-
"dhii/php-cs-fixer-config": "^0.1",
|
847 |
-
"dhii/stringable-interface": "^0.1",
|
848 |
-
"phpunit/phpunit": "^4.8",
|
849 |
-
"psr/container": "^1.0",
|
850 |
-
"ptrofimov/xpmock": "^1.1"
|
851 |
-
},
|
852 |
-
"time": "2018-04-05T13:32:07+00:00",
|
853 |
-
"type": "library",
|
854 |
-
"extra": {
|
855 |
-
"branch-alias": {
|
856 |
-
"dev-develop": "0.1.x-dev"
|
857 |
-
}
|
858 |
-
},
|
859 |
-
"installation-source": "dist",
|
860 |
-
"autoload": {
|
861 |
-
"psr-4": {
|
862 |
-
"Dhii\\Output\\": "src"
|
863 |
-
}
|
864 |
-
},
|
865 |
-
"notification-url": "https://packagist.org/downloads/",
|
866 |
-
"license": [
|
867 |
-
"MIT"
|
868 |
-
],
|
869 |
-
"authors": [
|
870 |
-
{
|
871 |
-
"name": "Dhii Team",
|
872 |
-
"email": "development@dhii.co"
|
873 |
-
}
|
874 |
-
],
|
875 |
-
"description": "Base concrete functionality for output rendering.",
|
876 |
-
"abandoned": true
|
877 |
-
},
|
878 |
-
{
|
879 |
-
"name": "dhii/output-renderer-interface",
|
880 |
-
"version": "v0.3",
|
881 |
-
"version_normalized": "0.3.0.0",
|
882 |
-
"source": {
|
883 |
-
"type": "git",
|
884 |
-
"url": "https://github.com/Dhii/output-renderer-interface.git",
|
885 |
-
"reference": "407014d7fd1af0427958f2acd61aff008ee9e032"
|
886 |
-
},
|
887 |
-
"dist": {
|
888 |
-
"type": "zip",
|
889 |
-
"url": "https://api.github.com/repos/Dhii/output-renderer-interface/zipball/407014d7fd1af0427958f2acd61aff008ee9e032",
|
890 |
-
"reference": "407014d7fd1af0427958f2acd61aff008ee9e032",
|
891 |
-
"shasum": ""
|
892 |
-
},
|
893 |
-
"require": {
|
894 |
-
"dhii/exception-interface": "^0.1 | ^0.2",
|
895 |
-
"dhii/factory-interface": "^0.1-alpha2",
|
896 |
-
"dhii/stringable-interface": "^0.1",
|
897 |
-
"php": "^5.3 | ^7.0"
|
898 |
-
},
|
899 |
-
"require-dev": {
|
900 |
-
"codeclimate/php-test-reporter": "dev-master",
|
901 |
-
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
902 |
-
"phpunit/phpunit": "4.*",
|
903 |
-
"psr/container": "^1.0",
|
904 |
-
"ptrofimov/xpmock": "^1.1"
|
905 |
-
},
|
906 |
-
"suggest": {
|
907 |
-
"dhii/container-helper-base": "Useful for reading data from different context types uniformly"
|
908 |
-
},
|
909 |
-
"time": "2019-11-14T11:20:00+00:00",
|
910 |
-
"type": "library",
|
911 |
-
"extra": {
|
912 |
-
"branch-alias": {
|
913 |
-
"dev-develop": "0.3.x-dev"
|
914 |
-
}
|
915 |
-
},
|
916 |
-
"installation-source": "dist",
|
917 |
-
"autoload": {
|
918 |
-
"psr-4": {
|
919 |
-
"Dhii\\Output\\": "src/"
|
920 |
-
}
|
921 |
-
},
|
922 |
-
"notification-url": "https://packagist.org/downloads/",
|
923 |
-
"license": [
|
924 |
-
"MIT"
|
925 |
-
],
|
926 |
-
"authors": [
|
927 |
-
{
|
928 |
-
"name": "Dhii Team",
|
929 |
-
"email": "development@dhii.co"
|
930 |
-
}
|
931 |
-
],
|
932 |
-
"description": "An interface for objects that can perform rendering."
|
933 |
-
},
|
934 |
-
{
|
935 |
-
"name": "dhii/stats-abstract",
|
936 |
-
"version": "v0.1.0",
|
937 |
-
"version_normalized": "0.1.0.0",
|
938 |
-
"source": {
|
939 |
-
"type": "git",
|
940 |
-
"url": "https://github.com/Dhii/stats-abstract.git",
|
941 |
-
"reference": "71f6702c3257c71ab3917b6d076d3c3588cc9f49"
|
942 |
-
},
|
943 |
-
"dist": {
|
944 |
-
"type": "zip",
|
945 |
-
"url": "https://api.github.com/repos/Dhii/stats-abstract/zipball/71f6702c3257c71ab3917b6d076d3c3588cc9f49",
|
946 |
-
"reference": "71f6702c3257c71ab3917b6d076d3c3588cc9f49",
|
947 |
-
"shasum": ""
|
948 |
-
},
|
949 |
-
"require": {
|
950 |
-
"dhii/collections-abstract-base": "^0.1.0",
|
951 |
-
"dhii/stats-interface": "^0.1.0"
|
952 |
-
},
|
953 |
-
"require-dev": {
|
954 |
-
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
955 |
-
"phpunit/phpunit": "^4.8",
|
956 |
-
"ptrofimov/xpmock": "^1.1"
|
957 |
-
},
|
958 |
-
"time": "2016-11-10T18:55:43+00:00",
|
959 |
-
"type": "library",
|
960 |
-
"installation-source": "dist",
|
961 |
-
"autoload": {
|
962 |
-
"psr-4": {
|
963 |
-
"Dhii\\Stats\\": "src/"
|
964 |
-
}
|
965 |
-
},
|
966 |
-
"notification-url": "https://packagist.org/downloads/",
|
967 |
-
"license": [
|
968 |
-
"MIT"
|
969 |
-
],
|
970 |
-
"authors": [
|
971 |
-
{
|
972 |
-
"name": "Dhii Team",
|
973 |
-
"email": "development@dhii.co"
|
974 |
-
}
|
975 |
-
],
|
976 |
-
"description": "Abstract base for stats"
|
977 |
-
},
|
978 |
-
{
|
979 |
-
"name": "dhii/stats-interface",
|
980 |
-
"version": "v0.1.0",
|
981 |
-
"version_normalized": "0.1.0.0",
|
982 |
-
"source": {
|
983 |
-
"type": "git",
|
984 |
-
"url": "https://github.com/Dhii/stats-interface.git",
|
985 |
-
"reference": "36d09a8b8a3b8058214dae6eefb8ecdd98e0f0ba"
|
986 |
-
},
|
987 |
-
"dist": {
|
988 |
-
"type": "zip",
|
989 |
-
"url": "https://api.github.com/repos/Dhii/stats-interface/zipball/36d09a8b8a3b8058214dae6eefb8ecdd98e0f0ba",
|
990 |
-
"reference": "36d09a8b8a3b8058214dae6eefb8ecdd98e0f0ba",
|
991 |
-
"shasum": ""
|
992 |
-
},
|
993 |
-
"require": {
|
994 |
-
"php": "^5.3 | ^7.0"
|
995 |
-
},
|
996 |
-
"require-dev": {
|
997 |
-
"dhii/php-cs-fixer-config": "dev-php-5.3"
|
998 |
-
},
|
999 |
-
"time": "2016-11-10T15:38:37+00:00",
|
1000 |
-
"type": "library",
|
1001 |
-
"installation-source": "dist",
|
1002 |
-
"autoload": {
|
1003 |
-
"psr-4": {
|
1004 |
-
"Dhii\\Stats\\": "src/"
|
1005 |
-
}
|
1006 |
-
},
|
1007 |
-
"notification-url": "https://packagist.org/downloads/",
|
1008 |
-
"license": [
|
1009 |
-
"MIT"
|
1010 |
-
],
|
1011 |
-
"authors": [
|
1012 |
-
{
|
1013 |
-
"name": "Dhii Team",
|
1014 |
-
"email": "development@dhii.co"
|
1015 |
-
}
|
1016 |
-
],
|
1017 |
-
"description": "Interfaces for stats"
|
1018 |
-
},
|
1019 |
-
{
|
1020 |
-
"name": "dhii/stringable-interface",
|
1021 |
-
"version": "v0.1",
|
1022 |
-
"version_normalized": "0.1.0.0",
|
1023 |
-
"source": {
|
1024 |
-
"type": "git",
|
1025 |
-
"url": "https://github.com/Dhii/stringable-interface.git",
|
1026 |
-
"reference": "b6653905eef2ebf377749feb80a6d18abbe913ef"
|
1027 |
-
},
|
1028 |
-
"dist": {
|
1029 |
-
"type": "zip",
|
1030 |
-
"url": "https://api.github.com/repos/Dhii/stringable-interface/zipball/b6653905eef2ebf377749feb80a6d18abbe913ef",
|
1031 |
-
"reference": "b6653905eef2ebf377749feb80a6d18abbe913ef",
|
1032 |
-
"shasum": ""
|
1033 |
-
},
|
1034 |
-
"require": {
|
1035 |
-
"php": "^5.3 | ^7.0"
|
1036 |
-
},
|
1037 |
-
"require-dev": {
|
1038 |
-
"codeclimate/php-test-reporter": "<=0.3.2",
|
1039 |
-
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
1040 |
-
"phpunit/phpunit": "^4.8",
|
1041 |
-
"ptrofimov/xpmock": "^1.1"
|
1042 |
-
},
|
1043 |
-
"time": "2017-01-23T15:08:20+00:00",
|
1044 |
-
"type": "library",
|
1045 |
-
"installation-source": "dist",
|
1046 |
-
"autoload": {
|
1047 |
-
"psr-4": {
|
1048 |
-
"Dhii\\Util\\String\\": "src/"
|
1049 |
-
}
|
1050 |
-
},
|
1051 |
-
"notification-url": "https://packagist.org/downloads/",
|
1052 |
-
"license": [
|
1053 |
-
"MIT"
|
1054 |
-
],
|
1055 |
-
"authors": [
|
1056 |
-
{
|
1057 |
-
"name": "Dhii Team",
|
1058 |
-
"email": "development@dhii.co"
|
1059 |
-
}
|
1060 |
-
],
|
1061 |
-
"description": "Interoperability interface for objects that can be cast to string"
|
1062 |
-
},
|
1063 |
-
{
|
1064 |
-
"name": "dhii/transformer-interface",
|
1065 |
-
"version": "v0.1-alpha1",
|
1066 |
-
"version_normalized": "0.1.0.0-alpha1",
|
1067 |
-
"source": {
|
1068 |
-
"type": "git",
|
1069 |
-
"url": "https://github.com/Dhii/transformer-interface.git",
|
1070 |
-
"reference": "e774efef46413eb34bdafc19a6bd74fbf656235d"
|
1071 |
-
},
|
1072 |
-
"dist": {
|
1073 |
-
"type": "zip",
|
1074 |
-
"url": "https://api.github.com/repos/Dhii/transformer-interface/zipball/e774efef46413eb34bdafc19a6bd74fbf656235d",
|
1075 |
-
"reference": "e774efef46413eb34bdafc19a6bd74fbf656235d",
|
1076 |
-
"shasum": ""
|
1077 |
-
},
|
1078 |
-
"require": {
|
1079 |
-
"dhii/exception-interface": "^0.1 | ^0.2-alpha1",
|
1080 |
-
"dhii/factory-interface": "^0.1-alpha1",
|
1081 |
-
"php": "^5.3 | ^7.0"
|
1082 |
-
},
|
1083 |
-
"require-dev": {
|
1084 |
-
"codeclimate/php-test-reporter": "<=0.3.2",
|
1085 |
-
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
1086 |
-
"phpunit/phpunit": "^4.8",
|
1087 |
-
"ptrofimov/xpmock": "^1.1"
|
1088 |
-
},
|
1089 |
-
"time": "2018-05-15T16:59:05+00:00",
|
1090 |
-
"type": "library",
|
1091 |
-
"extra": {
|
1092 |
-
"branch-alias": {
|
1093 |
-
"dev-develop": "0.1.x-dev"
|
1094 |
-
}
|
1095 |
-
},
|
1096 |
-
"installation-source": "dist",
|
1097 |
-
"autoload": {
|
1098 |
-
"psr-4": {
|
1099 |
-
"Dhii\\Transformer\\": "src"
|
1100 |
-
}
|
1101 |
-
},
|
1102 |
-
"notification-url": "https://packagist.org/downloads/",
|
1103 |
-
"license": [
|
1104 |
-
"MIT"
|
1105 |
-
],
|
1106 |
-
"authors": [
|
1107 |
-
{
|
1108 |
-
"name": "Dhii Team",
|
1109 |
-
"email": "development@dhii.co"
|
1110 |
-
}
|
1111 |
-
],
|
1112 |
-
"description": "Interfaces for data transformation"
|
1113 |
-
},
|
1114 |
-
{
|
1115 |
-
"name": "dhii/validation-abstract",
|
1116 |
-
"version": "v0.2-alpha1",
|
1117 |
-
"version_normalized": "0.2.0.0-alpha1",
|
1118 |
-
"source": {
|
1119 |
-
"type": "git",
|
1120 |
-
"url": "https://github.com/Dhii/validation-abstract.git",
|
1121 |
-
"reference": "dff998ba3476927a0fc6d10bb022425de8f1c844"
|
1122 |
-
},
|
1123 |
-
"dist": {
|
1124 |
-
"type": "zip",
|
1125 |
-
"url": "https://api.github.com/repos/Dhii/validation-abstract/zipball/dff998ba3476927a0fc6d10bb022425de8f1c844",
|
1126 |
-
"reference": "dff998ba3476927a0fc6d10bb022425de8f1c844",
|
1127 |
-
"shasum": ""
|
1128 |
-
},
|
1129 |
-
"require": {
|
1130 |
-
"dhii/validation-interface": "^0.2",
|
1131 |
-
"php": "^5.3 | ^7.0"
|
1132 |
-
},
|
1133 |
-
"require-dev": {
|
1134 |
-
"codeclimate/php-test-reporter": "<=0.3.2",
|
1135 |
-
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
1136 |
-
"dhii/stringable-interface": "^0.1",
|
1137 |
-
"phpunit/phpunit": "^4.8",
|
1138 |
-
"ptrofimov/xpmock": "^1.1"
|
1139 |
-
},
|
1140 |
-
"suggest": {
|
1141 |
-
"dhii/i18n-helper-base": "For string internationalization",
|
1142 |
-
"dhii/iterator-helper-base": "For implementations of iterable-related helper functionality",
|
1143 |
-
"dhii/normalization-helper-base": "For simple types normalization",
|
1144 |
-
"dhii/stringable-interface": "To be able to pass stringable objects instead of strings",
|
1145 |
-
"dhii/validation-interface": "Needed to be able to create exceptions that are expected to be thrown"
|
1146 |
-
},
|
1147 |
-
"time": "2018-03-07T21:05:39+00:00",
|
1148 |
-
"type": "library",
|
1149 |
-
"extra": {
|
1150 |
-
"branch-alias": {
|
1151 |
-
"dev-develop": "0.2.x-dev"
|
1152 |
-
}
|
1153 |
-
},
|
1154 |
-
"installation-source": "dist",
|
1155 |
-
"autoload": {
|
1156 |
-
"psr-4": {
|
1157 |
-
"Dhii\\Validation\\": "src/"
|
1158 |
-
}
|
1159 |
-
},
|
1160 |
-
"notification-url": "https://packagist.org/downloads/",
|
1161 |
-
"license": [
|
1162 |
-
"MIT"
|
1163 |
-
],
|
1164 |
-
"authors": [
|
1165 |
-
{
|
1166 |
-
"name": "Dhii Team",
|
1167 |
-
"email": "development@dhii.co"
|
1168 |
-
}
|
1169 |
-
],
|
1170 |
-
"description": "Common abstract functionality for validation."
|
1171 |
-
},
|
1172 |
-
{
|
1173 |
-
"name": "dhii/validation-base",
|
1174 |
-
"version": "v0.2-alpha2",
|
1175 |
-
"version_normalized": "0.2.0.0-alpha2",
|
1176 |
-
"source": {
|
1177 |
-
"type": "git",
|
1178 |
-
"url": "https://github.com/Dhii/validation-base.git",
|
1179 |
-
"reference": "9e75c5f886a2403c6989c36c2d4ffcfae158172e"
|
1180 |
-
},
|
1181 |
-
"dist": {
|
1182 |
-
"type": "zip",
|
1183 |
-
"url": "https://api.github.com/repos/Dhii/validation-base/zipball/9e75c5f886a2403c6989c36c2d4ffcfae158172e",
|
1184 |
-
"reference": "9e75c5f886a2403c6989c36c2d4ffcfae158172e",
|
1185 |
-
"shasum": ""
|
1186 |
-
},
|
1187 |
-
"require": {
|
1188 |
-
"dhii/exception": "^0.1-alpha4",
|
1189 |
-
"dhii/i18n-helper-base": "^0.1",
|
1190 |
-
"dhii/iterator-helper-base": "^0.1",
|
1191 |
-
"dhii/normalization-helper-base": "^0.1",
|
1192 |
-
"dhii/validation-abstract": "^0.2",
|
1193 |
-
"dhii/validation-interface": "^0.2-alpha2",
|
1194 |
-
"php": "^5.4 | ^7.0"
|
1195 |
-
},
|
1196 |
-
"require-dev": {
|
1197 |
-
"codeclimate/php-test-reporter": "<=0.3.2",
|
1198 |
-
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
1199 |
-
"phpunit/phpunit": "^4.8",
|
1200 |
-
"ptrofimov/xpmock": "^1.1"
|
1201 |
-
},
|
1202 |
-
"time": "2018-04-02T13:31:36+00:00",
|
1203 |
-
"type": "library",
|
1204 |
-
"extra": {
|
1205 |
-
"branch-alias": {
|
1206 |
-
"dev-develop": "0.2.x-dev"
|
1207 |
-
}
|
1208 |
-
},
|
1209 |
-
"installation-source": "dist",
|
1210 |
-
"autoload": {
|
1211 |
-
"psr-4": {
|
1212 |
-
"Dhii\\Validation\\": "src/"
|
1213 |
-
}
|
1214 |
-
},
|
1215 |
-
"notification-url": "https://packagist.org/downloads/",
|
1216 |
-
"license": [
|
1217 |
-
"MIT"
|
1218 |
-
],
|
1219 |
-
"authors": [
|
1220 |
-
{
|
1221 |
-
"name": "Dhii Team",
|
1222 |
-
"email": "development@dhii.co"
|
1223 |
-
}
|
1224 |
-
],
|
1225 |
-
"description": "Base concrete functionality for validation."
|
1226 |
-
},
|
1227 |
-
{
|
1228 |
-
"name": "dhii/validation-interface",
|
1229 |
-
"version": "v0.2",
|
1230 |
-
"version_normalized": "0.2.0.0",
|
1231 |
-
"source": {
|
1232 |
-
"type": "git",
|
1233 |
-
"url": "https://github.com/Dhii/validation-interface.git",
|
1234 |
-
"reference": "a26026ae5cdf0a650b3511a22dbcb9329073b82c"
|
1235 |
-
},
|
1236 |
-
"dist": {
|
1237 |
-
"type": "zip",
|
1238 |
-
"url": "https://api.github.com/repos/Dhii/validation-interface/zipball/a26026ae5cdf0a650b3511a22dbcb9329073b82c",
|
1239 |
-
"reference": "a26026ae5cdf0a650b3511a22dbcb9329073b82c",
|
1240 |
-
"shasum": ""
|
1241 |
-
},
|
1242 |
-
"require": {
|
1243 |
-
"dhii/exception-interface": "^0.1|^0.2",
|
1244 |
-
"dhii/factory-interface": "^0.1",
|
1245 |
-
"php": "^5.3 | ^7.0"
|
1246 |
-
},
|
1247 |
-
"require-dev": {
|
1248 |
-
"codeclimate/php-test-reporter": "<=0.3.2",
|
1249 |
-
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
1250 |
-
"dhii/stringable-interface": "^0.1",
|
1251 |
-
"phpunit/phpunit": "^4.8",
|
1252 |
-
"ptrofimov/xpmock": "^1.1"
|
1253 |
-
},
|
1254 |
-
"time": "2018-08-29T11:39:22+00:00",
|
1255 |
-
"type": "library",
|
1256 |
-
"extra": {
|
1257 |
-
"branch-alias": {
|
1258 |
-
"dev-develop": "0.3.x-dev"
|
1259 |
-
}
|
1260 |
-
},
|
1261 |
-
"installation-source": "dist",
|
1262 |
-
"autoload": {
|
1263 |
-
"psr-4": {
|
1264 |
-
"Dhii\\Validation\\": "src/"
|
1265 |
-
}
|
1266 |
-
},
|
1267 |
-
"notification-url": "https://packagist.org/downloads/",
|
1268 |
-
"license": [
|
1269 |
-
"MIT"
|
1270 |
-
],
|
1271 |
-
"authors": [
|
1272 |
-
{
|
1273 |
-
"name": "Dhii Team",
|
1274 |
-
"email": "development@dhii.co"
|
1275 |
-
}
|
1276 |
-
],
|
1277 |
-
"description": "A base interface for validators"
|
1278 |
-
},
|
1279 |
-
{
|
1280 |
-
"name": "erusev/parsedown",
|
1281 |
-
"version": "1.7.4",
|
1282 |
-
"version_normalized": "1.7.4.0",
|
1283 |
-
"source": {
|
1284 |
-
"type": "git",
|
1285 |
-
"url": "https://github.com/erusev/parsedown.git",
|
1286 |
-
"reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3"
|
1287 |
-
},
|
1288 |
-
"dist": {
|
1289 |
-
"type": "zip",
|
1290 |
-
"url": "https://api.github.com/repos/erusev/parsedown/zipball/cb17b6477dfff935958ba01325f2e8a2bfa6dab3",
|
1291 |
-
"reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3",
|
1292 |
-
"shasum": ""
|
1293 |
-
},
|
1294 |
-
"require": {
|
1295 |
-
"ext-mbstring": "*",
|
1296 |
-
"php": ">=5.3.0"
|
1297 |
-
},
|
1298 |
-
"require-dev": {
|
1299 |
-
"phpunit/phpunit": "^4.8.35"
|
1300 |
-
},
|
1301 |
-
"time": "2019-12-30T22:54:17+00:00",
|
1302 |
-
"type": "library",
|
1303 |
-
"installation-source": "dist",
|
1304 |
-
"autoload": {
|
1305 |
-
"psr-0": {
|
1306 |
-
"Parsedown": ""
|
1307 |
-
}
|
1308 |
-
},
|
1309 |
-
"notification-url": "https://packagist.org/downloads/",
|
1310 |
-
"license": [
|
1311 |
-
"MIT"
|
1312 |
-
],
|
1313 |
-
"authors": [
|
1314 |
-
{
|
1315 |
-
"name": "Emanuil Rusev",
|
1316 |
-
"email": "hello@erusev.com",
|
1317 |
-
"homepage": "http://erusev.com"
|
1318 |
-
}
|
1319 |
-
],
|
1320 |
-
"description": "Parser for Markdown.",
|
1321 |
-
"homepage": "http://parsedown.org",
|
1322 |
-
"keywords": [
|
1323 |
-
"markdown",
|
1324 |
-
"parser"
|
1325 |
-
]
|
1326 |
-
},
|
1327 |
-
{
|
1328 |
-
"name": "php-di/invoker",
|
1329 |
-
"version": "1.3.3",
|
1330 |
-
"version_normalized": "1.3.3.0",
|
1331 |
-
"source": {
|
1332 |
-
"type": "git",
|
1333 |
-
"url": "https://github.com/PHP-DI/Invoker.git",
|
1334 |
-
"reference": "1f4ca63b9abc66109e53b255e465d0ddb5c2e3f7"
|
1335 |
-
},
|
1336 |
-
"dist": {
|
1337 |
-
"type": "zip",
|
1338 |
-
"url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/1f4ca63b9abc66109e53b255e465d0ddb5c2e3f7",
|
1339 |
-
"reference": "1f4ca63b9abc66109e53b255e465d0ddb5c2e3f7",
|
1340 |
-
"shasum": ""
|
1341 |
-
},
|
1342 |
-
"require": {
|
1343 |
-
"container-interop/container-interop": "~1.1"
|
1344 |
-
},
|
1345 |
-
"require-dev": {
|
1346 |
-
"athletic/athletic": "~0.1.8",
|
1347 |
-
"phpunit/phpunit": "~4.5"
|
1348 |
-
},
|
1349 |
-
"time": "2016-07-14T13:09:58+00:00",
|
1350 |
-
"type": "library",
|
1351 |
-
"installation-source": "dist",
|
1352 |
-
"autoload": {
|
1353 |
-
"psr-4": {
|
1354 |
-
"Invoker\\": "src/"
|
1355 |
-
}
|
1356 |
-
},
|
1357 |
-
"notification-url": "https://packagist.org/downloads/",
|
1358 |
-
"license": [
|
1359 |
-
"MIT"
|
1360 |
-
],
|
1361 |
-
"description": "Generic and extensible callable invoker",
|
1362 |
-
"homepage": "https://github.com/PHP-DI/Invoker",
|
1363 |
-
"keywords": [
|
1364 |
-
"callable",
|
1365 |
-
"dependency",
|
1366 |
-
"dependency-injection",
|
1367 |
-
"injection",
|
1368 |
-
"invoke",
|
1369 |
-
"invoker"
|
1370 |
-
]
|
1371 |
-
},
|
1372 |
-
{
|
1373 |
-
"name": "php-di/php-di",
|
1374 |
-
"version": "5.2.2",
|
1375 |
-
"version_normalized": "5.2.2.0",
|
1376 |
-
"source": {
|
1377 |
-
"type": "git",
|
1378 |
-
"url": "https://github.com/PHP-DI/PHP-DI.git",
|
1379 |
-
"reference": "f574bcc841201ab04587b1c6da1234d4044f67d8"
|
1380 |
-
},
|
1381 |
-
"dist": {
|
1382 |
-
"type": "zip",
|
1383 |
-
"url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/f574bcc841201ab04587b1c6da1234d4044f67d8",
|
1384 |
-
"reference": "f574bcc841201ab04587b1c6da1234d4044f67d8",
|
1385 |
-
"shasum": ""
|
1386 |
-
},
|
1387 |
-
"require": {
|
1388 |
-
"container-interop/container-interop": "~1.0",
|
1389 |
-
"php": ">=5.4.0",
|
1390 |
-
"php-di/invoker": "^1.1.1",
|
1391 |
-
"php-di/phpdoc-reader": "^2.0.1"
|
1392 |
-
},
|
1393 |
-
"replace": {
|
1394 |
-
"mnapoli/php-di": "*"
|
1395 |
-
},
|
1396 |
-
"require-dev": {
|
1397 |
-
"doctrine/annotations": "~1.2",
|
1398 |
-
"doctrine/cache": "~1.4",
|
1399 |
-
"mnapoli/phpunit-easymock": "~0.2.0",
|
1400 |
-
"ocramius/proxy-manager": "~1.0",
|
1401 |
-
"phpunit/phpunit": "~4.5"
|
1402 |
-
},
|
1403 |
-
"suggest": {
|
1404 |
-
"doctrine/annotations": "Install it if you want to use annotations (version ~1.2)",
|
1405 |
-
"doctrine/cache": "Install it if you want to use the cache (version ~1.4)",
|
1406 |
-
"ocramius/proxy-manager": "Install it if you want to use lazy injection (version ~1.0)"
|
1407 |
-
},
|
1408 |
-
"time": "2016-02-09T22:00:00+00:00",
|
1409 |
-
"type": "library",
|
1410 |
-
"installation-source": "dist",
|
1411 |
-
"autoload": {
|
1412 |
-
"psr-4": {
|
1413 |
-
"DI\\": "src/DI/"
|
1414 |
-
},
|
1415 |
-
"files": [
|
1416 |
-
"src/DI/functions.php"
|
1417 |
-
]
|
1418 |
-
},
|
1419 |
-
"notification-url": "https://packagist.org/downloads/",
|
1420 |
-
"license": [
|
1421 |
-
"MIT"
|
1422 |
-
],
|
1423 |
-
"description": "The dependency injection container for humans",
|
1424 |
-
"homepage": "http://php-di.org/",
|
1425 |
-
"keywords": [
|
1426 |
-
"container",
|
1427 |
-
"dependency injection",
|
1428 |
-
"di"
|
1429 |
-
]
|
1430 |
-
},
|
1431 |
-
{
|
1432 |
-
"name": "php-di/phpdoc-reader",
|
1433 |
-
"version": "2.1.1",
|
1434 |
-
"version_normalized": "2.1.1.0",
|
1435 |
-
"source": {
|
1436 |
-
"type": "git",
|
1437 |
-
"url": "https://github.com/PHP-DI/PhpDocReader.git",
|
1438 |
-
"reference": "15678f7451c020226807f520efb867ad26fbbfcf"
|
1439 |
-
},
|
1440 |
-
"dist": {
|
1441 |
-
"type": "zip",
|
1442 |
-
"url": "https://api.github.com/repos/PHP-DI/PhpDocReader/zipball/15678f7451c020226807f520efb867ad26fbbfcf",
|
1443 |
-
"reference": "15678f7451c020226807f520efb867ad26fbbfcf",
|
1444 |
-
"shasum": ""
|
1445 |
-
},
|
1446 |
-
"require": {
|
1447 |
-
"php": ">=5.4.0"
|
1448 |
-
},
|
1449 |
-
"require-dev": {
|
1450 |
-
"phpunit/phpunit": "~4.6"
|
1451 |
-
},
|
1452 |
-
"time": "2019-09-26T11:24:58+00:00",
|
1453 |
-
"type": "library",
|
1454 |
-
"installation-source": "dist",
|
1455 |
-
"autoload": {
|
1456 |
-
"psr-4": {
|
1457 |
-
"PhpDocReader\\": "src/PhpDocReader"
|
1458 |
-
}
|
1459 |
-
},
|
1460 |
-
"notification-url": "https://packagist.org/downloads/",
|
1461 |
-
"license": [
|
1462 |
-
"MIT"
|
1463 |
-
],
|
1464 |
-
"description": "PhpDocReader parses @var and @param values in PHP docblocks (supports namespaced class names with the same resolution rules as PHP)",
|
1465 |
-
"keywords": [
|
1466 |
-
"phpdoc",
|
1467 |
-
"reflection"
|
1468 |
-
]
|
1469 |
-
},
|
1470 |
-
{
|
1471 |
-
"name": "psr/container",
|
1472 |
-
"version": "1.0.0",
|
1473 |
-
"version_normalized": "1.0.0.0",
|
1474 |
-
"source": {
|
1475 |
-
"type": "git",
|
1476 |
-
"url": "https://github.com/php-fig/container.git",
|
1477 |
-
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
|
1478 |
-
},
|
1479 |
-
"dist": {
|
1480 |
-
"type": "zip",
|
1481 |
-
"url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
|
1482 |
-
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
|
1483 |
-
"shasum": ""
|
1484 |
-
},
|
1485 |
-
"require": {
|
1486 |
-
"php": ">=5.3.0"
|
1487 |
-
},
|
1488 |
-
"time": "2017-02-14T16:28:37+00:00",
|
1489 |
-
"type": "library",
|
1490 |
-
"extra": {
|
1491 |
-
"branch-alias": {
|
1492 |
-
"dev-master": "1.0.x-dev"
|
1493 |
-
}
|
1494 |
-
},
|
1495 |
-
"installation-source": "dist",
|
1496 |
-
"autoload": {
|
1497 |
-
"psr-4": {
|
1498 |
-
"Psr\\Container\\": "src/"
|
1499 |
-
}
|
1500 |
-
},
|
1501 |
-
"notification-url": "https://packagist.org/downloads/",
|
1502 |
-
"license": [
|
1503 |
-
"MIT"
|
1504 |
-
],
|
1505 |
-
"authors": [
|
1506 |
-
{
|
1507 |
-
"name": "PHP-FIG",
|
1508 |
-
"homepage": "http://www.php-fig.org/"
|
1509 |
-
}
|
1510 |
-
],
|
1511 |
-
"description": "Common Container Interface (PHP FIG PSR-11)",
|
1512 |
-
"homepage": "https://github.com/php-fig/container",
|
1513 |
-
"keywords": [
|
1514 |
-
"PSR-11",
|
1515 |
-
"container",
|
1516 |
-
"container-interface",
|
1517 |
-
"container-interop",
|
1518 |
-
"psr"
|
1519 |
-
]
|
1520 |
-
},
|
1521 |
-
{
|
1522 |
-
"name": "psr/log",
|
1523 |
-
"version": "1.1.2",
|
1524 |
-
"version_normalized": "1.1.2.0",
|
1525 |
-
"source": {
|
1526 |
-
"type": "git",
|
1527 |
-
"url": "https://github.com/php-fig/log.git",
|
1528 |
-
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
|
1529 |
-
},
|
1530 |
-
"dist": {
|
1531 |
-
"type": "zip",
|
1532 |
-
"url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
|
1533 |
-
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
|
1534 |
-
"shasum": ""
|
1535 |
-
},
|
1536 |
-
"require": {
|
1537 |
-
"php": ">=5.3.0"
|
1538 |
-
},
|
1539 |
-
"time": "2019-11-01T11:05:21+00:00",
|
1540 |
-
"type": "library",
|
1541 |
-
"extra": {
|
1542 |
-
"branch-alias": {
|
1543 |
-
"dev-master": "1.1.x-dev"
|
1544 |
-
}
|
1545 |
-
},
|
1546 |
-
"installation-source": "dist",
|
1547 |
-
"autoload": {
|
1548 |
-
"psr-4": {
|
1549 |
-
"Psr\\Log\\": "Psr/Log/"
|
1550 |
-
}
|
1551 |
-
},
|
1552 |
-
"notification-url": "https://packagist.org/downloads/",
|
1553 |
-
"license": [
|
1554 |
-
"MIT"
|
1555 |
-
],
|
1556 |
-
"authors": [
|
1557 |
-
{
|
1558 |
-
"name": "PHP-FIG",
|
1559 |
-
"homepage": "http://www.php-fig.org/"
|
1560 |
-
}
|
1561 |
-
],
|
1562 |
-
"description": "Common interface for logging libraries",
|
1563 |
-
"homepage": "https://github.com/php-fig/log",
|
1564 |
-
"keywords": [
|
1565 |
-
"log",
|
1566 |
-
"psr",
|
1567 |
-
"psr-3"
|
1568 |
-
]
|
1569 |
-
},
|
1570 |
-
{
|
1571 |
-
"name": "rebelcode/composer-cleanup-plugin",
|
1572 |
-
"version": "dev-master",
|
1573 |
-
"version_normalized": "9999999-dev",
|
1574 |
-
"source": {
|
1575 |
-
"type": "git",
|
1576 |
-
"url": "https://github.com/RebelCode/composer-cleanup-plugin.git",
|
1577 |
-
"reference": "d035eb045eeb88b5029c2974e14e328f250ff25a"
|
1578 |
-
},
|
1579 |
-
"dist": {
|
1580 |
-
"type": "zip",
|
1581 |
-
"url": "https://api.github.com/repos/RebelCode/composer-cleanup-plugin/zipball/d035eb045eeb88b5029c2974e14e328f250ff25a",
|
1582 |
-
"reference": "d035eb045eeb88b5029c2974e14e328f250ff25a",
|
1583 |
-
"shasum": ""
|
1584 |
-
},
|
1585 |
-
"require": {
|
1586 |
-
"composer-plugin-api": "^1.0"
|
1587 |
-
},
|
1588 |
-
"time": "2019-05-29T12:49:11+00:00",
|
1589 |
-
"type": "composer-plugin",
|
1590 |
-
"extra": {
|
1591 |
-
"branch-alias": {
|
1592 |
-
"dev-master": "0.1-dev"
|
1593 |
},
|
1594 |
-
"
|
1595 |
-
|
1596 |
-
|
1597 |
-
|
1598 |
-
|
1599 |
-
|
1600 |
-
|
1601 |
-
|
1602 |
-
|
1603 |
-
|
1604 |
-
"
|
1605 |
-
|
1606 |
-
|
1607 |
-
|
1608 |
-
|
1609 |
-
|
1610 |
-
},
|
1611 |
-
|
1612 |
-
|
1613 |
-
"
|
1614 |
-
|
1615 |
-
|
1616 |
-
|
1617 |
-
|
1618 |
-
|
1619 |
-
|
1620 |
-
|
1621 |
-
|
1622 |
-
|
1623 |
-
"
|
1624 |
-
"
|
1625 |
-
|
1626 |
-
|
1627 |
-
|
1628 |
-
|
1629 |
-
"
|
1630 |
-
|
1631 |
-
|
1632 |
-
|
1633 |
-
|
1634 |
-
|
1635 |
-
|
1636 |
-
|
1637 |
-
|
1638 |
-
|
1639 |
-
|
1640 |
-
|
1641 |
-
|
1642 |
-
|
1643 |
-
|
1644 |
-
|
1645 |
-
|
1646 |
-
|
1647 |
-
|
1648 |
-
|
1649 |
-
|
1650 |
-
|
1651 |
-
"
|
1652 |
-
|
1653 |
-
|
1654 |
-
|
1655 |
-
|
1656 |
-
|
1657 |
-
"
|
1658 |
-
|
1659 |
-
|
1660 |
-
|
1661 |
-
"
|
1662 |
-
|
1663 |
-
|
1664 |
-
|
1665 |
-
"
|
1666 |
-
"
|
1667 |
-
|
1668 |
-
|
1669 |
-
|
1670 |
-
|
1671 |
-
|
1672 |
-
|
1673 |
-
|
1674 |
-
"
|
1675 |
-
|
1676 |
-
|
1677 |
-
|
1678 |
-
|
1679 |
-
|
1680 |
-
|
1681 |
-
|
1682 |
-
|
1683 |
-
|
1684 |
-
|
1685 |
-
|
1686 |
-
|
1687 |
-
|
1688 |
-
"
|
1689 |
-
|
1690 |
-
|
1691 |
-
"
|
1692 |
-
|
1693 |
-
|
1694 |
-
|
1695 |
-
|
1696 |
-
|
1697 |
-
"
|
1698 |
-
|
1699 |
-
|
1700 |
-
|
1701 |
-
|
1702 |
-
"
|
1703 |
-
|
1704 |
-
|
1705 |
-
|
1706 |
-
"
|
1707 |
-
"
|
1708 |
-
}
|
1709 |
-
|
1710 |
-
|
1711 |
-
|
1712 |
-
|
1713 |
-
"
|
1714 |
-
},
|
1715 |
-
"
|
1716 |
-
"
|
1717 |
-
|
1718 |
-
|
1719 |
-
|
1720 |
-
|
1721 |
-
|
1722 |
-
|
1723 |
-
|
1724 |
-
|
1725 |
-
|
1726 |
-
|
1727 |
-
|
1728 |
-
|
1729 |
-
|
1730 |
-
|
1731 |
-
}
|
1732 |
-
|
1733 |
-
|
1734 |
-
|
1735 |
-
|
1736 |
-
"
|
1737 |
-
|
1738 |
-
|
1739 |
-
|
1740 |
-
|
1741 |
-
|
1742 |
-
|
1743 |
-
|
1744 |
-
|
1745 |
-
|
1746 |
-
|
1747 |
-
|
1748 |
-
|
1749 |
-
|
1750 |
-
|
1751 |
-
|
1752 |
-
"url": "https://
|
1753 |
-
"
|
1754 |
-
}
|
1755 |
-
|
1756 |
-
|
1757 |
-
|
1758 |
-
|
1759 |
-
|
1760 |
-
|
1761 |
-
|
1762 |
-
|
1763 |
-
|
1764 |
-
"
|
1765 |
-
|
1766 |
-
|
1767 |
-
|
1768 |
-
|
1769 |
-
"
|
1770 |
-
"
|
1771 |
-
|
1772 |
-
|
1773 |
-
|
1774 |
-
|
1775 |
-
|
1776 |
-
|
1777 |
-
"
|
1778 |
-
|
1779 |
-
|
1780 |
-
|
1781 |
-
"
|
1782 |
-
|
1783 |
-
|
1784 |
-
|
1785 |
-
|
1786 |
-
|
1787 |
-
"
|
1788 |
-
"
|
1789 |
-
},
|
1790 |
-
|
1791 |
-
|
1792 |
-
|
1793 |
-
"
|
1794 |
-
|
1795 |
-
|
1796 |
-
|
1797 |
-
|
1798 |
-
|
1799 |
-
"
|
1800 |
-
"
|
1801 |
-
|
1802 |
-
|
1803 |
-
"
|
1804 |
-
|
1805 |
-
|
1806 |
-
|
1807 |
-
|
1808 |
-
"
|
1809 |
-
|
1810 |
-
|
1811 |
-
|
1812 |
-
"
|
1813 |
-
"
|
1814 |
-
|
1815 |
-
|
1816 |
-
|
1817 |
-
|
1818 |
-
|
1819 |
-
|
1820 |
-
|
1821 |
-
|
1822 |
-
|
1823 |
-
|
1824 |
-
|
1825 |
-
|
1826 |
-
|
1827 |
-
|
1828 |
-
|
1829 |
-
"url": "https://
|
1830 |
-
"
|
1831 |
-
|
1832 |
-
|
1833 |
-
"
|
1834 |
-
|
1835 |
-
|
1836 |
-
|
1837 |
-
|
1838 |
-
|
1839 |
-
"
|
1840 |
-
|
1841 |
-
|
1842 |
-
|
1843 |
-
"
|
1844 |
-
|
1845 |
-
|
1846 |
-
"
|
1847 |
-
|
1848 |
-
|
1849 |
-
|
1850 |
-
|
1851 |
-
"
|
1852 |
-
"
|
1853 |
-
|
1854 |
-
|
1855 |
-
|
1856 |
-
|
1857 |
-
"
|
1858 |
-
"
|
1859 |
-
|
1860 |
-
|
1861 |
-
"
|
1862 |
-
|
1863 |
-
|
1864 |
-
|
1865 |
-
|
1866 |
-
|
1867 |
-
|
1868 |
-
|
1869 |
-
|
1870 |
-
"
|
1871 |
-
"
|
1872 |
-
}
|
1873 |
-
|
1874 |
-
|
1875 |
-
|
1876 |
-
"
|
1877 |
-
|
1878 |
-
|
1879 |
-
|
1880 |
-
|
1881 |
-
|
1882 |
-
|
1883 |
-
|
1884 |
-
|
1885 |
-
"
|
1886 |
-
|
1887 |
-
|
1888 |
-
|
1889 |
-
|
1890 |
-
|
1891 |
-
"
|
1892 |
-
"
|
1893 |
-
|
1894 |
-
|
1895 |
-
|
1896 |
-
|
1897 |
-
"
|
1898 |
-
|
1899 |
-
|
1900 |
-
|
1901 |
-
"
|
1902 |
-
"
|
1903 |
-
|
1904 |
-
|
1905 |
-
|
1906 |
-
|
1907 |
-
|
1908 |
-
|
1909 |
-
|
1910 |
-
|
1911 |
-
|
1912 |
-
|
1913 |
-
|
1914 |
-
|
1915 |
-
|
1916 |
-
|
1917 |
-
"
|
1918 |
-
|
1919 |
-
|
1920 |
-
|
1921 |
-
|
1922 |
-
|
1923 |
-
|
1924 |
-
|
1925 |
-
|
1926 |
-
|
1927 |
-
|
1928 |
-
|
1929 |
-
|
1930 |
-
|
1931 |
-
|
1932 |
-
|
1933 |
-
|
1934 |
-
|
1935 |
-
|
1936 |
-
|
1937 |
-
"
|
1938 |
-
|
1939 |
-
|
1940 |
-
|
1941 |
-
|
1942 |
-
|
1943 |
-
|
1944 |
-
|
1945 |
-
"
|
1946 |
-
|
1947 |
-
|
1948 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"packages": [
|
3 |
+
{
|
4 |
+
"name": "container-interop/container-interop",
|
5 |
+
"version": "1.2.0",
|
6 |
+
"version_normalized": "1.2.0.0",
|
7 |
+
"source": {
|
8 |
+
"type": "git",
|
9 |
+
"url": "https://github.com/container-interop/container-interop.git",
|
10 |
+
"reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
},
|
12 |
+
"dist": {
|
13 |
+
"type": "zip",
|
14 |
+
"url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8",
|
15 |
+
"reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8",
|
16 |
+
"shasum": ""
|
17 |
+
},
|
18 |
+
"require": {
|
19 |
+
"psr/container": "^1.0"
|
20 |
+
},
|
21 |
+
"time": "2017-02-14T19:40:03+00:00",
|
22 |
+
"type": "library",
|
23 |
+
"installation-source": "dist",
|
24 |
+
"autoload": {
|
25 |
+
"psr-4": {
|
26 |
+
"Interop\\Container\\": "src/Interop/Container/"
|
27 |
+
}
|
28 |
+
},
|
29 |
+
"notification-url": "https://packagist.org/downloads/",
|
30 |
+
"license": [
|
31 |
+
"MIT"
|
32 |
+
],
|
33 |
+
"description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
|
34 |
+
"homepage": "https://github.com/container-interop/container-interop",
|
35 |
+
"abandoned": "psr/container",
|
36 |
+
"install-path": "../container-interop/container-interop"
|
37 |
+
},
|
38 |
+
{
|
39 |
+
"name": "container-interop/service-provider",
|
40 |
+
"version": "v0.3.0",
|
41 |
+
"version_normalized": "0.3.0.0",
|
42 |
+
"source": {
|
43 |
+
"type": "git",
|
44 |
+
"url": "https://github.com/container-interop/service-provider.git",
|
45 |
+
"reference": "5cb38893b836edb00d3e1ace26c20ee1d29957cf"
|
46 |
+
},
|
47 |
+
"dist": {
|
48 |
+
"type": "zip",
|
49 |
+
"url": "https://api.github.com/repos/container-interop/service-provider/zipball/5cb38893b836edb00d3e1ace26c20ee1d29957cf",
|
50 |
+
"reference": "5cb38893b836edb00d3e1ace26c20ee1d29957cf",
|
51 |
+
"shasum": ""
|
52 |
+
},
|
53 |
+
"require": {
|
54 |
+
"container-interop/container-interop": "^1.1"
|
55 |
+
},
|
56 |
+
"time": "2016-05-16T07:42:22+00:00",
|
57 |
+
"type": "library",
|
58 |
+
"installation-source": "dist",
|
59 |
+
"autoload": {
|
60 |
+
"psr-4": {
|
61 |
+
"Interop\\Container\\": "src/"
|
62 |
+
}
|
63 |
+
},
|
64 |
+
"notification-url": "https://packagist.org/downloads/",
|
65 |
+
"license": [
|
66 |
+
"MIT"
|
67 |
+
],
|
68 |
+
"description": "Promoting container interoperability through standard service providers",
|
69 |
+
"homepage": "https://github.com/container-interop/service-provider",
|
70 |
+
"install-path": "../container-interop/service-provider"
|
71 |
+
},
|
72 |
+
{
|
73 |
+
"name": "dhii/collections-abstract",
|
74 |
+
"version": "v0.1.0",
|
75 |
+
"version_normalized": "0.1.0.0",
|
76 |
+
"source": {
|
77 |
+
"type": "git",
|
78 |
+
"url": "https://github.com/Dhii/collections-abstract.git",
|
79 |
+
"reference": "7c9141202af4d83b31e75efcbf481fa1cb588ad8"
|
80 |
+
},
|
81 |
+
"dist": {
|
82 |
+
"type": "zip",
|
83 |
+
"url": "https://api.github.com/repos/Dhii/collections-abstract/zipball/7c9141202af4d83b31e75efcbf481fa1cb588ad8",
|
84 |
+
"reference": "7c9141202af4d83b31e75efcbf481fa1cb588ad8",
|
85 |
+
"shasum": ""
|
86 |
+
},
|
87 |
+
"require": {
|
88 |
+
"dhii/collections-abstract-base": "^0.1.0",
|
89 |
+
"dhii/collections-interface": "^0.1.1",
|
90 |
+
"dhii/stats-abstract": "^0.1.0"
|
91 |
+
},
|
92 |
+
"require-dev": {
|
93 |
+
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
94 |
+
"phpunit/phpunit": "4.*",
|
95 |
+
"ptrofimov/xpmock": "^1.1"
|
96 |
+
},
|
97 |
+
"time": "2016-11-10T19:29:24+00:00",
|
98 |
+
"type": "library",
|
99 |
+
"installation-source": "dist",
|
100 |
+
"autoload": {
|
101 |
+
"psr-4": {
|
102 |
+
"Dhii\\Collection\\": "src/"
|
103 |
+
}
|
104 |
+
},
|
105 |
+
"notification-url": "https://packagist.org/downloads/",
|
106 |
+
"license": [
|
107 |
+
"MIT"
|
108 |
+
],
|
109 |
+
"authors": [
|
110 |
+
{
|
111 |
+
"name": "Dhii Team",
|
112 |
+
"email": "development@dhii.co"
|
113 |
+
}
|
114 |
+
],
|
115 |
+
"description": "A collections library",
|
116 |
+
"install-path": "../dhii/collections-abstract"
|
117 |
+
},
|
118 |
+
{
|
119 |
+
"name": "dhii/collections-abstract-base",
|
120 |
+
"version": "v0.1.0",
|
121 |
+
"version_normalized": "0.1.0.0",
|
122 |
+
"source": {
|
123 |
+
"type": "git",
|
124 |
+
"url": "https://github.com/Dhii/collections-abstract-base.git",
|
125 |
+
"reference": "0ec0147451a72a13fb327ac6ff747c5e953c56f3"
|
126 |
+
},
|
127 |
+
"dist": {
|
128 |
+
"type": "zip",
|
129 |
+
"url": "https://api.github.com/repos/Dhii/collections-abstract-base/zipball/0ec0147451a72a13fb327ac6ff747c5e953c56f3",
|
130 |
+
"reference": "0ec0147451a72a13fb327ac6ff747c5e953c56f3",
|
131 |
+
"shasum": ""
|
132 |
+
},
|
133 |
+
"require": {
|
134 |
+
"dhii/collections-interface": "^0.1.1"
|
135 |
+
},
|
136 |
+
"require-dev": {
|
137 |
+
"codeclimate/php-test-reporter": "dev-master",
|
138 |
+
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
139 |
+
"phpunit/phpunit": "^4.8",
|
140 |
+
"ptrofimov/xpmock": "^1.1"
|
141 |
+
},
|
142 |
+
"time": "2016-11-10T15:09:37+00:00",
|
143 |
+
"type": "library",
|
144 |
+
"installation-source": "dist",
|
145 |
+
"autoload": {
|
146 |
+
"psr-4": {
|
147 |
+
"Dhii\\Collection\\": "src/"
|
148 |
+
}
|
149 |
+
},
|
150 |
+
"notification-url": "https://packagist.org/downloads/",
|
151 |
+
"license": [
|
152 |
+
"MIT"
|
153 |
+
],
|
154 |
+
"authors": [
|
155 |
+
{
|
156 |
+
"name": "Dhii Team",
|
157 |
+
"email": "development@dhii.co"
|
158 |
+
}
|
159 |
+
],
|
160 |
+
"description": "Collection base classes that do not depend on other non-collection packages, on which there is a dependency of other collection packages that depend on this package. This is done to avoid circular reference in the collection toolchain",
|
161 |
+
"abandoned": "dhii/collections",
|
162 |
+
"install-path": "../dhii/collections-abstract-base"
|
163 |
+
},
|
164 |
+
{
|
165 |
+
"name": "dhii/collections-interface",
|
166 |
+
"version": "v0.1.2",
|
167 |
+
"version_normalized": "0.1.2.0",
|
168 |
+
"source": {
|
169 |
+
"type": "git",
|
170 |
+
"url": "https://github.com/Dhii/collections-interface.git",
|
171 |
+
"reference": "a8e9a30366a30d77bc270042a67150b3f8f6d94d"
|
172 |
+
},
|
173 |
+
"dist": {
|
174 |
+
"type": "zip",
|
175 |
+
"url": "https://api.github.com/repos/Dhii/collections-interface/zipball/a8e9a30366a30d77bc270042a67150b3f8f6d94d",
|
176 |
+
"reference": "a8e9a30366a30d77bc270042a67150b3f8f6d94d",
|
177 |
+
"shasum": ""
|
178 |
+
},
|
179 |
+
"require": {
|
180 |
+
"php": "^5.3 | ^7.0"
|
181 |
+
},
|
182 |
+
"require-dev": {
|
183 |
+
"codeclimate/php-test-reporter": "dev-master",
|
184 |
+
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
185 |
+
"phpunit/phpunit": "^4.8"
|
186 |
+
},
|
187 |
+
"time": "2016-11-16T14:45:08+00:00",
|
188 |
+
"type": "library",
|
189 |
+
"installation-source": "dist",
|
190 |
+
"autoload": {
|
191 |
+
"psr-4": {
|
192 |
+
"Dhii\\Collection\\": "src/"
|
193 |
+
}
|
194 |
+
},
|
195 |
+
"notification-url": "https://packagist.org/downloads/",
|
196 |
+
"license": [
|
197 |
+
"MIT"
|
198 |
+
],
|
199 |
+
"authors": [
|
200 |
+
{
|
201 |
+
"name": "Dhii Team",
|
202 |
+
"email": "development@dhii.co"
|
203 |
+
}
|
204 |
+
],
|
205 |
+
"description": "Interfaces for collections",
|
206 |
+
"install-path": "../dhii/collections-interface"
|
207 |
+
},
|
208 |
+
{
|
209 |
+
"name": "dhii/container-helper-base",
|
210 |
+
"version": "v0.1-alpha8",
|
211 |
+
"version_normalized": "0.1.0.0-alpha8",
|
212 |
+
"source": {
|
213 |
+
"type": "git",
|
214 |
+
"url": "https://github.com/Dhii/container-helper-base.git",
|
215 |
+
"reference": "1b8206842e06b71abcff769aaddfc51bf8f317cd"
|
216 |
+
},
|
217 |
+
"dist": {
|
218 |
+
"type": "zip",
|
219 |
+
"url": "https://api.github.com/repos/Dhii/container-helper-base/zipball/1b8206842e06b71abcff769aaddfc51bf8f317cd",
|
220 |
+
"reference": "1b8206842e06b71abcff769aaddfc51bf8f317cd",
|
221 |
+
"shasum": ""
|
222 |
+
},
|
223 |
+
"require": {
|
224 |
+
"php": "^5.4 | ^7.0"
|
225 |
+
},
|
226 |
+
"require-dev": {
|
227 |
+
"codeclimate/php-test-reporter": "<=0.3.2",
|
228 |
+
"dhii/php-cs-fixer-config": "^0.1",
|
229 |
+
"dhii/stringable-interface": "^0.1",
|
230 |
+
"phpunit/phpunit": "^4.8",
|
231 |
+
"psr/container": "^1.0",
|
232 |
+
"ptrofimov/xpmock": "^1.1"
|
233 |
+
},
|
234 |
+
"time": "2018-07-30T09:59:15+00:00",
|
235 |
+
"type": "library",
|
236 |
+
"extra": {
|
237 |
+
"branch-alias": {
|
238 |
+
"dev-develop": "0.1.x-dev"
|
239 |
+
}
|
240 |
+
},
|
241 |
+
"installation-source": "dist",
|
242 |
+
"autoload": {
|
243 |
+
"psr-4": {
|
244 |
+
"Dhii\\Data\\Container\\": "src"
|
245 |
+
}
|
246 |
+
},
|
247 |
+
"notification-url": "https://packagist.org/downloads/",
|
248 |
+
"license": [
|
249 |
+
"MIT"
|
250 |
+
],
|
251 |
+
"authors": [
|
252 |
+
{
|
253 |
+
"name": "Dhii Team",
|
254 |
+
"email": "development@dhii.co"
|
255 |
+
}
|
256 |
+
],
|
257 |
+
"description": "Helper functionality for working with container.",
|
258 |
+
"install-path": "../dhii/container-helper-base"
|
259 |
+
},
|
260 |
+
{
|
261 |
+
"name": "dhii/di",
|
262 |
+
"version": "v0.1.1",
|
263 |
+
"version_normalized": "0.1.1.0",
|
264 |
+
"source": {
|
265 |
+
"type": "git",
|
266 |
+
"url": "https://github.com/Dhii/di.git",
|
267 |
+
"reference": "52efd50f1b11fcdd2f789bae483bdb858772c306"
|
268 |
+
},
|
269 |
+
"dist": {
|
270 |
+
"type": "zip",
|
271 |
+
"url": "https://api.github.com/repos/Dhii/di/zipball/52efd50f1b11fcdd2f789bae483bdb858772c306",
|
272 |
+
"reference": "52efd50f1b11fcdd2f789bae483bdb858772c306",
|
273 |
+
"shasum": ""
|
274 |
+
},
|
275 |
+
"require": {
|
276 |
+
"container-interop/container-interop": "^1.1",
|
277 |
+
"container-interop/service-provider": "^0.3",
|
278 |
+
"dhii/di-abstract": "^0.1",
|
279 |
+
"dhii/di-interface": "^0.1",
|
280 |
+
"php": "^5.3 | ^7.0"
|
281 |
+
},
|
282 |
+
"provide": {
|
283 |
+
"container-interop/container-interop-implementation": "^1.0"
|
284 |
+
},
|
285 |
+
"require-dev": {
|
286 |
+
"codeclimate/php-test-reporter": "<=0.3.2",
|
287 |
+
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
288 |
+
"phpunit/phpunit": "^4.8",
|
289 |
+
"ptrofimov/xpmock": "^1.1"
|
290 |
+
},
|
291 |
+
"time": "2017-02-03T13:33:48+00:00",
|
292 |
+
"type": "library",
|
293 |
+
"installation-source": "dist",
|
294 |
+
"autoload": {
|
295 |
+
"psr-4": {
|
296 |
+
"Dhii\\Di\\": "src/"
|
297 |
+
}
|
298 |
+
},
|
299 |
+
"notification-url": "https://packagist.org/downloads/",
|
300 |
+
"license": [
|
301 |
+
"MIT"
|
302 |
+
],
|
303 |
+
"authors": [
|
304 |
+
{
|
305 |
+
"name": "Dhii Team",
|
306 |
+
"email": "development@dhii.co"
|
307 |
+
}
|
308 |
+
],
|
309 |
+
"description": "A DI container implementation",
|
310 |
+
"keywords": [
|
311 |
+
"container",
|
312 |
+
"dependency injection",
|
313 |
+
"di"
|
314 |
+
],
|
315 |
+
"abandoned": "dhii/containers",
|
316 |
+
"install-path": "../dhii/di"
|
317 |
+
},
|
318 |
+
{
|
319 |
+
"name": "dhii/di-abstract",
|
320 |
+
"version": "v0.1",
|
321 |
+
"version_normalized": "0.1.0.0",
|
322 |
+
"source": {
|
323 |
+
"type": "git",
|
324 |
+
"url": "https://github.com/Dhii/di-abstract.git",
|
325 |
+
"reference": "e87ee3782d5f4c44724e79c4b2e1a55103e5cd11"
|
326 |
+
},
|
327 |
+
"dist": {
|
328 |
+
"type": "zip",
|
329 |
+
"url": "https://api.github.com/repos/Dhii/di-abstract/zipball/e87ee3782d5f4c44724e79c4b2e1a55103e5cd11",
|
330 |
+
"reference": "e87ee3782d5f4c44724e79c4b2e1a55103e5cd11",
|
331 |
+
"shasum": ""
|
332 |
+
},
|
333 |
+
"require": {
|
334 |
+
"container-interop/container-interop": "^1.1",
|
335 |
+
"container-interop/service-provider": "^0.3",
|
336 |
+
"dhii/di-interface": "^0.1",
|
337 |
+
"php": "^5.3 | ^7.0"
|
338 |
+
},
|
339 |
+
"require-dev": {
|
340 |
+
"codeclimate/php-test-reporter": "<=0.3.2",
|
341 |
+
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
342 |
+
"phpunit/phpunit": "^4.8",
|
343 |
+
"ptrofimov/xpmock": "^1.1"
|
344 |
+
},
|
345 |
+
"time": "2017-02-02T18:30:06+00:00",
|
346 |
+
"type": "library",
|
347 |
+
"installation-source": "dist",
|
348 |
+
"autoload": {
|
349 |
+
"psr-4": {
|
350 |
+
"Dhii\\Di\\": "src/"
|
351 |
+
}
|
352 |
+
},
|
353 |
+
"notification-url": "https://packagist.org/downloads/",
|
354 |
+
"license": [
|
355 |
+
"MIT"
|
356 |
+
],
|
357 |
+
"authors": [
|
358 |
+
{
|
359 |
+
"name": "Dhii Team",
|
360 |
+
"email": "development@dhii.co"
|
361 |
+
}
|
362 |
+
],
|
363 |
+
"description": "Base abstract classes for DI container implementations",
|
364 |
+
"install-path": "../dhii/di-abstract"
|
365 |
+
},
|
366 |
+
{
|
367 |
+
"name": "dhii/di-interface",
|
368 |
+
"version": "v0.1",
|
369 |
+
"version_normalized": "0.1.0.0",
|
370 |
+
"source": {
|
371 |
+
"type": "git",
|
372 |
+
"url": "https://github.com/Dhii/di-interface.git",
|
373 |
+
"reference": "0320846a577d68b761e29acd5d4db40d88cc4f98"
|
374 |
+
},
|
375 |
+
"dist": {
|
376 |
+
"type": "zip",
|
377 |
+
"url": "https://api.github.com/repos/Dhii/di-interface/zipball/0320846a577d68b761e29acd5d4db40d88cc4f98",
|
378 |
+
"reference": "0320846a577d68b761e29acd5d4db40d88cc4f98",
|
379 |
+
"shasum": ""
|
380 |
+
},
|
381 |
+
"require": {
|
382 |
+
"container-interop/container-interop": "^1.1",
|
383 |
+
"container-interop/service-provider": "^0.3",
|
384 |
+
"php": "^5.3 | ^7.0"
|
385 |
+
},
|
386 |
+
"require-dev": {
|
387 |
+
"codeclimate/php-test-reporter": "<=0.3.2",
|
388 |
+
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
389 |
+
"phpunit/phpunit": "^4.8",
|
390 |
+
"ptrofimov/xpmock": "^1.1"
|
391 |
+
},
|
392 |
+
"time": "2017-02-02T13:12:09+00:00",
|
393 |
+
"type": "library",
|
394 |
+
"installation-source": "dist",
|
395 |
+
"autoload": {
|
396 |
+
"psr-4": {
|
397 |
+
"Dhii\\Di\\": "src/"
|
398 |
+
}
|
399 |
+
},
|
400 |
+
"notification-url": "https://packagist.org/downloads/",
|
401 |
+
"license": [
|
402 |
+
"MIT"
|
403 |
+
],
|
404 |
+
"authors": [
|
405 |
+
{
|
406 |
+
"name": "Dhii Team",
|
407 |
+
"email": "development@dhii.co"
|
408 |
+
}
|
409 |
+
],
|
410 |
+
"description": "Interfaces for DI container implementations",
|
411 |
+
"install-path": "../dhii/di-interface"
|
412 |
+
},
|
413 |
+
{
|
414 |
+
"name": "dhii/exception",
|
415 |
+
"version": "v0.1-alpha5",
|
416 |
+
"version_normalized": "0.1.0.0-alpha5",
|
417 |
+
"source": {
|
418 |
+
"type": "git",
|
419 |
+
"url": "https://github.com/Dhii/exception.git",
|
420 |
+
"reference": "f7afb934c970a4e167b2c7ba24fa3df50714e0fe"
|
421 |
+
},
|
422 |
+
"dist": {
|
423 |
+
"type": "zip",
|
424 |
+
"url": "https://api.github.com/repos/Dhii/exception/zipball/f7afb934c970a4e167b2c7ba24fa3df50714e0fe",
|
425 |
+
"reference": "f7afb934c970a4e167b2c7ba24fa3df50714e0fe",
|
426 |
+
"shasum": ""
|
427 |
+
},
|
428 |
+
"require": {
|
429 |
+
"dhii/exception-interface": "^0.2",
|
430 |
+
"dhii/i18n-helper-base": "^0.1",
|
431 |
+
"dhii/normalization-helper-base": "^0.1",
|
432 |
+
"php": "^5.4 | ^7.0"
|
433 |
+
},
|
434 |
+
"replace": {
|
435 |
+
"dhii/exception-helper-base": "0.1-alpha1|0.1-alpha2"
|
436 |
+
},
|
437 |
+
"require-dev": {
|
438 |
+
"codeclimate/php-test-reporter": "<=0.3.2",
|
439 |
+
"dhii/php-cs-fixer-config": "^0.1",
|
440 |
+
"dhii/stringable-interface": "^0.1",
|
441 |
+
"phpunit/phpunit": "^4.8",
|
442 |
+
"ptrofimov/xpmock": "^1.1"
|
443 |
+
},
|
444 |
+
"time": "2018-04-02T15:18:58+00:00",
|
445 |
+
"type": "library",
|
446 |
+
"extra": {
|
447 |
+
"branch-alias": {
|
448 |
+
"dev-develop": "0.1.x-dev"
|
449 |
+
}
|
450 |
+
},
|
451 |
+
"installation-source": "dist",
|
452 |
+
"autoload": {
|
453 |
+
"psr-4": {
|
454 |
+
"Dhii\\Exception\\": "src"
|
455 |
+
}
|
456 |
+
},
|
457 |
+
"notification-url": "https://packagist.org/downloads/",
|
458 |
+
"license": [
|
459 |
+
"MIT"
|
460 |
+
],
|
461 |
+
"authors": [
|
462 |
+
{
|
463 |
+
"name": "Dhii Team",
|
464 |
+
"email": "development@dhii.co"
|
465 |
+
}
|
466 |
+
],
|
467 |
+
"description": "Standards-compliant exception classes",
|
468 |
+
"install-path": "../dhii/exception"
|
469 |
+
},
|
470 |
+
{
|
471 |
+
"name": "dhii/exception-interface",
|
472 |
+
"version": "v0.2",
|
473 |
+
"version_normalized": "0.2.0.0",
|
474 |
+
"source": {
|
475 |
+
"type": "git",
|
476 |
+
"url": "https://github.com/Dhii/exception-interface.git",
|
477 |
+
"reference": "b69feebf7cb2879cd43977a03342e2393b73f7fb"
|
478 |
+
},
|
479 |
+
"dist": {
|
480 |
+
"type": "zip",
|
481 |
+
"url": "https://api.github.com/repos/Dhii/exception-interface/zipball/b69feebf7cb2879cd43977a03342e2393b73f7fb",
|
482 |
+
"reference": "b69feebf7cb2879cd43977a03342e2393b73f7fb",
|
483 |
+
"shasum": ""
|
484 |
+
},
|
485 |
+
"require": {
|
486 |
+
"dhii/stringable-interface": "^0.1",
|
487 |
+
"php": "^5.3 | ^7.0"
|
488 |
+
},
|
489 |
+
"require-dev": {
|
490 |
+
"codeclimate/php-test-reporter": "<=0.3.2",
|
491 |
+
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
492 |
+
"phpunit/phpunit": "^4.8",
|
493 |
+
"ptrofimov/xpmock": "^1.1"
|
494 |
+
},
|
495 |
+
"time": "2018-08-29T10:42:04+00:00",
|
496 |
+
"type": "library",
|
497 |
+
"extra": {
|
498 |
+
"branch-alias": {
|
499 |
+
"dev-develop": "0.2.x-dev"
|
500 |
+
}
|
501 |
+
},
|
502 |
+
"installation-source": "dist",
|
503 |
+
"autoload": {
|
504 |
+
"psr-4": {
|
505 |
+
"Dhii\\Exception\\": "src"
|
506 |
+
}
|
507 |
+
},
|
508 |
+
"notification-url": "https://packagist.org/downloads/",
|
509 |
+
"license": [
|
510 |
+
"MIT"
|
511 |
+
],
|
512 |
+
"authors": [
|
513 |
+
{
|
514 |
+
"name": "Dhii Team",
|
515 |
+
"email": "development@dhii.co"
|
516 |
+
}
|
517 |
+
],
|
518 |
+
"description": "Interfaces for most common exceptions",
|
519 |
+
"install-path": "../dhii/exception-interface"
|
520 |
+
},
|
521 |
+
{
|
522 |
+
"name": "dhii/factory-interface",
|
523 |
+
"version": "v0.1",
|
524 |
+
"version_normalized": "0.1.0.0",
|
525 |
+
"source": {
|
526 |
+
"type": "git",
|
527 |
+
"url": "https://github.com/Dhii/factory-interface.git",
|
528 |
+
"reference": "b8d217aec8838e64ccaa770cb03dc164bf6f0515"
|
529 |
+
},
|
530 |
+
"dist": {
|
531 |
+
"type": "zip",
|
532 |
+
"url": "https://api.github.com/repos/Dhii/factory-interface/zipball/b8d217aec8838e64ccaa770cb03dc164bf6f0515",
|
533 |
+
"reference": "b8d217aec8838e64ccaa770cb03dc164bf6f0515",
|
534 |
+
"shasum": ""
|
535 |
+
},
|
536 |
+
"require": {
|
537 |
+
"dhii/exception-interface": "^0.1|^0.2",
|
538 |
+
"php": "^5.3 | ^7.0"
|
539 |
+
},
|
540 |
+
"require-dev": {
|
541 |
+
"codeclimate/php-test-reporter": "<=0.3.2",
|
542 |
+
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
543 |
+
"dhii/stringable-interface": "^0.1",
|
544 |
+
"phpunit/phpunit": "^4.8",
|
545 |
+
"psr/container": "^1.0",
|
546 |
+
"ptrofimov/xpmock": "^1.1"
|
547 |
+
},
|
548 |
+
"time": "2018-08-29T11:15:09+00:00",
|
549 |
+
"type": "library",
|
550 |
+
"extra": {
|
551 |
+
"branch-alias": {
|
552 |
+
"dev-develop": "0.1.x-dev"
|
553 |
+
}
|
554 |
+
},
|
555 |
+
"installation-source": "dist",
|
556 |
+
"autoload": {
|
557 |
+
"psr-4": {
|
558 |
+
"Dhii\\Factory\\": "src"
|
559 |
+
}
|
560 |
+
},
|
561 |
+
"notification-url": "https://packagist.org/downloads/",
|
562 |
+
"license": [
|
563 |
+
"MIT"
|
564 |
+
],
|
565 |
+
"authors": [
|
566 |
+
{
|
567 |
+
"name": "Dhii Team",
|
568 |
+
"email": "development@dhii.co"
|
569 |
+
}
|
570 |
+
],
|
571 |
+
"description": "Interfaces for working with factories.",
|
572 |
+
"install-path": "../dhii/factory-interface"
|
573 |
+
},
|
574 |
+
{
|
575 |
+
"name": "dhii/i18n-helper-base",
|
576 |
+
"version": "v0.1-alpha1",
|
577 |
+
"version_normalized": "0.1.0.0-alpha1",
|
578 |
+
"source": {
|
579 |
+
"type": "git",
|
580 |
+
"url": "https://github.com/Dhii/i18n-helper-base.git",
|
581 |
+
"reference": "fc4c881f3e528ea918588831ebeffb92738f8dd5"
|
582 |
+
},
|
583 |
+
"dist": {
|
584 |
+
"type": "zip",
|
585 |
+
"url": "https://api.github.com/repos/Dhii/i18n-helper-base/zipball/fc4c881f3e528ea918588831ebeffb92738f8dd5",
|
586 |
+
"reference": "fc4c881f3e528ea918588831ebeffb92738f8dd5",
|
587 |
+
"shasum": ""
|
588 |
+
},
|
589 |
+
"require": {
|
590 |
+
"dhii/i18n-interface": "^0.1|^0.2",
|
591 |
+
"php": "^5.4 | ^7.0"
|
592 |
+
},
|
593 |
+
"require-dev": {
|
594 |
+
"codeclimate/php-test-reporter": "<=0.3.2",
|
595 |
+
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
596 |
+
"phpunit/phpunit": "^4.8",
|
597 |
+
"ptrofimov/xpmock": "^1.1"
|
598 |
+
},
|
599 |
+
"time": "2018-03-07T22:38:07+00:00",
|
600 |
+
"type": "library",
|
601 |
+
"extra": {
|
602 |
+
"branch-alias": {
|
603 |
+
"dev-develop": "0.1.x-dev"
|
604 |
+
}
|
605 |
+
},
|
606 |
+
"installation-source": "dist",
|
607 |
+
"autoload": {
|
608 |
+
"psr-4": {
|
609 |
+
"Dhii\\I18n\\": "src"
|
610 |
+
}
|
611 |
+
},
|
612 |
+
"notification-url": "https://packagist.org/downloads/",
|
613 |
+
"license": [
|
614 |
+
"MIT"
|
615 |
+
],
|
616 |
+
"authors": [
|
617 |
+
{
|
618 |
+
"name": "Dhii Team",
|
619 |
+
"email": "development@dhii.co"
|
620 |
+
}
|
621 |
+
],
|
622 |
+
"description": "A base for internationalization consumers",
|
623 |
+
"abandoned": true,
|
624 |
+
"install-path": "../dhii/i18n-helper-base"
|
625 |
+
},
|
626 |
+
{
|
627 |
+
"name": "dhii/i18n-interface",
|
628 |
+
"version": "v0.2",
|
629 |
+
"version_normalized": "0.2.0.0",
|
630 |
+
"source": {
|
631 |
+
"type": "git",
|
632 |
+
"url": "https://github.com/Dhii/i18n-interface.git",
|
633 |
+
"reference": "7eaf0731ba80eea37a5deea6d894a0326e10be67"
|
634 |
+
},
|
635 |
+
"dist": {
|
636 |
+
"type": "zip",
|
637 |
+
"url": "https://api.github.com/repos/Dhii/i18n-interface/zipball/7eaf0731ba80eea37a5deea6d894a0326e10be67",
|
638 |
+
"reference": "7eaf0731ba80eea37a5deea6d894a0326e10be67",
|
639 |
+
"shasum": ""
|
640 |
+
},
|
641 |
+
"require": {
|
642 |
+
"php": "^5.3 | ^7.0"
|
643 |
+
},
|
644 |
+
"require-dev": {
|
645 |
+
"codeclimate/php-test-reporter": "<=0.3.2",
|
646 |
+
"dhii/data-key-value-aware-interface": "^0.1",
|
647 |
+
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
648 |
+
"dhii/stringable-interface": "^0.1",
|
649 |
+
"phpunit/phpunit": "^4.8",
|
650 |
+
"ptrofimov/xpmock": "^1.1"
|
651 |
+
},
|
652 |
+
"time": "2017-03-15T16:01:39+00:00",
|
653 |
+
"type": "library",
|
654 |
+
"installation-source": "dist",
|
655 |
+
"autoload": {
|
656 |
+
"psr-4": {
|
657 |
+
"Dhii\\I18n\\": "src/"
|
658 |
+
}
|
659 |
+
},
|
660 |
+
"notification-url": "https://packagist.org/downloads/",
|
661 |
+
"license": [
|
662 |
+
"MIT"
|
663 |
+
],
|
664 |
+
"authors": [
|
665 |
+
{
|
666 |
+
"name": "Dhii Team",
|
667 |
+
"email": "development@dhii.co"
|
668 |
+
}
|
669 |
+
],
|
670 |
+
"description": "Interfaces for internationalization.",
|
671 |
+
"install-path": "../dhii/i18n-interface"
|
672 |
+
},
|
673 |
+
{
|
674 |
+
"name": "dhii/iterator-helper-base",
|
675 |
+
"version": "v0.1-alpha2",
|
676 |
+
"version_normalized": "0.1.0.0-alpha2",
|
677 |
+
"source": {
|
678 |
+
"type": "git",
|
679 |
+
"url": "https://github.com/Dhii/iterator-helper-base.git",
|
680 |
+
"reference": "cf62fb9f8b658a82815f15a2d906d8d1ff5c52ce"
|
681 |
+
},
|
682 |
+
"dist": {
|
683 |
+
"type": "zip",
|
684 |
+
"url": "https://api.github.com/repos/Dhii/iterator-helper-base/zipball/cf62fb9f8b658a82815f15a2d906d8d1ff5c52ce",
|
685 |
+
"reference": "cf62fb9f8b658a82815f15a2d906d8d1ff5c52ce",
|
686 |
+
"shasum": ""
|
687 |
+
},
|
688 |
+
"require": {
|
689 |
+
"dhii/exception": "^0.1-alpha4",
|
690 |
+
"php": "^5.4 | ^7.0"
|
691 |
+
},
|
692 |
+
"require-dev": {
|
693 |
+
"codeclimate/php-test-reporter": "<=0.3.2",
|
694 |
+
"dhii/invocable-interface": "0.1-alpha1",
|
695 |
+
"dhii/php-cs-fixer-config": "^0.1",
|
696 |
+
"dhii/stringable-interface": "^0.1",
|
697 |
+
"phpunit/phpunit": "^4.8",
|
698 |
+
"ptrofimov/xpmock": "dev-master"
|
699 |
+
},
|
700 |
+
"suggest": {
|
701 |
+
"dhii/callback-abstract": "For structural invocation of callables"
|
702 |
+
},
|
703 |
+
"time": "2018-03-22T11:25:07+00:00",
|
704 |
+
"type": "library",
|
705 |
+
"extra": {
|
706 |
+
"branch-alias": {
|
707 |
+
"dev-develop": "0.1.x-dev"
|
708 |
+
}
|
709 |
+
},
|
710 |
+
"installation-source": "dist",
|
711 |
+
"autoload": {
|
712 |
+
"psr-4": {
|
713 |
+
"Dhii\\Iterator\\": "src"
|
714 |
+
}
|
715 |
+
},
|
716 |
+
"notification-url": "https://packagist.org/downloads/",
|
717 |
+
"license": [
|
718 |
+
"MIT"
|
719 |
+
],
|
720 |
+
"authors": [
|
721 |
+
{
|
722 |
+
"name": "Dhii Team",
|
723 |
+
"email": "development@dhii.co"
|
724 |
+
}
|
725 |
+
],
|
726 |
+
"description": "Common functionality for working with iterables",
|
727 |
+
"install-path": "../dhii/iterator-helper-base"
|
728 |
+
},
|
729 |
+
{
|
730 |
+
"name": "dhii/normalization-helper-base",
|
731 |
+
"version": "v0.1-alpha4",
|
732 |
+
"version_normalized": "0.1.0.0-alpha4",
|
733 |
+
"source": {
|
734 |
+
"type": "git",
|
735 |
+
"url": "https://github.com/Dhii/normalization-helper-base.git",
|
736 |
+
"reference": "1b64f0ea6b3e32f9478f854f6049500795b51da7"
|
737 |
+
},
|
738 |
+
"dist": {
|
739 |
+
"type": "zip",
|
740 |
+
"url": "https://api.github.com/repos/Dhii/normalization-helper-base/zipball/1b64f0ea6b3e32f9478f854f6049500795b51da7",
|
741 |
+
"reference": "1b64f0ea6b3e32f9478f854f6049500795b51da7",
|
742 |
+
"shasum": ""
|
743 |
+
},
|
744 |
+
"require": {
|
745 |
+
"php": "^5.4 | ^7.0"
|
746 |
+
},
|
747 |
+
"require-dev": {
|
748 |
+
"codeclimate/php-test-reporter": "<=0.3.2",
|
749 |
+
"dhii/php-cs-fixer-config": "^0.1",
|
750 |
+
"dhii/stringable-interface": "^0.1",
|
751 |
+
"phpunit/phpunit": "^4.8",
|
752 |
+
"ptrofimov/xpmock": "^1.1"
|
753 |
+
},
|
754 |
+
"time": "2018-06-04T08:55:31+00:00",
|
755 |
+
"type": "library",
|
756 |
+
"extra": {
|
757 |
+
"branch-alias": {
|
758 |
+
"dev-develop": "0.1.x-dev"
|
759 |
+
}
|
760 |
+
},
|
761 |
+
"installation-source": "dist",
|
762 |
+
"autoload": {
|
763 |
+
"psr-4": {
|
764 |
+
"Dhii\\Util\\Normalization\\": "src"
|
765 |
+
}
|
766 |
+
},
|
767 |
+
"notification-url": "https://packagist.org/downloads/",
|
768 |
+
"license": [
|
769 |
+
"MIT"
|
770 |
+
],
|
771 |
+
"authors": [
|
772 |
+
{
|
773 |
+
"name": "Dhii Team",
|
774 |
+
"email": "development@dhii.co"
|
775 |
+
}
|
776 |
+
],
|
777 |
+
"description": "Functionality for normalizing values.",
|
778 |
+
"install-path": "../dhii/normalization-helper-base"
|
779 |
+
},
|
780 |
+
{
|
781 |
+
"name": "dhii/output-renderer-abstract",
|
782 |
+
"version": "v0.1-alpha2",
|
783 |
+
"version_normalized": "0.1.0.0-alpha2",
|
784 |
+
"source": {
|
785 |
+
"type": "git",
|
786 |
+
"url": "https://github.com/Dhii/output-renderer-abstract.git",
|
787 |
+
"reference": "0f6e5eed940025332dd1986d6c771e10f7197b1a"
|
788 |
+
},
|
789 |
+
"dist": {
|
790 |
+
"type": "zip",
|
791 |
+
"url": "https://api.github.com/repos/Dhii/output-renderer-abstract/zipball/0f6e5eed940025332dd1986d6c771e10f7197b1a",
|
792 |
+
"reference": "0f6e5eed940025332dd1986d6c771e10f7197b1a",
|
793 |
+
"shasum": ""
|
794 |
+
},
|
795 |
+
"require": {
|
796 |
+
"dhii/output-renderer-interface": "^0.2 | ^0.3",
|
797 |
+
"php": "^5.4 | ^7.0",
|
798 |
+
"psr/container": "^1.0"
|
799 |
+
},
|
800 |
+
"require-dev": {
|
801 |
+
"codeclimate/php-test-reporter": "<=0.3.2",
|
802 |
+
"dhii/exception-interface": "^0.2-alpha3",
|
803 |
+
"dhii/invocable-interface": "^0.1-alpha1",
|
804 |
+
"dhii/php-cs-fixer-config": "^0.1",
|
805 |
+
"dhii/validation-interface": "^0.1 | ^0.2-alpha1",
|
806 |
+
"phpunit/phpunit": "^4.8",
|
807 |
+
"ptrofimov/xpmock": "^1.1"
|
808 |
+
},
|
809 |
+
"suggest": {
|
810 |
+
"dhii/container-helper-base": "For normalizing context containers"
|
811 |
+
},
|
812 |
+
"time": "2018-05-10T12:31:09+00:00",
|
813 |
+
"type": "library",
|
814 |
+
"extra": {
|
815 |
+
"branch-alias": {
|
816 |
+
"dev-develop": "0.1.x-dev"
|
817 |
+
}
|
818 |
+
},
|
819 |
+
"installation-source": "dist",
|
820 |
+
"autoload": {
|
821 |
+
"psr-4": {
|
822 |
+
"Dhii\\Output\\": "src"
|
823 |
+
}
|
824 |
+
},
|
825 |
+
"notification-url": "https://packagist.org/downloads/",
|
826 |
+
"license": [
|
827 |
+
"MIT"
|
828 |
+
],
|
829 |
+
"authors": [
|
830 |
+
{
|
831 |
+
"name": "Dhii Team",
|
832 |
+
"email": "development@dhii.co"
|
833 |
+
}
|
834 |
+
],
|
835 |
+
"description": "Common abstract functionality for output renderers.",
|
836 |
+
"abandoned": true,
|
837 |
+
"install-path": "../dhii/output-renderer-abstract"
|
838 |
+
},
|
839 |
+
{
|
840 |
+
"name": "dhii/output-renderer-base",
|
841 |
+
"version": "v0.1-alpha1",
|
842 |
+
"version_normalized": "0.1.0.0-alpha1",
|
843 |
+
"source": {
|
844 |
+
"type": "git",
|
845 |
+
"url": "https://github.com/Dhii/output-renderer-base.git",
|
846 |
+
"reference": "700483a37016e502be2ead9580bb9258ad8bf17b"
|
847 |
+
},
|
848 |
+
"dist": {
|
849 |
+
"type": "zip",
|
850 |
+
"url": "https://api.github.com/repos/Dhii/output-renderer-base/zipball/700483a37016e502be2ead9580bb9258ad8bf17b",
|
851 |
+
"reference": "700483a37016e502be2ead9580bb9258ad8bf17b",
|
852 |
+
"shasum": ""
|
853 |
+
},
|
854 |
+
"require": {
|
855 |
+
"dhii/container-helper-base": "^0.1-alpha5",
|
856 |
+
"dhii/exception": "^0.1-alpha4",
|
857 |
+
"dhii/i18n-helper-base": "^0.1-alpha1",
|
858 |
+
"dhii/output-renderer-abstract": "^0.1-alpha1",
|
859 |
+
"dhii/output-renderer-interface": "^0.2 | ^0.3-alpha1",
|
860 |
+
"php": "^5.4 | ^7.0"
|
861 |
+
},
|
862 |
+
"require-dev": {
|
863 |
+
"codeclimate/php-test-reporter": "<=0.3.2",
|
864 |
+
"dhii/php-cs-fixer-config": "^0.1",
|
865 |
+
"dhii/stringable-interface": "^0.1",
|
866 |
+
"phpunit/phpunit": "^4.8",
|
867 |
+
"psr/container": "^1.0",
|
868 |
+
"ptrofimov/xpmock": "^1.1"
|
869 |
+
},
|
870 |
+
"time": "2018-04-05T13:32:07+00:00",
|
871 |
+
"type": "library",
|
872 |
+
"extra": {
|
873 |
+
"branch-alias": {
|
874 |
+
"dev-develop": "0.1.x-dev"
|
875 |
+
}
|
876 |
+
},
|
877 |
+
"installation-source": "dist",
|
878 |
+
"autoload": {
|
879 |
+
"psr-4": {
|
880 |
+
"Dhii\\Output\\": "src"
|
881 |
+
}
|
882 |
+
},
|
883 |
+
"notification-url": "https://packagist.org/downloads/",
|
884 |
+
"license": [
|
885 |
+
"MIT"
|
886 |
+
],
|
887 |
+
"authors": [
|
888 |
+
{
|
889 |
+
"name": "Dhii Team",
|
890 |
+
"email": "development@dhii.co"
|
891 |
+
}
|
892 |
+
],
|
893 |
+
"description": "Base concrete functionality for output rendering.",
|
894 |
+
"abandoned": true,
|
895 |
+
"install-path": "../dhii/output-renderer-base"
|
896 |
+
},
|
897 |
+
{
|
898 |
+
"name": "dhii/output-renderer-interface",
|
899 |
+
"version": "v0.3",
|
900 |
+
"version_normalized": "0.3.0.0",
|
901 |
+
"source": {
|
902 |
+
"type": "git",
|
903 |
+
"url": "https://github.com/Dhii/output-renderer-interface.git",
|
904 |
+
"reference": "407014d7fd1af0427958f2acd61aff008ee9e032"
|
905 |
+
},
|
906 |
+
"dist": {
|
907 |
+
"type": "zip",
|
908 |
+
"url": "https://api.github.com/repos/Dhii/output-renderer-interface/zipball/407014d7fd1af0427958f2acd61aff008ee9e032",
|
909 |
+
"reference": "407014d7fd1af0427958f2acd61aff008ee9e032",
|
910 |
+
"shasum": ""
|
911 |
+
},
|
912 |
+
"require": {
|
913 |
+
"dhii/exception-interface": "^0.1 | ^0.2",
|
914 |
+
"dhii/factory-interface": "^0.1-alpha2",
|
915 |
+
"dhii/stringable-interface": "^0.1",
|
916 |
+
"php": "^5.3 | ^7.0"
|
917 |
+
},
|
918 |
+
"require-dev": {
|
919 |
+
"codeclimate/php-test-reporter": "dev-master",
|
920 |
+
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
921 |
+
"phpunit/phpunit": "4.*",
|
922 |
+
"psr/container": "^1.0",
|
923 |
+
"ptrofimov/xpmock": "^1.1"
|
924 |
+
},
|
925 |
+
"suggest": {
|
926 |
+
"dhii/container-helper-base": "Useful for reading data from different context types uniformly"
|
927 |
+
},
|
928 |
+
"time": "2019-11-14T11:20:00+00:00",
|
929 |
+
"type": "library",
|
930 |
+
"extra": {
|
931 |
+
"branch-alias": {
|
932 |
+
"dev-develop": "0.3.x-dev"
|
933 |
+
}
|
934 |
+
},
|
935 |
+
"installation-source": "dist",
|
936 |
+
"autoload": {
|
937 |
+
"psr-4": {
|
938 |
+
"Dhii\\Output\\": "src/"
|
939 |
+
}
|
940 |
+
},
|
941 |
+
"notification-url": "https://packagist.org/downloads/",
|
942 |
+
"license": [
|
943 |
+
"MIT"
|
944 |
+
],
|
945 |
+
"authors": [
|
946 |
+
{
|
947 |
+
"name": "Dhii Team",
|
948 |
+
"email": "development@dhii.co"
|
949 |
+
}
|
950 |
+
],
|
951 |
+
"description": "An interface for objects that can perform rendering.",
|
952 |
+
"install-path": "../dhii/output-renderer-interface"
|
953 |
+
},
|
954 |
+
{
|
955 |
+
"name": "dhii/stats-abstract",
|
956 |
+
"version": "v0.1.0",
|
957 |
+
"version_normalized": "0.1.0.0",
|
958 |
+
"source": {
|
959 |
+
"type": "git",
|
960 |
+
"url": "https://github.com/Dhii/stats-abstract.git",
|
961 |
+
"reference": "71f6702c3257c71ab3917b6d076d3c3588cc9f49"
|
962 |
+
},
|
963 |
+
"dist": {
|
964 |
+
"type": "zip",
|
965 |
+
"url": "https://api.github.com/repos/Dhii/stats-abstract/zipball/71f6702c3257c71ab3917b6d076d3c3588cc9f49",
|
966 |
+
"reference": "71f6702c3257c71ab3917b6d076d3c3588cc9f49",
|
967 |
+
"shasum": ""
|
968 |
+
},
|
969 |
+
"require": {
|
970 |
+
"dhii/collections-abstract-base": "^0.1.0",
|
971 |
+
"dhii/stats-interface": "^0.1.0"
|
972 |
+
},
|
973 |
+
"require-dev": {
|
974 |
+
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
975 |
+
"phpunit/phpunit": "^4.8",
|
976 |
+
"ptrofimov/xpmock": "^1.1"
|
977 |
+
},
|
978 |
+
"time": "2016-11-10T18:55:43+00:00",
|
979 |
+
"type": "library",
|
980 |
+
"installation-source": "dist",
|
981 |
+
"autoload": {
|
982 |
+
"psr-4": {
|
983 |
+
"Dhii\\Stats\\": "src/"
|
984 |
+
}
|
985 |
+
},
|
986 |
+
"notification-url": "https://packagist.org/downloads/",
|
987 |
+
"license": [
|
988 |
+
"MIT"
|
989 |
+
],
|
990 |
+
"authors": [
|
991 |
+
{
|
992 |
+
"name": "Dhii Team",
|
993 |
+
"email": "development@dhii.co"
|
994 |
+
}
|
995 |
+
],
|
996 |
+
"description": "Abstract base for stats",
|
997 |
+
"install-path": "../dhii/stats-abstract"
|
998 |
+
},
|
999 |
+
{
|
1000 |
+
"name": "dhii/stats-interface",
|
1001 |
+
"version": "v0.1.0",
|
1002 |
+
"version_normalized": "0.1.0.0",
|
1003 |
+
"source": {
|
1004 |
+
"type": "git",
|
1005 |
+
"url": "https://github.com/Dhii/stats-interface.git",
|
1006 |
+
"reference": "36d09a8b8a3b8058214dae6eefb8ecdd98e0f0ba"
|
1007 |
+
},
|
1008 |
+
"dist": {
|
1009 |
+
"type": "zip",
|
1010 |
+
"url": "https://api.github.com/repos/Dhii/stats-interface/zipball/36d09a8b8a3b8058214dae6eefb8ecdd98e0f0ba",
|
1011 |
+
"reference": "36d09a8b8a3b8058214dae6eefb8ecdd98e0f0ba",
|
1012 |
+
"shasum": ""
|
1013 |
+
},
|
1014 |
+
"require": {
|
1015 |
+
"php": "^5.3 | ^7.0"
|
1016 |
+
},
|
1017 |
+
"require-dev": {
|
1018 |
+
"dhii/php-cs-fixer-config": "dev-php-5.3"
|
1019 |
+
},
|
1020 |
+
"time": "2016-11-10T15:38:37+00:00",
|
1021 |
+
"type": "library",
|
1022 |
+
"installation-source": "dist",
|
1023 |
+
"autoload": {
|
1024 |
+
"psr-4": {
|
1025 |
+
"Dhii\\Stats\\": "src/"
|
1026 |
+
}
|
1027 |
+
},
|
1028 |
+
"notification-url": "https://packagist.org/downloads/",
|
1029 |
+
"license": [
|
1030 |
+
"MIT"
|
1031 |
+
],
|
1032 |
+
"authors": [
|
1033 |
+
{
|
1034 |
+
"name": "Dhii Team",
|
1035 |
+
"email": "development@dhii.co"
|
1036 |
+
}
|
1037 |
+
],
|
1038 |
+
"description": "Interfaces for stats",
|
1039 |
+
"install-path": "../dhii/stats-interface"
|
1040 |
+
},
|
1041 |
+
{
|
1042 |
+
"name": "dhii/stringable-interface",
|
1043 |
+
"version": "v0.1",
|
1044 |
+
"version_normalized": "0.1.0.0",
|
1045 |
+
"source": {
|
1046 |
+
"type": "git",
|
1047 |
+
"url": "https://github.com/Dhii/stringable-interface.git",
|
1048 |
+
"reference": "b6653905eef2ebf377749feb80a6d18abbe913ef"
|
1049 |
+
},
|
1050 |
+
"dist": {
|
1051 |
+
"type": "zip",
|
1052 |
+
"url": "https://api.github.com/repos/Dhii/stringable-interface/zipball/b6653905eef2ebf377749feb80a6d18abbe913ef",
|
1053 |
+
"reference": "b6653905eef2ebf377749feb80a6d18abbe913ef",
|
1054 |
+
"shasum": ""
|
1055 |
+
},
|
1056 |
+
"require": {
|
1057 |
+
"php": "^5.3 | ^7.0"
|
1058 |
+
},
|
1059 |
+
"require-dev": {
|
1060 |
+
"codeclimate/php-test-reporter": "<=0.3.2",
|
1061 |
+
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
1062 |
+
"phpunit/phpunit": "^4.8",
|
1063 |
+
"ptrofimov/xpmock": "^1.1"
|
1064 |
+
},
|
1065 |
+
"time": "2017-01-23T15:08:20+00:00",
|
1066 |
+
"type": "library",
|
1067 |
+
"installation-source": "dist",
|
1068 |
+
"autoload": {
|
1069 |
+
"psr-4": {
|
1070 |
+
"Dhii\\Util\\String\\": "src/"
|
1071 |
+
}
|
1072 |
+
},
|
1073 |
+
"notification-url": "https://packagist.org/downloads/",
|
1074 |
+
"license": [
|
1075 |
+
"MIT"
|
1076 |
+
],
|
1077 |
+
"authors": [
|
1078 |
+
{
|
1079 |
+
"name": "Dhii Team",
|
1080 |
+
"email": "development@dhii.co"
|
1081 |
+
}
|
1082 |
+
],
|
1083 |
+
"description": "Interoperability interface for objects that can be cast to string",
|
1084 |
+
"install-path": "../dhii/stringable-interface"
|
1085 |
+
},
|
1086 |
+
{
|
1087 |
+
"name": "dhii/transformer-interface",
|
1088 |
+
"version": "v0.1-alpha1",
|
1089 |
+
"version_normalized": "0.1.0.0-alpha1",
|
1090 |
+
"source": {
|
1091 |
+
"type": "git",
|
1092 |
+
"url": "https://github.com/Dhii/transformer-interface.git",
|
1093 |
+
"reference": "e774efef46413eb34bdafc19a6bd74fbf656235d"
|
1094 |
+
},
|
1095 |
+
"dist": {
|
1096 |
+
"type": "zip",
|
1097 |
+
"url": "https://api.github.com/repos/Dhii/transformer-interface/zipball/e774efef46413eb34bdafc19a6bd74fbf656235d",
|
1098 |
+
"reference": "e774efef46413eb34bdafc19a6bd74fbf656235d",
|
1099 |
+
"shasum": ""
|
1100 |
+
},
|
1101 |
+
"require": {
|
1102 |
+
"dhii/exception-interface": "^0.1 | ^0.2-alpha1",
|
1103 |
+
"dhii/factory-interface": "^0.1-alpha1",
|
1104 |
+
"php": "^5.3 | ^7.0"
|
1105 |
+
},
|
1106 |
+
"require-dev": {
|
1107 |
+
"codeclimate/php-test-reporter": "<=0.3.2",
|
1108 |
+
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
1109 |
+
"phpunit/phpunit": "^4.8",
|
1110 |
+
"ptrofimov/xpmock": "^1.1"
|
1111 |
+
},
|
1112 |
+
"time": "2018-05-15T16:59:05+00:00",
|
1113 |
+
"type": "library",
|
1114 |
+
"extra": {
|
1115 |
+
"branch-alias": {
|
1116 |
+
"dev-develop": "0.1.x-dev"
|
1117 |
+
}
|
1118 |
+
},
|
1119 |
+
"installation-source": "dist",
|
1120 |
+
"autoload": {
|
1121 |
+
"psr-4": {
|
1122 |
+
"Dhii\\Transformer\\": "src"
|
1123 |
+
}
|
1124 |
+
},
|
1125 |
+
"notification-url": "https://packagist.org/downloads/",
|
1126 |
+
"license": [
|
1127 |
+
"MIT"
|
1128 |
+
],
|
1129 |
+
"authors": [
|
1130 |
+
{
|
1131 |
+
"name": "Dhii Team",
|
1132 |
+
"email": "development@dhii.co"
|
1133 |
+
}
|
1134 |
+
],
|
1135 |
+
"description": "Interfaces for data transformation",
|
1136 |
+
"install-path": "../dhii/transformer-interface"
|
1137 |
+
},
|
1138 |
+
{
|
1139 |
+
"name": "dhii/validation-abstract",
|
1140 |
+
"version": "v0.2-alpha1",
|
1141 |
+
"version_normalized": "0.2.0.0-alpha1",
|
1142 |
+
"source": {
|
1143 |
+
"type": "git",
|
1144 |
+
"url": "https://github.com/Dhii/validation-abstract.git",
|
1145 |
+
"reference": "dff998ba3476927a0fc6d10bb022425de8f1c844"
|
1146 |
+
},
|
1147 |
+
"dist": {
|
1148 |
+
"type": "zip",
|
1149 |
+
"url": "https://api.github.com/repos/Dhii/validation-abstract/zipball/dff998ba3476927a0fc6d10bb022425de8f1c844",
|
1150 |
+
"reference": "dff998ba3476927a0fc6d10bb022425de8f1c844",
|
1151 |
+
"shasum": ""
|
1152 |
+
},
|
1153 |
+
"require": {
|
1154 |
+
"dhii/validation-interface": "^0.2",
|
1155 |
+
"php": "^5.3 | ^7.0"
|
1156 |
+
},
|
1157 |
+
"require-dev": {
|
1158 |
+
"codeclimate/php-test-reporter": "<=0.3.2",
|
1159 |
+
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
1160 |
+
"dhii/stringable-interface": "^0.1",
|
1161 |
+
"phpunit/phpunit": "^4.8",
|
1162 |
+
"ptrofimov/xpmock": "^1.1"
|
1163 |
+
},
|
1164 |
+
"suggest": {
|
1165 |
+
"dhii/i18n-helper-base": "For string internationalization",
|
1166 |
+
"dhii/iterator-helper-base": "For implementations of iterable-related helper functionality",
|
1167 |
+
"dhii/normalization-helper-base": "For simple types normalization",
|
1168 |
+
"dhii/stringable-interface": "To be able to pass stringable objects instead of strings",
|
1169 |
+
"dhii/validation-interface": "Needed to be able to create exceptions that are expected to be thrown"
|
1170 |
+
},
|
1171 |
+
"time": "2018-03-07T21:05:39+00:00",
|
1172 |
+
"type": "library",
|
1173 |
+
"extra": {
|
1174 |
+
"branch-alias": {
|
1175 |
+
"dev-develop": "0.2.x-dev"
|
1176 |
+
}
|
1177 |
+
},
|
1178 |
+
"installation-source": "dist",
|
1179 |
+
"autoload": {
|
1180 |
+
"psr-4": {
|
1181 |
+
"Dhii\\Validation\\": "src/"
|
1182 |
+
}
|
1183 |
+
},
|
1184 |
+
"notification-url": "https://packagist.org/downloads/",
|
1185 |
+
"license": [
|
1186 |
+
"MIT"
|
1187 |
+
],
|
1188 |
+
"authors": [
|
1189 |
+
{
|
1190 |
+
"name": "Dhii Team",
|
1191 |
+
"email": "development@dhii.co"
|
1192 |
+
}
|
1193 |
+
],
|
1194 |
+
"description": "Common abstract functionality for validation.",
|
1195 |
+
"install-path": "../dhii/validation-abstract"
|
1196 |
+
},
|
1197 |
+
{
|
1198 |
+
"name": "dhii/validation-base",
|
1199 |
+
"version": "v0.2-alpha2",
|
1200 |
+
"version_normalized": "0.2.0.0-alpha2",
|
1201 |
+
"source": {
|
1202 |
+
"type": "git",
|
1203 |
+
"url": "https://github.com/Dhii/validation-base.git",
|
1204 |
+
"reference": "9e75c5f886a2403c6989c36c2d4ffcfae158172e"
|
1205 |
+
},
|
1206 |
+
"dist": {
|
1207 |
+
"type": "zip",
|
1208 |
+
"url": "https://api.github.com/repos/Dhii/validation-base/zipball/9e75c5f886a2403c6989c36c2d4ffcfae158172e",
|
1209 |
+
"reference": "9e75c5f886a2403c6989c36c2d4ffcfae158172e",
|
1210 |
+
"shasum": ""
|
1211 |
+
},
|
1212 |
+
"require": {
|
1213 |
+
"dhii/exception": "^0.1-alpha4",
|
1214 |
+
"dhii/i18n-helper-base": "^0.1",
|
1215 |
+
"dhii/iterator-helper-base": "^0.1",
|
1216 |
+
"dhii/normalization-helper-base": "^0.1",
|
1217 |
+
"dhii/validation-abstract": "^0.2",
|
1218 |
+
"dhii/validation-interface": "^0.2-alpha2",
|
1219 |
+
"php": "^5.4 | ^7.0"
|
1220 |
+
},
|
1221 |
+
"require-dev": {
|
1222 |
+
"codeclimate/php-test-reporter": "<=0.3.2",
|
1223 |
+
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
1224 |
+
"phpunit/phpunit": "^4.8",
|
1225 |
+
"ptrofimov/xpmock": "^1.1"
|
1226 |
+
},
|
1227 |
+
"time": "2018-04-02T13:31:36+00:00",
|
1228 |
+
"type": "library",
|
1229 |
+
"extra": {
|
1230 |
+
"branch-alias": {
|
1231 |
+
"dev-develop": "0.2.x-dev"
|
1232 |
+
}
|
1233 |
+
},
|
1234 |
+
"installation-source": "dist",
|
1235 |
+
"autoload": {
|
1236 |
+
"psr-4": {
|
1237 |
+
"Dhii\\Validation\\": "src/"
|
1238 |
+
}
|
1239 |
+
},
|
1240 |
+
"notification-url": "https://packagist.org/downloads/",
|
1241 |
+
"license": [
|
1242 |
+
"MIT"
|
1243 |
+
],
|
1244 |
+
"authors": [
|
1245 |
+
{
|
1246 |
+
"name": "Dhii Team",
|
1247 |
+
"email": "development@dhii.co"
|
1248 |
+
}
|
1249 |
+
],
|
1250 |
+
"description": "Base concrete functionality for validation.",
|
1251 |
+
"install-path": "../dhii/validation-base"
|
1252 |
+
},
|
1253 |
+
{
|
1254 |
+
"name": "dhii/validation-interface",
|
1255 |
+
"version": "v0.2",
|
1256 |
+
"version_normalized": "0.2.0.0",
|
1257 |
+
"source": {
|
1258 |
+
"type": "git",
|
1259 |
+
"url": "https://github.com/Dhii/validation-interface.git",
|
1260 |
+
"reference": "a26026ae5cdf0a650b3511a22dbcb9329073b82c"
|
1261 |
+
},
|
1262 |
+
"dist": {
|
1263 |
+
"type": "zip",
|
1264 |
+
"url": "https://api.github.com/repos/Dhii/validation-interface/zipball/a26026ae5cdf0a650b3511a22dbcb9329073b82c",
|
1265 |
+
"reference": "a26026ae5cdf0a650b3511a22dbcb9329073b82c",
|
1266 |
+
"shasum": ""
|
1267 |
+
},
|
1268 |
+
"require": {
|
1269 |
+
"dhii/exception-interface": "^0.1|^0.2",
|
1270 |
+
"dhii/factory-interface": "^0.1",
|
1271 |
+
"php": "^5.3 | ^7.0"
|
1272 |
+
},
|
1273 |
+
"require-dev": {
|
1274 |
+
"codeclimate/php-test-reporter": "<=0.3.2",
|
1275 |
+
"dhii/php-cs-fixer-config": "dev-php-5.3",
|
1276 |
+
"dhii/stringable-interface": "^0.1",
|
1277 |
+
"phpunit/phpunit": "^4.8",
|
1278 |
+
"ptrofimov/xpmock": "^1.1"
|
1279 |
+
},
|
1280 |
+
"time": "2018-08-29T11:39:22+00:00",
|
1281 |
+
"type": "library",
|
1282 |
+
"extra": {
|
1283 |
+
"branch-alias": {
|
1284 |
+
"dev-develop": "0.3.x-dev"
|
1285 |
+
}
|
1286 |
+
},
|
1287 |
+
"installation-source": "dist",
|
1288 |
+
"autoload": {
|
1289 |
+
"psr-4": {
|
1290 |
+
"Dhii\\Validation\\": "src/"
|
1291 |
+
}
|
1292 |
+
},
|
1293 |
+
"notification-url": "https://packagist.org/downloads/",
|
1294 |
+
"license": [
|
1295 |
+
"MIT"
|
1296 |
+
],
|
1297 |
+
"authors": [
|
1298 |
+
{
|
1299 |
+
"name": "Dhii Team",
|
1300 |
+
"email": "development@dhii.co"
|
1301 |
+
}
|
1302 |
+
],
|
1303 |
+
"description": "A base interface for validators",
|
1304 |
+
"install-path": "../dhii/validation-interface"
|
1305 |
+
},
|
1306 |
+
{
|
1307 |
+
"name": "erusev/parsedown",
|
1308 |
+
"version": "1.7.4",
|
1309 |
+
"version_normalized": "1.7.4.0",
|
1310 |
+
"source": {
|
1311 |
+
"type": "git",
|
1312 |
+
"url": "https://github.com/erusev/parsedown.git",
|
1313 |
+
"reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3"
|
1314 |
+
},
|
1315 |
+
"dist": {
|
1316 |
+
"type": "zip",
|
1317 |
+
"url": "https://api.github.com/repos/erusev/parsedown/zipball/cb17b6477dfff935958ba01325f2e8a2bfa6dab3",
|
1318 |
+
"reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3",
|
1319 |
+
"shasum": ""
|
1320 |
+
},
|
1321 |
+
"require": {
|
1322 |
+
"ext-mbstring": "*",
|
1323 |
+
"php": ">=5.3.0"
|
1324 |
+
},
|
1325 |
+
"require-dev": {
|
1326 |
+
"phpunit/phpunit": "^4.8.35"
|
1327 |
+
},
|
1328 |
+
"time": "2019-12-30T22:54:17+00:00",
|
1329 |
+
"type": "library",
|
1330 |
+
"installation-source": "dist",
|
1331 |
+
"autoload": {
|
1332 |
+
"psr-0": {
|
1333 |
+
"Parsedown": ""
|
1334 |
+
}
|
1335 |
+
},
|
1336 |
+
"notification-url": "https://packagist.org/downloads/",
|
1337 |
+
"license": [
|
1338 |
+
"MIT"
|
1339 |
+
],
|
1340 |
+
"authors": [
|
1341 |
+
{
|
1342 |
+
"name": "Emanuil Rusev",
|
1343 |
+
"email": "hello@erusev.com",
|
1344 |
+
"homepage": "http://erusev.com"
|
1345 |
+
}
|
1346 |
+
],
|
1347 |
+
"description": "Parser for Markdown.",
|
1348 |
+
"homepage": "http://parsedown.org",
|
1349 |
+
"keywords": [
|
1350 |
+
"markdown",
|
1351 |
+
"parser"
|
1352 |
+
],
|
1353 |
+
"install-path": "../erusev/parsedown"
|
1354 |
+
},
|
1355 |
+
{
|
1356 |
+
"name": "php-di/invoker",
|
1357 |
+
"version": "1.3.3",
|
1358 |
+
"version_normalized": "1.3.3.0",
|
1359 |
+
"source": {
|
1360 |
+
"type": "git",
|
1361 |
+
"url": "https://github.com/PHP-DI/Invoker.git",
|
1362 |
+
"reference": "1f4ca63b9abc66109e53b255e465d0ddb5c2e3f7"
|
1363 |
+
},
|
1364 |
+
"dist": {
|
1365 |
+
"type": "zip",
|
1366 |
+
"url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/1f4ca63b9abc66109e53b255e465d0ddb5c2e3f7",
|
1367 |
+
"reference": "1f4ca63b9abc66109e53b255e465d0ddb5c2e3f7",
|
1368 |
+
"shasum": ""
|
1369 |
+
},
|
1370 |
+
"require": {
|
1371 |
+
"container-interop/container-interop": "~1.1"
|
1372 |
+
},
|
1373 |
+
"require-dev": {
|
1374 |
+
"athletic/athletic": "~0.1.8",
|
1375 |
+
"phpunit/phpunit": "~4.5"
|
1376 |
+
},
|
1377 |
+
"time": "2016-07-14T13:09:58+00:00",
|
1378 |
+
"type": "library",
|
1379 |
+
"installation-source": "dist",
|
1380 |
+
"autoload": {
|
1381 |
+
"psr-4": {
|
1382 |
+
"Invoker\\": "src/"
|
1383 |
+
}
|
1384 |
+
},
|
1385 |
+
"notification-url": "https://packagist.org/downloads/",
|
1386 |
+
"license": [
|
1387 |
+
"MIT"
|
1388 |
+
],
|
1389 |
+
"description": "Generic and extensible callable invoker",
|
1390 |
+
"homepage": "https://github.com/PHP-DI/Invoker",
|
1391 |
+
"keywords": [
|
1392 |
+
"callable",
|
1393 |
+
"dependency",
|
1394 |
+
"dependency-injection",
|
1395 |
+
"injection",
|
1396 |
+
"invoke",
|
1397 |
+
"invoker"
|
1398 |
+
],
|
1399 |
+
"install-path": "../php-di/invoker"
|
1400 |
+
},
|
1401 |
+
{
|
1402 |
+
"name": "php-di/php-di",
|
1403 |
+
"version": "5.2.2",
|
1404 |
+
"version_normalized": "5.2.2.0",
|
1405 |
+
"source": {
|
1406 |
+
"type": "git",
|
1407 |
+
"url": "https://github.com/PHP-DI/PHP-DI.git",
|
1408 |
+
"reference": "f574bcc841201ab04587b1c6da1234d4044f67d8"
|
1409 |
+
},
|
1410 |
+
"dist": {
|
1411 |
+
"type": "zip",
|
1412 |
+
"url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/f574bcc841201ab04587b1c6da1234d4044f67d8",
|
1413 |
+
"reference": "f574bcc841201ab04587b1c6da1234d4044f67d8",
|
1414 |
+
"shasum": ""
|
1415 |
+
},
|
1416 |
+
"require": {
|
1417 |
+
"container-interop/container-interop": "~1.0",
|
1418 |
+
"php": ">=5.4.0",
|
1419 |
+
"php-di/invoker": "^1.1.1",
|
1420 |
+
"php-di/phpdoc-reader": "^2.0.1"
|
1421 |
+
},
|
1422 |
+
"replace": {
|
1423 |
+
"mnapoli/php-di": "*"
|
1424 |
+
},
|
1425 |
+
"require-dev": {
|
1426 |
+
"doctrine/annotations": "~1.2",
|
1427 |
+
"doctrine/cache": "~1.4",
|
1428 |
+
"mnapoli/phpunit-easymock": "~0.2.0",
|
1429 |
+
"ocramius/proxy-manager": "~1.0",
|
1430 |
+
"phpunit/phpunit": "~4.5"
|
1431 |
+
},
|
1432 |
+
"suggest": {
|
1433 |
+
"doctrine/annotations": "Install it if you want to use annotations (version ~1.2)",
|
1434 |
+
"doctrine/cache": "Install it if you want to use the cache (version ~1.4)",
|
1435 |
+
"ocramius/proxy-manager": "Install it if you want to use lazy injection (version ~1.0)"
|
1436 |
+
},
|
1437 |
+
"time": "2016-02-09T22:00:00+00:00",
|
1438 |
+
"type": "library",
|
1439 |
+
"installation-source": "dist",
|
1440 |
+
"autoload": {
|
1441 |
+
"psr-4": {
|
1442 |
+
"DI\\": "src/DI/"
|
1443 |
+
},
|
1444 |
+
"files": [
|
1445 |
+
"src/DI/functions.php"
|
1446 |
+
]
|
1447 |
+
},
|
1448 |
+
"notification-url": "https://packagist.org/downloads/",
|
1449 |
+
"license": [
|
1450 |
+
"MIT"
|
1451 |
+
],
|
1452 |
+
"description": "The dependency injection container for humans",
|
1453 |
+
"homepage": "http://php-di.org/",
|
1454 |
+
"keywords": [
|
1455 |
+
"container",
|
1456 |
+
"dependency injection",
|
1457 |
+
"di"
|
1458 |
+
],
|
1459 |
+
"install-path": "../php-di/php-di"
|
1460 |
+
},
|
1461 |
+
{
|
1462 |
+
"name": "php-di/phpdoc-reader",
|
1463 |
+
"version": "2.1.1",
|
1464 |
+
"version_normalized": "2.1.1.0",
|
1465 |
+
"source": {
|
1466 |
+
"type": "git",
|
1467 |
+
"url": "https://github.com/PHP-DI/PhpDocReader.git",
|
1468 |
+
"reference": "15678f7451c020226807f520efb867ad26fbbfcf"
|
1469 |
+
},
|
1470 |
+
"dist": {
|
1471 |
+
"type": "zip",
|
1472 |
+
"url": "https://api.github.com/repos/PHP-DI/PhpDocReader/zipball/15678f7451c020226807f520efb867ad26fbbfcf",
|
1473 |
+
"reference": "15678f7451c020226807f520efb867ad26fbbfcf",
|
1474 |
+
"shasum": ""
|
1475 |
+
},
|
1476 |
+
"require": {
|
1477 |
+
"php": ">=5.4.0"
|
1478 |
+
},
|
1479 |
+
"require-dev": {
|
1480 |
+
"phpunit/phpunit": "~4.6"
|
1481 |
+
},
|
1482 |
+
"time": "2019-09-26T11:24:58+00:00",
|
1483 |
+
"type": "library",
|
1484 |
+
"installation-source": "dist",
|
1485 |
+
"autoload": {
|
1486 |
+
"psr-4": {
|
1487 |
+
"PhpDocReader\\": "src/PhpDocReader"
|
1488 |
+
}
|
1489 |
+
},
|
1490 |
+
"notification-url": "https://packagist.org/downloads/",
|
1491 |
+
"license": [
|
1492 |
+
"MIT"
|
1493 |
+
],
|
1494 |
+
"description": "PhpDocReader parses @var and @param values in PHP docblocks (supports namespaced class names with the same resolution rules as PHP)",
|
1495 |
+
"keywords": [
|
1496 |
+
"phpdoc",
|
1497 |
+
"reflection"
|
1498 |
+
],
|
1499 |
+
"install-path": "../php-di/phpdoc-reader"
|
1500 |
+
},
|
1501 |
+
{
|
1502 |
+
"name": "psr/container",
|
1503 |
+
"version": "1.0.0",
|
1504 |
+
"version_normalized": "1.0.0.0",
|
1505 |
+
"source": {
|
1506 |
+
"type": "git",
|
1507 |
+
"url": "https://github.com/php-fig/container.git",
|
1508 |
+
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
|
1509 |
+
},
|
1510 |
+
"dist": {
|
1511 |
+
"type": "zip",
|
1512 |
+
"url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
|
1513 |
+
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
|
1514 |
+
"shasum": ""
|
1515 |
+
},
|
1516 |
+
"require": {
|
1517 |
+
"php": ">=5.3.0"
|
1518 |
+
},
|
1519 |
+
"time": "2017-02-14T16:28:37+00:00",
|
1520 |
+
"type": "library",
|
1521 |
+
"extra": {
|
1522 |
+
"branch-alias": {
|
1523 |
+
"dev-master": "1.0.x-dev"
|
1524 |
+
}
|
1525 |
+
},
|
1526 |
+
"installation-source": "dist",
|
1527 |
+
"autoload": {
|
1528 |
+
"psr-4": {
|
1529 |
+
"Psr\\Container\\": "src/"
|
1530 |
+
}
|
1531 |
+
},
|
1532 |
+
"notification-url": "https://packagist.org/downloads/",
|
1533 |
+
"license": [
|
1534 |
+
"MIT"
|
1535 |
+
],
|
1536 |
+
"authors": [
|
1537 |
+
{
|
1538 |
+
"name": "PHP-FIG",
|
1539 |
+
"homepage": "http://www.php-fig.org/"
|
1540 |
+
}
|
1541 |
+
],
|
1542 |
+
"description": "Common Container Interface (PHP FIG PSR-11)",
|
1543 |
+
"homepage": "https://github.com/php-fig/container",
|
1544 |
+
"keywords": [
|
1545 |
+
"PSR-11",
|
1546 |
+
"container",
|
1547 |
+
"container-interface",
|
1548 |
+
"container-interop",
|
1549 |
+
"psr"
|
1550 |
+
],
|
1551 |
+
"install-path": "../psr/container"
|
1552 |
+
},
|
1553 |
+
{
|
1554 |
+
"name": "psr/log",
|
1555 |
+
"version": "1.1.2",
|
1556 |
+
"version_normalized": "1.1.2.0",
|
1557 |
+
"source": {
|
1558 |
+
"type": "git",
|
1559 |
+
"url": "https://github.com/php-fig/log.git",
|
1560 |
+
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
|
1561 |
+
},
|
1562 |
+
"dist": {
|
1563 |
+
"type": "zip",
|
1564 |
+
"url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
|
1565 |
+
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
|
1566 |
+
"shasum": ""
|
1567 |
+
},
|
1568 |
+
"require": {
|
1569 |
+
"php": ">=5.3.0"
|
1570 |
+
},
|
1571 |
+
"time": "2019-11-01T11:05:21+00:00",
|
1572 |
+
"type": "library",
|
1573 |
+
"extra": {
|
1574 |
+
"branch-alias": {
|
1575 |
+
"dev-master": "1.1.x-dev"
|
1576 |
+
}
|
1577 |
+
},
|
1578 |
+
"installation-source": "dist",
|
1579 |
+
"autoload": {
|
1580 |
+
"psr-4": {
|
1581 |
+
"Psr\\Log\\": "Psr/Log/"
|
1582 |
+
}
|
1583 |
+
},
|
1584 |
+
"notification-url": "https://packagist.org/downloads/",
|
1585 |
+
"license": [
|
1586 |
+
"MIT"
|
1587 |
+
],
|
1588 |
+
"authors": [
|
1589 |
+
{
|
1590 |
+
"name": "PHP-FIG",
|
1591 |
+
"homepage": "http://www.php-fig.org/"
|
1592 |
+
}
|
1593 |
+
],
|
1594 |
+
"description": "Common interface for logging libraries",
|
1595 |
+
"homepage": "https://github.com/php-fig/log",
|
1596 |
+
"keywords": [
|
1597 |
+
"log",
|
1598 |
+
"psr",
|
1599 |
+
"psr-3"
|
1600 |
+
],
|
1601 |
+
"install-path": "../psr/log"
|
1602 |
+
},
|
1603 |
+
{
|
1604 |
+
"name": "rebelcode/composer-cleanup-plugin",
|
1605 |
+
"version": "v0.2",
|
1606 |
+
"version_normalized": "0.2.0.0",
|
1607 |
+
"source": {
|
1608 |
+
"type": "git",
|
1609 |
+
"url": "https://github.com/RebelCode/composer-cleanup-plugin.git",
|
1610 |
+
"reference": "3677eb752eb8ca042ba6f725b33f419b93857a62"
|
1611 |
+
},
|
1612 |
+
"dist": {
|
1613 |
+
"type": "zip",
|
1614 |
+
"url": "https://api.github.com/repos/RebelCode/composer-cleanup-plugin/zipball/3677eb752eb8ca042ba6f725b33f419b93857a62",
|
1615 |
+
"reference": "3677eb752eb8ca042ba6f725b33f419b93857a62",
|
1616 |
+
"shasum": ""
|
1617 |
+
},
|
1618 |
+
"require": {
|
1619 |
+
"composer-plugin-api": "^2.0"
|
1620 |
+
},
|
1621 |
+
"require-dev": {
|
1622 |
+
"composer/composer": "^2.0"
|
1623 |
+
},
|
1624 |
+
"time": "2021-02-09T13:24:28+00:00",
|
1625 |
+
"type": "composer-plugin",
|
1626 |
+
"extra": {
|
1627 |
+
"branch-alias": [],
|
1628 |
+
"class": "RebelCode\\Composer\\CleanupPlugin"
|
1629 |
+
},
|
1630 |
+
"installation-source": "dist",
|
1631 |
+
"autoload": {
|
1632 |
+
"psr-4": {
|
1633 |
+
"RebelCode\\Composer\\": "src/"
|
1634 |
+
}
|
1635 |
+
},
|
1636 |
+
"notification-url": "https://packagist.org/downloads/",
|
1637 |
+
"license": [
|
1638 |
+
"MIT"
|
1639 |
+
],
|
1640 |
+
"authors": [
|
1641 |
+
{
|
1642 |
+
"name": "RebelCode",
|
1643 |
+
"email": "dev@rebelcode.com"
|
1644 |
+
},
|
1645 |
+
{
|
1646 |
+
"name": "Barry vd. Heuvel",
|
1647 |
+
"email": "barryvdh@gmail.com"
|
1648 |
+
}
|
1649 |
+
],
|
1650 |
+
"description": "A composer cleanup plugin, to remove tests and documentation to save space",
|
1651 |
+
"support": {
|
1652 |
+
"source": "https://github.com/RebelCode/composer-cleanup-plugin/tree/v0.2"
|
1653 |
+
},
|
1654 |
+
"install-path": "../rebelcode/composer-cleanup-plugin"
|
1655 |
+
},
|
1656 |
+
{
|
1657 |
+
"name": "symfony/polyfill-ctype",
|
1658 |
+
"version": "v1.13.1",
|
1659 |
+
"version_normalized": "1.13.1.0",
|
1660 |
+
"source": {
|
1661 |
+
"type": "git",
|
1662 |
+
"url": "https://github.com/symfony/polyfill-ctype.git",
|
1663 |
+
"reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3"
|
1664 |
+
},
|
1665 |
+
"dist": {
|
1666 |
+
"type": "zip",
|
1667 |
+
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f8f0b461be3385e56d6de3dbb5a0df24c0c275e3",
|
1668 |
+
"reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3",
|
1669 |
+
"shasum": ""
|
1670 |
+
},
|
1671 |
+
"require": {
|
1672 |
+
"php": ">=5.3.3"
|
1673 |
+
},
|
1674 |
+
"suggest": {
|
1675 |
+
"ext-ctype": "For best performance"
|
1676 |
+
},
|
1677 |
+
"time": "2019-11-27T13:56:44+00:00",
|
1678 |
+
"type": "library",
|
1679 |
+
"extra": {
|
1680 |
+
"branch-alias": {
|
1681 |
+
"dev-master": "1.13-dev"
|
1682 |
+
}
|
1683 |
+
},
|
1684 |
+
"installation-source": "dist",
|
1685 |
+
"autoload": {
|
1686 |
+
"psr-4": {
|
1687 |
+
"Symfony\\Polyfill\\Ctype\\": ""
|
1688 |
+
},
|
1689 |
+
"files": [
|
1690 |
+
"bootstrap.php"
|
1691 |
+
]
|
1692 |
+
},
|
1693 |
+
"notification-url": "https://packagist.org/downloads/",
|
1694 |
+
"license": [
|
1695 |
+
"MIT"
|
1696 |
+
],
|
1697 |
+
"authors": [
|
1698 |
+
{
|
1699 |
+
"name": "Gert de Pagter",
|
1700 |
+
"email": "BackEndTea@gmail.com"
|
1701 |
+
},
|
1702 |
+
{
|
1703 |
+
"name": "Symfony Community",
|
1704 |
+
"homepage": "https://symfony.com/contributors"
|
1705 |
+
}
|
1706 |
+
],
|
1707 |
+
"description": "Symfony polyfill for ctype functions",
|
1708 |
+
"homepage": "https://symfony.com",
|
1709 |
+
"keywords": [
|
1710 |
+
"compatibility",
|
1711 |
+
"ctype",
|
1712 |
+
"polyfill",
|
1713 |
+
"portable"
|
1714 |
+
],
|
1715 |
+
"install-path": "../symfony/polyfill-ctype"
|
1716 |
+
},
|
1717 |
+
{
|
1718 |
+
"name": "symfony/polyfill-mbstring",
|
1719 |
+
"version": "v1.17.1",
|
1720 |
+
"version_normalized": "1.17.1.0",
|
1721 |
+
"source": {
|
1722 |
+
"type": "git",
|
1723 |
+
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
1724 |
+
"reference": "7110338d81ce1cbc3e273136e4574663627037a7"
|
1725 |
+
},
|
1726 |
+
"dist": {
|
1727 |
+
"type": "zip",
|
1728 |
+
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7110338d81ce1cbc3e273136e4574663627037a7",
|
1729 |
+
"reference": "7110338d81ce1cbc3e273136e4574663627037a7",
|
1730 |
+
"shasum": ""
|
1731 |
+
},
|
1732 |
+
"require": {
|
1733 |
+
"php": ">=5.3.3"
|
1734 |
+
},
|
1735 |
+
"suggest": {
|
1736 |
+
"ext-mbstring": "For best performance"
|
1737 |
+
},
|
1738 |
+
"time": "2020-06-06T08:46:27+00:00",
|
1739 |
+
"type": "library",
|
1740 |
+
"extra": {
|
1741 |
+
"branch-alias": {
|
1742 |
+
"dev-master": "1.17-dev"
|
1743 |
+
},
|
1744 |
+
"thanks": {
|
1745 |
+
"name": "symfony/polyfill",
|
1746 |
+
"url": "https://github.com/symfony/polyfill"
|
1747 |
+
}
|
1748 |
+
},
|
1749 |
+
"installation-source": "dist",
|
1750 |
+
"autoload": {
|
1751 |
+
"psr-4": {
|
1752 |
+
"Symfony\\Polyfill\\Mbstring\\": ""
|
1753 |
+
},
|
1754 |
+
"files": [
|
1755 |
+
"bootstrap.php"
|
1756 |
+
]
|
1757 |
+
},
|
1758 |
+
"notification-url": "https://packagist.org/downloads/",
|
1759 |
+
"license": [
|
1760 |
+
"MIT"
|
1761 |
+
],
|
1762 |
+
"authors": [
|
1763 |
+
{
|
1764 |
+
"name": "Nicolas Grekas",
|
1765 |
+
"email": "p@tchwork.com"
|
1766 |
+
},
|
1767 |
+
{
|
1768 |
+
"name": "Symfony Community",
|
1769 |
+
"homepage": "https://symfony.com/contributors"
|
1770 |
+
}
|
1771 |
+
],
|
1772 |
+
"description": "Symfony polyfill for the Mbstring extension",
|
1773 |
+
"homepage": "https://symfony.com",
|
1774 |
+
"keywords": [
|
1775 |
+
"compatibility",
|
1776 |
+
"mbstring",
|
1777 |
+
"polyfill",
|
1778 |
+
"portable",
|
1779 |
+
"shim"
|
1780 |
+
],
|
1781 |
+
"funding": [
|
1782 |
+
{
|
1783 |
+
"url": "https://symfony.com/sponsor",
|
1784 |
+
"type": "custom"
|
1785 |
+
},
|
1786 |
+
{
|
1787 |
+
"url": "https://github.com/fabpot",
|
1788 |
+
"type": "github"
|
1789 |
+
},
|
1790 |
+
{
|
1791 |
+
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
1792 |
+
"type": "tidelift"
|
1793 |
+
}
|
1794 |
+
],
|
1795 |
+
"install-path": "../symfony/polyfill-mbstring"
|
1796 |
+
},
|
1797 |
+
{
|
1798 |
+
"name": "symfony/translation",
|
1799 |
+
"version": "v2.8.52",
|
1800 |
+
"version_normalized": "2.8.52.0",
|
1801 |
+
"source": {
|
1802 |
+
"type": "git",
|
1803 |
+
"url": "https://github.com/symfony/translation.git",
|
1804 |
+
"reference": "fc58c2a19e56c29f5ba2736ec40d0119a0de2089"
|
1805 |
+
},
|
1806 |
+
"dist": {
|
1807 |
+
"type": "zip",
|
1808 |
+
"url": "https://api.github.com/repos/symfony/translation/zipball/fc58c2a19e56c29f5ba2736ec40d0119a0de2089",
|
1809 |
+
"reference": "fc58c2a19e56c29f5ba2736ec40d0119a0de2089",
|
1810 |
+
"shasum": ""
|
1811 |
+
},
|
1812 |
+
"require": {
|
1813 |
+
"php": ">=5.3.9",
|
1814 |
+
"symfony/polyfill-mbstring": "~1.0"
|
1815 |
+
},
|
1816 |
+
"conflict": {
|
1817 |
+
"symfony/config": "<2.7"
|
1818 |
+
},
|
1819 |
+
"require-dev": {
|
1820 |
+
"psr/log": "~1.0",
|
1821 |
+
"symfony/config": "~2.8",
|
1822 |
+
"symfony/intl": "~2.7.25|^2.8.18|~3.2.5",
|
1823 |
+
"symfony/yaml": "~2.2|~3.0.0"
|
1824 |
+
},
|
1825 |
+
"suggest": {
|
1826 |
+
"psr/log-implementation": "To use logging capability in translator",
|
1827 |
+
"symfony/config": "",
|
1828 |
+
"symfony/yaml": ""
|
1829 |
+
},
|
1830 |
+
"time": "2018-11-24T21:16:41+00:00",
|
1831 |
+
"type": "library",
|
1832 |
+
"extra": {
|
1833 |
+
"branch-alias": {
|
1834 |
+
"dev-master": "2.8-dev"
|
1835 |
+
}
|
1836 |
+
},
|
1837 |
+
"installation-source": "dist",
|
1838 |
+
"autoload": {
|
1839 |
+
"psr-4": {
|
1840 |
+
"Symfony\\Component\\Translation\\": ""
|
1841 |
+
},
|
1842 |
+
"exclude-from-classmap": [
|
1843 |
+
"/Tests/"
|
1844 |
+
]
|
1845 |
+
},
|
1846 |
+
"notification-url": "https://packagist.org/downloads/",
|
1847 |
+
"license": [
|
1848 |
+
"MIT"
|
1849 |
+
],
|
1850 |
+
"authors": [
|
1851 |
+
{
|
1852 |
+
"name": "Fabien Potencier",
|
1853 |
+
"email": "fabien@symfony.com"
|
1854 |
+
},
|
1855 |
+
{
|
1856 |
+
"name": "Symfony Community",
|
1857 |
+
"homepage": "https://symfony.com/contributors"
|
1858 |
+
}
|
1859 |
+
],
|
1860 |
+
"description": "Symfony Translation Component",
|
1861 |
+
"homepage": "https://symfony.com",
|
1862 |
+
"install-path": "../symfony/translation"
|
1863 |
+
},
|
1864 |
+
{
|
1865 |
+
"name": "twig/extensions",
|
1866 |
+
"version": "v1.5.4",
|
1867 |
+
"version_normalized": "1.5.4.0",
|
1868 |
+
"source": {
|
1869 |
+
"type": "git",
|
1870 |
+
"url": "https://github.com/twigphp/Twig-extensions.git",
|
1871 |
+
"reference": "57873c8b0c1be51caa47df2cdb824490beb16202"
|
1872 |
+
},
|
1873 |
+
"dist": {
|
1874 |
+
"type": "zip",
|
1875 |
+
"url": "https://api.github.com/repos/twigphp/Twig-extensions/zipball/57873c8b0c1be51caa47df2cdb824490beb16202",
|
1876 |
+
"reference": "57873c8b0c1be51caa47df2cdb824490beb16202",
|
1877 |
+
"shasum": ""
|
1878 |
+
},
|
1879 |
+
"require": {
|
1880 |
+
"twig/twig": "^1.27|^2.0"
|
1881 |
+
},
|
1882 |
+
"require-dev": {
|
1883 |
+
"symfony/phpunit-bridge": "^3.4",
|
1884 |
+
"symfony/translation": "^2.7|^3.4"
|
1885 |
+
},
|
1886 |
+
"suggest": {
|
1887 |
+
"symfony/translation": "Allow the time_diff output to be translated"
|
1888 |
+
},
|
1889 |
+
"time": "2018-12-05T18:34:18+00:00",
|
1890 |
+
"type": "library",
|
1891 |
+
"extra": {
|
1892 |
+
"branch-alias": {
|
1893 |
+
"dev-master": "1.5-dev"
|
1894 |
+
}
|
1895 |
+
},
|
1896 |
+
"installation-source": "dist",
|
1897 |
+
"autoload": {
|
1898 |
+
"psr-0": {
|
1899 |
+
"Twig_Extensions_": "lib/"
|
1900 |
+
},
|
1901 |
+
"psr-4": {
|
1902 |
+
"Twig\\Extensions\\": "src/"
|
1903 |
+
}
|
1904 |
+
},
|
1905 |
+
"notification-url": "https://packagist.org/downloads/",
|
1906 |
+
"license": [
|
1907 |
+
"MIT"
|
1908 |
+
],
|
1909 |
+
"authors": [
|
1910 |
+
{
|
1911 |
+
"name": "Fabien Potencier",
|
1912 |
+
"email": "fabien@symfony.com"
|
1913 |
+
}
|
1914 |
+
],
|
1915 |
+
"description": "Common additional features for Twig that do not directly belong in core",
|
1916 |
+
"keywords": [
|
1917 |
+
"i18n",
|
1918 |
+
"text"
|
1919 |
+
],
|
1920 |
+
"install-path": "../twig/extensions"
|
1921 |
+
},
|
1922 |
+
{
|
1923 |
+
"name": "twig/twig",
|
1924 |
+
"version": "v1.41.0",
|
1925 |
+
"version_normalized": "1.41.0.0",
|
1926 |
+
"source": {
|
1927 |
+
"type": "git",
|
1928 |
+
"url": "https://github.com/twigphp/Twig.git",
|
1929 |
+
"reference": "575cd5028362da591facde1ef5d7b94553c375c9"
|
1930 |
+
},
|
1931 |
+
"dist": {
|
1932 |
+
"type": "zip",
|
1933 |
+
"url": "https://api.github.com/repos/twigphp/Twig/zipball/575cd5028362da591facde1ef5d7b94553c375c9",
|
1934 |
+
"reference": "575cd5028362da591facde1ef5d7b94553c375c9",
|
1935 |
+
"shasum": ""
|
1936 |
+
},
|
1937 |
+
"require": {
|
1938 |
+
"php": ">=5.4.0",
|
1939 |
+
"symfony/polyfill-ctype": "^1.8"
|
1940 |
+
},
|
1941 |
+
"require-dev": {
|
1942 |
+
"psr/container": "^1.0",
|
1943 |
+
"symfony/debug": "^2.7",
|
1944 |
+
"symfony/phpunit-bridge": "^3.4.19|^4.1.8"
|
1945 |
+
},
|
1946 |
+
"time": "2019-05-14T11:59:08+00:00",
|
1947 |
+
"type": "library",
|
1948 |
+
"extra": {
|
1949 |
+
"branch-alias": {
|
1950 |
+
"dev-master": "1.41-dev"
|
1951 |
+
}
|
1952 |
+
},
|
1953 |
+
"installation-source": "dist",
|
1954 |
+
"autoload": {
|
1955 |
+
"psr-0": {
|
1956 |
+
"Twig_": "lib/"
|
1957 |
+
},
|
1958 |
+
"psr-4": {
|
1959 |
+
"Twig\\": "src/"
|
1960 |
+
}
|
1961 |
+
},
|
1962 |
+
"notification-url": "https://packagist.org/downloads/",
|
1963 |
+
"license": [
|
1964 |
+
"BSD-3-Clause"
|
1965 |
+
],
|
1966 |
+
"authors": [
|
1967 |
+
{
|
1968 |
+
"name": "Fabien Potencier",
|
1969 |
+
"email": "fabien@symfony.com",
|
1970 |
+
"homepage": "http://fabien.potencier.org",
|
1971 |
+
"role": "Lead Developer"
|
1972 |
+
},
|
1973 |
+
{
|
1974 |
+
"name": "Armin Ronacher",
|
1975 |
+
"email": "armin.ronacher@active-4.com",
|
1976 |
+
"role": "Project Founder"
|
1977 |
+
},
|
1978 |
+
{
|
1979 |
+
"name": "Twig Team",
|
1980 |
+
"homepage": "https://twig.symfony.com/contributors",
|
1981 |
+
"role": "Contributors"
|
1982 |
+
}
|
1983 |
+
],
|
1984 |
+
"description": "Twig, the flexible, fast, and secure template language for PHP",
|
1985 |
+
"homepage": "https://twig.symfony.com",
|
1986 |
+
"keywords": [
|
1987 |
+
"templating"
|
1988 |
+
],
|
1989 |
+
"install-path": "../twig/twig"
|
1990 |
+
}
|
1991 |
+
],
|
1992 |
+
"dev": false,
|
1993 |
+
"dev-package-names": []
|
1994 |
+
}
|
vendor/composer/installed.php
ADDED
@@ -0,0 +1,387 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php return array (
|
2 |
+
'root' =>
|
3 |
+
array (
|
4 |
+
'pretty_version' => 'dev-develop',
|
5 |
+
'version' => 'dev-develop',
|
6 |
+
'aliases' =>
|
7 |
+
array (
|
8 |
+
),
|
9 |
+
'reference' => 'dbbd846351515ddbc9f72dc75ff1c3654e3bebf5',
|
10 |
+
'name' => 'wprss/core',
|
11 |
+
),
|
12 |
+
'versions' =>
|
13 |
+
array (
|
14 |
+
'container-interop/container-interop' =>
|
15 |
+
array (
|
16 |
+
'pretty_version' => '1.2.0',
|
17 |
+
'version' => '1.2.0.0',
|
18 |
+
'aliases' =>
|
19 |
+
array (
|
20 |
+
),
|
21 |
+
'reference' => '79cbf1341c22ec75643d841642dd5d6acd83bdb8',
|
22 |
+
),
|
23 |
+
'container-interop/container-interop-implementation' =>
|
24 |
+
array (
|
25 |
+
'provided' =>
|
26 |
+
array (
|
27 |
+
0 => '^1.0',
|
28 |
+
),
|
29 |
+
),
|
30 |
+
'container-interop/service-provider' =>
|
31 |
+
array (
|
32 |
+
'pretty_version' => 'v0.3.0',
|
33 |
+
'version' => '0.3.0.0',
|
34 |
+
'aliases' =>
|
35 |
+
array (
|
36 |
+
),
|
37 |
+
'reference' => '5cb38893b836edb00d3e1ace26c20ee1d29957cf',
|
38 |
+
),
|
39 |
+
'dhii/collections-abstract' =>
|
40 |
+
array (
|
41 |
+
'pretty_version' => 'v0.1.0',
|
42 |
+
'version' => '0.1.0.0',
|
43 |
+
'aliases' =>
|
44 |
+
array (
|
45 |
+
),
|
46 |
+
'reference' => '7c9141202af4d83b31e75efcbf481fa1cb588ad8',
|
47 |
+
),
|
48 |
+
'dhii/collections-abstract-base' =>
|
49 |
+
array (
|
50 |
+
'pretty_version' => 'v0.1.0',
|
51 |
+
'version' => '0.1.0.0',
|
52 |
+
'aliases' =>
|
53 |
+
array (
|
54 |
+
),
|
55 |
+
'reference' => '0ec0147451a72a13fb327ac6ff747c5e953c56f3',
|
56 |
+
),
|
57 |
+
'dhii/collections-interface' =>
|
58 |
+
array (
|
59 |
+
'pretty_version' => 'v0.1.2',
|
60 |
+
'version' => '0.1.2.0',
|
61 |
+
'aliases' =>
|
62 |
+
array (
|
63 |
+
),
|
64 |
+
'reference' => 'a8e9a30366a30d77bc270042a67150b3f8f6d94d',
|
65 |
+
),
|
66 |
+
'dhii/container-helper-base' =>
|
67 |
+
array (
|
68 |
+
'pretty_version' => 'v0.1-alpha8',
|
69 |
+
'version' => '0.1.0.0-alpha8',
|
70 |
+
'aliases' =>
|
71 |
+
array (
|
72 |
+
),
|
73 |
+
'reference' => '1b8206842e06b71abcff769aaddfc51bf8f317cd',
|
74 |
+
),
|
75 |
+
'dhii/di' =>
|
76 |
+
array (
|
77 |
+
'pretty_version' => 'v0.1.1',
|
78 |
+
'version' => '0.1.1.0',
|
79 |
+
'aliases' =>
|
80 |
+
array (
|
81 |
+
),
|
82 |
+
'reference' => '52efd50f1b11fcdd2f789bae483bdb858772c306',
|
83 |
+
),
|
84 |
+
'dhii/di-abstract' =>
|
85 |
+
array (
|
86 |
+
'pretty_version' => 'v0.1',
|
87 |
+
'version' => '0.1.0.0',
|
88 |
+
'aliases' =>
|
89 |
+
array (
|
90 |
+
),
|
91 |
+
'reference' => 'e87ee3782d5f4c44724e79c4b2e1a55103e5cd11',
|
92 |
+
),
|
93 |
+
'dhii/di-interface' =>
|
94 |
+
array (
|
95 |
+
'pretty_version' => 'v0.1',
|
96 |
+
'version' => '0.1.0.0',
|
97 |
+
'aliases' =>
|
98 |
+
array (
|
99 |
+
),
|
100 |
+
'reference' => '0320846a577d68b761e29acd5d4db40d88cc4f98',
|
101 |
+
),
|
102 |
+
'dhii/exception' =>
|
103 |
+
array (
|
104 |
+
'pretty_version' => 'v0.1-alpha5',
|
105 |
+
'version' => '0.1.0.0-alpha5',
|
106 |
+
'aliases' =>
|
107 |
+
array (
|
108 |
+
),
|
109 |
+
'reference' => 'f7afb934c970a4e167b2c7ba24fa3df50714e0fe',
|
110 |
+
),
|
111 |
+
'dhii/exception-helper-base' =>
|
112 |
+
array (
|
113 |
+
'replaced' =>
|
114 |
+
array (
|
115 |
+
0 => '0.1-alpha1|0.1-alpha2',
|
116 |
+
),
|
117 |
+
),
|
118 |
+
'dhii/exception-interface' =>
|
119 |
+
array (
|
120 |
+
'pretty_version' => 'v0.2',
|
121 |
+
'version' => '0.2.0.0',
|
122 |
+
'aliases' =>
|
123 |
+
array (
|
124 |
+
),
|
125 |
+
'reference' => 'b69feebf7cb2879cd43977a03342e2393b73f7fb',
|
126 |
+
),
|
127 |
+
'dhii/factory-interface' =>
|
128 |
+
array (
|
129 |
+
'pretty_version' => 'v0.1',
|
130 |
+
'version' => '0.1.0.0',
|
131 |
+
'aliases' =>
|
132 |
+
array (
|
133 |
+
),
|
134 |
+
'reference' => 'b8d217aec8838e64ccaa770cb03dc164bf6f0515',
|
135 |
+
),
|
136 |
+
'dhii/i18n-helper-base' =>
|
137 |
+
array (
|
138 |
+
'pretty_version' => 'v0.1-alpha1',
|
139 |
+
'version' => '0.1.0.0-alpha1',
|
140 |
+
'aliases' =>
|
141 |
+
array (
|
142 |
+
),
|
143 |
+
'reference' => 'fc4c881f3e528ea918588831ebeffb92738f8dd5',
|
144 |
+
),
|
145 |
+
'dhii/i18n-interface' =>
|
146 |
+
array (
|
147 |
+
'pretty_version' => 'v0.2',
|
148 |
+
'version' => '0.2.0.0',
|
149 |
+
'aliases' =>
|
150 |
+
array (
|
151 |
+
),
|
152 |
+
'reference' => '7eaf0731ba80eea37a5deea6d894a0326e10be67',
|
153 |
+
),
|
154 |
+
'dhii/iterator-helper-base' =>
|
155 |
+
array (
|
156 |
+
'pretty_version' => 'v0.1-alpha2',
|
157 |
+
'version' => '0.1.0.0-alpha2',
|
158 |
+
'aliases' =>
|
159 |
+
array (
|
160 |
+
),
|
161 |
+
'reference' => 'cf62fb9f8b658a82815f15a2d906d8d1ff5c52ce',
|
162 |
+
),
|
163 |
+
'dhii/normalization-helper-base' =>
|
164 |
+
array (
|
165 |
+
'pretty_version' => 'v0.1-alpha4',
|
166 |
+
'version' => '0.1.0.0-alpha4',
|
167 |
+
'aliases' =>
|
168 |
+
array (
|
169 |
+
),
|
170 |
+
'reference' => '1b64f0ea6b3e32f9478f854f6049500795b51da7',
|
171 |
+
),
|
172 |
+
'dhii/output-renderer-abstract' =>
|
173 |
+
array (
|
174 |
+
'pretty_version' => 'v0.1-alpha2',
|
175 |
+
'version' => '0.1.0.0-alpha2',
|
176 |
+
'aliases' =>
|
177 |
+
array (
|
178 |
+
),
|
179 |
+
'reference' => '0f6e5eed940025332dd1986d6c771e10f7197b1a',
|
180 |
+
),
|
181 |
+
'dhii/output-renderer-base' =>
|
182 |
+
array (
|
183 |
+
'pretty_version' => 'v0.1-alpha1',
|
184 |
+
'version' => '0.1.0.0-alpha1',
|
185 |
+
'aliases' =>
|
186 |
+
array (
|
187 |
+
),
|
188 |
+
'reference' => '700483a37016e502be2ead9580bb9258ad8bf17b',
|
189 |
+
),
|
190 |
+
'dhii/output-renderer-interface' =>
|
191 |
+
array (
|
192 |
+
'pretty_version' => 'v0.3',
|
193 |
+
'version' => '0.3.0.0',
|
194 |
+
'aliases' =>
|
195 |
+
array (
|
196 |
+
),
|
197 |
+
'reference' => '407014d7fd1af0427958f2acd61aff008ee9e032',
|
198 |
+
),
|
199 |
+
'dhii/stats-abstract' =>
|
200 |
+
array (
|
201 |
+
'pretty_version' => 'v0.1.0',
|
202 |
+
'version' => '0.1.0.0',
|
203 |
+
'aliases' =>
|
204 |
+
array (
|
205 |
+
),
|
206 |
+
'reference' => '71f6702c3257c71ab3917b6d076d3c3588cc9f49',
|
207 |
+
),
|
208 |
+
'dhii/stats-interface' =>
|
209 |
+
array (
|
210 |
+
'pretty_version' => 'v0.1.0',
|
211 |
+
'version' => '0.1.0.0',
|
212 |
+
'aliases' =>
|
213 |
+
array (
|
214 |
+
),
|
215 |
+
'reference' => '36d09a8b8a3b8058214dae6eefb8ecdd98e0f0ba',
|
216 |
+
),
|
217 |
+
'dhii/stringable-interface' =>
|
218 |
+
array (
|
219 |
+
'pretty_version' => 'v0.1',
|
220 |
+
'version' => '0.1.0.0',
|
221 |
+
'aliases' =>
|
222 |
+
array (
|
223 |
+
),
|
224 |
+
'reference' => 'b6653905eef2ebf377749feb80a6d18abbe913ef',
|
225 |
+
),
|
226 |
+
'dhii/transformer-interface' =>
|
227 |
+
array (
|
228 |
+
'pretty_version' => 'v0.1-alpha1',
|
229 |
+
'version' => '0.1.0.0-alpha1',
|
230 |
+
'aliases' =>
|
231 |
+
array (
|
232 |
+
),
|
233 |
+
'reference' => 'e774efef46413eb34bdafc19a6bd74fbf656235d',
|
234 |
+
),
|
235 |
+
'dhii/validation-abstract' =>
|
236 |
+
array (
|
237 |
+
'pretty_version' => 'v0.2-alpha1',
|
238 |
+
'version' => '0.2.0.0-alpha1',
|
239 |
+
'aliases' =>
|
240 |
+
array (
|
241 |
+
),
|
242 |
+
'reference' => 'dff998ba3476927a0fc6d10bb022425de8f1c844',
|
243 |
+
),
|
244 |
+
'dhii/validation-base' =>
|
245 |
+
array (
|
246 |
+
'pretty_version' => 'v0.2-alpha2',
|
247 |
+
'version' => '0.2.0.0-alpha2',
|
248 |
+
'aliases' =>
|
249 |
+
array (
|
250 |
+
),
|
251 |
+
'reference' => '9e75c5f886a2403c6989c36c2d4ffcfae158172e',
|
252 |
+
),
|
253 |
+
'dhii/validation-interface' =>
|
254 |
+
array (
|
255 |
+
'pretty_version' => 'v0.2',
|
256 |
+
'version' => '0.2.0.0',
|
257 |
+
'aliases' =>
|
258 |
+
array (
|
259 |
+
),
|
260 |
+
'reference' => 'a26026ae5cdf0a650b3511a22dbcb9329073b82c',
|
261 |
+
),
|
262 |
+
'erusev/parsedown' =>
|
263 |
+
array (
|
264 |
+
'pretty_version' => '1.7.4',
|
265 |
+
'version' => '1.7.4.0',
|
266 |
+
'aliases' =>
|
267 |
+
array (
|
268 |
+
),
|
269 |
+
'reference' => 'cb17b6477dfff935958ba01325f2e8a2bfa6dab3',
|
270 |
+
),
|
271 |
+
'mnapoli/php-di' =>
|
272 |
+
array (
|
273 |
+
'replaced' =>
|
274 |
+
array (
|
275 |
+
0 => '*',
|
276 |
+
),
|
277 |
+
),
|
278 |
+
'php-di/invoker' =>
|
279 |
+
array (
|
280 |
+
'pretty_version' => '1.3.3',
|
281 |
+
'version' => '1.3.3.0',
|
282 |
+
'aliases' =>
|
283 |
+
array (
|
284 |
+
),
|
285 |
+
'reference' => '1f4ca63b9abc66109e53b255e465d0ddb5c2e3f7',
|
286 |
+
),
|
287 |
+
'php-di/php-di' =>
|
288 |
+
array (
|
289 |
+
'pretty_version' => '5.2.2',
|
290 |
+
'version' => '5.2.2.0',
|
291 |
+
'aliases' =>
|
292 |
+
array (
|
293 |
+
),
|
294 |
+
'reference' => 'f574bcc841201ab04587b1c6da1234d4044f67d8',
|
295 |
+
),
|
296 |
+
'php-di/phpdoc-reader' =>
|
297 |
+
array (
|
298 |
+
'pretty_version' => '2.1.1',
|
299 |
+
'version' => '2.1.1.0',
|
300 |
+
'aliases' =>
|
301 |
+
array (
|
302 |
+
),
|
303 |
+
'reference' => '15678f7451c020226807f520efb867ad26fbbfcf',
|
304 |
+
),
|
305 |
+
'psr/container' =>
|
306 |
+
array (
|
307 |
+
'pretty_version' => '1.0.0',
|
308 |
+
'version' => '1.0.0.0',
|
309 |
+
'aliases' =>
|
310 |
+
array (
|
311 |
+
),
|
312 |
+
'reference' => 'b7ce3b176482dbbc1245ebf52b181af44c2cf55f',
|
313 |
+
),
|
314 |
+
'psr/log' =>
|
315 |
+
array (
|
316 |
+
'pretty_version' => '1.1.2',
|
317 |
+
'version' => '1.1.2.0',
|
318 |
+
'aliases' =>
|
319 |
+
array (
|
320 |
+
),
|
321 |
+
'reference' => '446d54b4cb6bf489fc9d75f55843658e6f25d801',
|
322 |
+
),
|
323 |
+
'rebelcode/composer-cleanup-plugin' =>
|
324 |
+
array (
|
325 |
+
'pretty_version' => 'v0.2',
|
326 |
+
'version' => '0.2.0.0',
|
327 |
+
'aliases' =>
|
328 |
+
array (
|
329 |
+
),
|
330 |
+
'reference' => '3677eb752eb8ca042ba6f725b33f419b93857a62',
|
331 |
+
),
|
332 |
+
'symfony/polyfill-ctype' =>
|
333 |
+
array (
|
334 |
+
'pretty_version' => 'v1.13.1',
|
335 |
+
'version' => '1.13.1.0',
|
336 |
+
'aliases' =>
|
337 |
+
array (
|
338 |
+
),
|
339 |
+
'reference' => 'f8f0b461be3385e56d6de3dbb5a0df24c0c275e3',
|
340 |
+
),
|
341 |
+
'symfony/polyfill-mbstring' =>
|
342 |
+
array (
|
343 |
+
'pretty_version' => 'v1.17.1',
|
344 |
+
'version' => '1.17.1.0',
|
345 |
+
'aliases' =>
|
346 |
+
array (
|
347 |
+
),
|
348 |
+
'reference' => '7110338d81ce1cbc3e273136e4574663627037a7',
|
349 |
+
),
|
350 |
+
'symfony/translation' =>
|
351 |
+
array (
|
352 |
+
'pretty_version' => 'v2.8.52',
|
353 |
+
'version' => '2.8.52.0',
|
354 |
+
'aliases' =>
|
355 |
+
array (
|
356 |
+
),
|
357 |
+
'reference' => 'fc58c2a19e56c29f5ba2736ec40d0119a0de2089',
|
358 |
+
),
|
359 |
+
'twig/extensions' =>
|
360 |
+
array (
|
361 |
+
'pretty_version' => 'v1.5.4',
|
362 |
+
'version' => '1.5.4.0',
|
363 |
+
'aliases' =>
|
364 |
+
array (
|
365 |
+
),
|
366 |
+
'reference' => '57873c8b0c1be51caa47df2cdb824490beb16202',
|
367 |
+
),
|
368 |
+
'twig/twig' =>
|
369 |
+
array (
|
370 |
+
'pretty_version' => 'v1.41.0',
|
371 |
+
'version' => '1.41.0.0',
|
372 |
+
'aliases' =>
|
373 |
+
array (
|
374 |
+
),
|
375 |
+
'reference' => '575cd5028362da591facde1ef5d7b94553c375c9',
|
376 |
+
),
|
377 |
+
'wprss/core' =>
|
378 |
+
array (
|
379 |
+
'pretty_version' => 'dev-develop',
|
380 |
+
'version' => 'dev-develop',
|
381 |
+
'aliases' =>
|
382 |
+
array (
|
383 |
+
),
|
384 |
+
'reference' => 'dbbd846351515ddbc9f72dc75ff1c3654e3bebf5',
|
385 |
+
),
|
386 |
+
),
|
387 |
+
);
|
vendor/composer/platform_check.php
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// platform_check.php @generated by Composer
|
4 |
+
|
5 |
+
$issues = array();
|
6 |
+
|
7 |
+
if (!(PHP_VERSION_ID >= 50400)) {
|
8 |
+
$issues[] = 'Your Composer dependencies require a PHP version ">= 5.4.0". You are running ' . PHP_VERSION . '.';
|
9 |
+
}
|
10 |
+
|
11 |
+
if ($issues) {
|
12 |
+
if (!headers_sent()) {
|
13 |
+
header('HTTP/1.1 500 Internal Server Error');
|
14 |
+
}
|
15 |
+
if (!ini_get('display_errors')) {
|
16 |
+
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
|
17 |
+
fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
|
18 |
+
} elseif (!headers_sent()) {
|
19 |
+
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
|
20 |
+
}
|
21 |
+
}
|
22 |
+
trigger_error(
|
23 |
+
'Composer detected issues in your platform: ' . implode(' ', $issues),
|
24 |
+
E_USER_ERROR
|
25 |
+
);
|
26 |
+
}
|
vendor/rebelcode/composer-cleanup-plugin/composer.json
CHANGED
@@ -14,7 +14,10 @@
|
|
14 |
}
|
15 |
],
|
16 |
"require": {
|
17 |
-
"composer-plugin-api": "^
|
|
|
|
|
|
|
18 |
},
|
19 |
"autoload": {
|
20 |
"psr-4": {
|
@@ -23,7 +26,7 @@
|
|
23 |
},
|
24 |
"extra": {
|
25 |
"branch-alias": {
|
26 |
-
"dev-master": "0.
|
27 |
},
|
28 |
"class": "RebelCode\\Composer\\CleanupPlugin"
|
29 |
}
|
14 |
}
|
15 |
],
|
16 |
"require": {
|
17 |
+
"composer-plugin-api": "^2.0"
|
18 |
+
},
|
19 |
+
"require-dev": {
|
20 |
+
"composer/composer": "^2.0"
|
21 |
},
|
22 |
"autoload": {
|
23 |
"psr-4": {
|
26 |
},
|
27 |
"extra": {
|
28 |
"branch-alias": {
|
29 |
+
"dev-master": "0.2"
|
30 |
},
|
31 |
"class": "RebelCode\\Composer\\CleanupPlugin"
|
32 |
}
|
vendor/rebelcode/composer-cleanup-plugin/src/CleanupPlugin.php
CHANGED
@@ -3,25 +3,31 @@
|
|
3 |
namespace RebelCode\Composer;
|
4 |
|
5 |
use Composer\Composer;
|
|
|
6 |
use Composer\EventDispatcher\EventSubscriberInterface;
|
|
|
|
|
7 |
use Composer\IO\IOInterface;
|
|
|
|
|
8 |
use Composer\Plugin\PluginInterface;
|
9 |
-
use Composer\
|
10 |
-
use Composer\Installer\PackageEvent;
|
11 |
-
use Composer\Script\CommandEvent;
|
12 |
use Composer\Util\Filesystem;
|
13 |
-
use Composer\Package\BasePackage;
|
14 |
|
15 |
class CleanupPlugin implements PluginInterface, EventSubscriberInterface
|
16 |
{
|
17 |
-
/** @var
|
18 |
protected $composer;
|
19 |
-
|
|
|
20 |
protected $io;
|
21 |
-
|
|
|
22 |
protected $config;
|
23 |
-
|
|
|
24 |
protected $filesystem;
|
|
|
25 |
/** @var array $rules */
|
26 |
protected $rules;
|
27 |
|
@@ -37,25 +43,23 @@ class CleanupPlugin implements PluginInterface, EventSubscriberInterface
|
|
37 |
$this->rules = CleanupRules::getRules();
|
38 |
}
|
39 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
/**
|
41 |
* {@inheritDoc}
|
42 |
*/
|
43 |
public static function getSubscribedEvents()
|
44 |
{
|
45 |
-
return
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
ScriptEvents::POST_PACKAGE_UPDATE => array(
|
50 |
-
array('onPostPackageUpdate', 0)
|
51 |
-
),
|
52 |
-
/*ScriptEvents::POST_INSTALL_CMD => array(
|
53 |
-
array('onPostInstallUpdateCmd', 0)
|
54 |
-
),
|
55 |
-
ScriptEvents::POST_UPDATE_CMD => array(
|
56 |
-
array('onPostInstallUpdateCmd', 0)
|
57 |
-
),*/
|
58 |
-
);
|
59 |
}
|
60 |
|
61 |
/**
|
@@ -63,7 +67,7 @@ class CleanupPlugin implements PluginInterface, EventSubscriberInterface
|
|
63 |
*/
|
64 |
public function onPostPackageInstall(PackageEvent $event)
|
65 |
{
|
66 |
-
/** @var
|
67 |
$package = $event->getOperation()->getPackage();
|
68 |
|
69 |
$this->cleanPackage($package);
|
@@ -74,7 +78,7 @@ class CleanupPlugin implements PluginInterface, EventSubscriberInterface
|
|
74 |
*/
|
75 |
public function onPostPackageUpdate(PackageEvent $event)
|
76 |
{
|
77 |
-
/** @var
|
78 |
$package = $event->getOperation()->getTargetPackage();
|
79 |
|
80 |
$this->cleanPackage($package);
|
@@ -83,15 +87,15 @@ class CleanupPlugin implements PluginInterface, EventSubscriberInterface
|
|
83 |
/**
|
84 |
* Function to run after a package has been updated
|
85 |
*
|
86 |
-
* @param
|
87 |
*/
|
88 |
-
public function onPostInstallUpdateCmd(
|
89 |
{
|
90 |
-
/** @var
|
91 |
$repository = $this->composer->getRepositoryManager()->getLocalRepository();
|
92 |
|
93 |
-
/** @var
|
94 |
-
foreach($repository->getPackages() as $package){
|
95 |
if ($package instanceof BasePackage) {
|
96 |
$this->cleanPackage($package);
|
97 |
}
|
@@ -118,7 +122,7 @@ class CleanupPlugin implements PluginInterface, EventSubscriberInterface
|
|
118 |
|
119 |
$rules = isset($this->rules[$packageName]) ? $this->rules[$packageName] : null;
|
120 |
if(!$rules){
|
121 |
-
return;
|
122 |
}
|
123 |
|
124 |
$dir = $this->filesystem->normalizePath(realpath($vendorDir . '/' . $packageDir));
|
3 |
namespace RebelCode\Composer;
|
4 |
|
5 |
use Composer\Composer;
|
6 |
+
use Composer\Config;
|
7 |
use Composer\EventDispatcher\EventSubscriberInterface;
|
8 |
+
use Composer\Installer\PackageEvent;
|
9 |
+
use Composer\Installer\PackageEvents;
|
10 |
use Composer\IO\IOInterface;
|
11 |
+
use Composer\Package\BasePackage;
|
12 |
+
use Composer\Package\CompletePackage;
|
13 |
use Composer\Plugin\PluginInterface;
|
14 |
+
use Composer\Repository\WritableRepositoryInterface;
|
|
|
|
|
15 |
use Composer\Util\Filesystem;
|
|
|
16 |
|
17 |
class CleanupPlugin implements PluginInterface, EventSubscriberInterface
|
18 |
{
|
19 |
+
/** @var Composer $composer */
|
20 |
protected $composer;
|
21 |
+
|
22 |
+
/** @var IOInterface $io */
|
23 |
protected $io;
|
24 |
+
|
25 |
+
/** @var Config $config */
|
26 |
protected $config;
|
27 |
+
|
28 |
+
/** @var Filesystem $filesystem */
|
29 |
protected $filesystem;
|
30 |
+
|
31 |
/** @var array $rules */
|
32 |
protected $rules;
|
33 |
|
43 |
$this->rules = CleanupRules::getRules();
|
44 |
}
|
45 |
|
46 |
+
public function deactivate(Composer $composer, IOInterface $io)
|
47 |
+
{
|
48 |
+
}
|
49 |
+
|
50 |
+
public function uninstall(Composer $composer, IOInterface $io)
|
51 |
+
{
|
52 |
+
}
|
53 |
+
|
54 |
/**
|
55 |
* {@inheritDoc}
|
56 |
*/
|
57 |
public static function getSubscribedEvents()
|
58 |
{
|
59 |
+
return [
|
60 |
+
PackageEvents::POST_PACKAGE_INSTALL => 'onPostPackageInstall',
|
61 |
+
PackageEvents::POST_PACKAGE_UPDATE => 'onPostPackageUpdate',
|
62 |
+
];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
63 |
}
|
64 |
|
65 |
/**
|
67 |
*/
|
68 |
public function onPostPackageInstall(PackageEvent $event)
|
69 |
{
|
70 |
+
/** @var CompletePackage $package */
|
71 |
$package = $event->getOperation()->getPackage();
|
72 |
|
73 |
$this->cleanPackage($package);
|
78 |
*/
|
79 |
public function onPostPackageUpdate(PackageEvent $event)
|
80 |
{
|
81 |
+
/** @var CompletePackage $package */
|
82 |
$package = $event->getOperation()->getTargetPackage();
|
83 |
|
84 |
$this->cleanPackage($package);
|
87 |
/**
|
88 |
* Function to run after a package has been updated
|
89 |
*
|
90 |
+
* @param PackageEvent $event
|
91 |
*/
|
92 |
+
public function onPostInstallUpdateCmd(PackageEvent $event)
|
93 |
{
|
94 |
+
/** @var WritableRepositoryInterface $repository */
|
95 |
$repository = $this->composer->getRepositoryManager()->getLocalRepository();
|
96 |
|
97 |
+
/** @var CompletePackage $package */
|
98 |
+
foreach ($repository->getPackages() as $package) {
|
99 |
if ($package instanceof BasePackage) {
|
100 |
$this->cleanPackage($package);
|
101 |
}
|
122 |
|
123 |
$rules = isset($this->rules[$packageName]) ? $this->rules[$packageName] : null;
|
124 |
if(!$rules){
|
125 |
+
return false;
|
126 |
}
|
127 |
|
128 |
$dir = $this->filesystem->normalizePath(realpath($vendorDir . '/' . $packageDir));
|
wp-rss-aggregator.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Plugin Name: WP RSS Aggregator
|
5 |
* Plugin URI: https://www.wprssaggregator.com/#utm_source=wpadmin&utm_medium=plugin&utm_campaign=wpraplugin
|
6 |
* Description: Imports and aggregates multiple RSS Feeds.
|
7 |
-
* Version: 4.
|
8 |
* Author: RebelCode
|
9 |
* Author URI: https://www.wprssaggregator.com
|
10 |
* Text Domain: wprss
|
@@ -76,7 +76,7 @@ use RebelCode\Wpra\Core\Plugin;
|
|
76 |
|
77 |
// Set the version number of the plugin.
|
78 |
if( !defined( 'WPRSS_VERSION' ) )
|
79 |
-
define( 'WPRSS_VERSION', '4.
|
80 |
|
81 |
if( !defined( 'WPRSS_WP_MIN_VERSION' ) )
|
82 |
define( 'WPRSS_WP_MIN_VERSION', '4.8' );
|
@@ -318,6 +318,9 @@ require_once ( WPRSS_INC . 'polyfills.php' );
|
|
318 |
/* Load the youtube functionality */
|
319 |
require_once ( WPRSS_INC . 'youtube.php' );
|
320 |
|
|
|
|
|
|
|
321 |
/* Load the Templates v0.2.1 update path */
|
322 |
require_once ( WPRSS_INC . 'templates-update.php' );
|
323 |
|
4 |
* Plugin Name: WP RSS Aggregator
|
5 |
* Plugin URI: https://www.wprssaggregator.com/#utm_source=wpadmin&utm_medium=plugin&utm_campaign=wpraplugin
|
6 |
* Description: Imports and aggregates multiple RSS Feeds.
|
7 |
+
* Version: 4.18
|
8 |
* Author: RebelCode
|
9 |
* Author URI: https://www.wprssaggregator.com
|
10 |
* Text Domain: wprss
|
76 |
|
77 |
// Set the version number of the plugin.
|
78 |
if( !defined( 'WPRSS_VERSION' ) )
|
79 |
+
define( 'WPRSS_VERSION', '4.18' );
|
80 |
|
81 |
if( !defined( 'WPRSS_WP_MIN_VERSION' ) )
|
82 |
define( 'WPRSS_WP_MIN_VERSION', '4.8' );
|
318 |
/* Load the youtube functionality */
|
319 |
require_once ( WPRSS_INC . 'youtube.php' );
|
320 |
|
321 |
+
/* Load the multi-media file */
|
322 |
+
require_once ( WPRSS_INC . 'multimedia.php' );
|
323 |
+
|
324 |
/* Load the Templates v0.2.1 update path */
|
325 |
require_once ( WPRSS_INC . 'templates-update.php' );
|
326 |
|