-
Notifications
You must be signed in to change notification settings - Fork 4
/
state.php
2918 lines (2659 loc) · 139 KB
/
state.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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
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
171
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
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
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
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
471
472
473
474
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
507
508
509
510
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
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
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
621
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
791
792
793
794
795
796
797
798
799
800
801
802
803
804
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
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
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
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
require_once AMAPRESS__PLUGIN_DIR . '/utils/install-from-github.php';
add_action( 'template_redirect', function () {
if ( 'shouldredirect' == get_query_var( 'amp_action' ) ) {
wp_die( '<strong style="color: #2b542c">' . __( 'Redirection réussie', 'amapress' ) . '</strong>' );
}
} );
function amapress_check_spf() {
/* Taken from stop-wp-emails-going-to-spam plugin */
$ip = $_SERVER['SERVER_ADDR'];
if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) ) {
$ip4 = true;
} else {
$ip4 = false;
}
if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ) ) {
$ip6 = true;
} else {
$ip6 = false;
}
$domain = Amapress::getSiteDomainName( true );
$dns = @dns_get_record( $domain, DNS_ALL );
$spf = false;
if ( $dns ) {
foreach ( $dns as $dnstxt ) {
if ( 'TXT' == $dnstxt['type'] ) {
if ( isset( $dnstxt['txt'] ) ) {
if ( 'v=spf' == substr( $dnstxt['txt'], 0, 5 ) ) {
$spf = $dnstxt['txt'];
break;
}
}
}
}
}
ob_start();
if ( ! $dns ) {
_e( '<p class="notice notice-error">Cannot get DNS records - refresh this page - if you still get this message after a few refreshes you may want to check your domain DNS control panel</p>', 'stop-wp-emails-going-to-spam' );
} else {
if ( false == $spf ) {
printf( __( '<p class="notice notice-error">No SPF record found for %s, the following SPF record is recommended', 'stop-wp-emails-going-to-spam' ), $domain );
if ( $ip4 || $ip6 ) {
printf( ' v=spf1 +a +mx %s:%s ~all', ( $ip4 ) ? 'ip4' : 'ip6', esc_html( $ip ) );
} else {
echo 'v=spf1 +a +mx ~all';
}
echo '</p>';
} else {
printf( __( 'Current record SPF record for %s: <br><strong>%s</strong><br><br>', 'stop-wp-emails-going-to-spam' ), $domain, $spf );
// if ( strpos( $spf, $ip ) ) {
// _e( '<p class="notice notice-success">Good!, this contains your server IP address</p>', 'stop-wp-emails-going-to-spam' );
// } else {
// printf( __( '<p class="notice notice-warning">Recommend you add +%s:%s to your SPF record</p>', 'stop-wp-emails-going-to-spam' ), ( $ip4 ) ? 'ip4' : 'ip6', esc_html( $ip ) );
// }
}
}
return ob_get_clean();
}
function amapress_get_plugin_install_link( $plugin_slug ) {
$action = 'install-plugin';
return wp_nonce_url(
add_query_arg(
array(
'action' => $action,
'plugin' => $plugin_slug
),
admin_url( 'update.php' )
),
$action . '_' . $plugin_slug
);
}
function amapress_get_plugin_activate_link( $plugin_slug ) {
$installed_plugins = array_keys( get_plugins() );
$installed_plugins = array_combine( array_map( function ( $v ) {
$vv = explode( '/', $v );
return $vv[0];
}, $installed_plugins ), array_values( $installed_plugins ) );
$plugin_slug = isset( $installed_plugins[ $plugin_slug ] ) ? $installed_plugins[ $plugin_slug ] : $plugin_slug;
$action = 'activate';
return wp_nonce_url(
add_query_arg(
array(
'action' => $action,
'plugin' => $plugin_slug
),
admin_url( 'plugins.php' )
),
'activate-plugin_' . $plugin_slug
);
}
function amapress_get_plugin_desactivate_link( $plugin_slug ) {
$installed_plugins = array_keys( get_plugins() );
$installed_plugins = array_combine( array_map( function ( $v ) {
$vv = explode( '/', $v );
return $vv[0];
}, $installed_plugins ), array_values( $installed_plugins ) );
$plugin_slug = isset( $installed_plugins[ $plugin_slug ] ) ? $installed_plugins[ $plugin_slug ] : $plugin_slug;
$action = 'deactivate';
return wp_nonce_url(
add_query_arg(
array(
'action' => $action,
'plugin' => $plugin_slug
),
admin_url( 'plugins.php' )
),
'deactivate-plugin_' . $plugin_slug
);
}
function amapress_get_check_state( $state, $name, $message, $link, $values = null, $target_blank = true, $icon = '' ) {
return array(
'state' => $state,
'name' => $name,
'message' => $message,
'link' => $link,
'values' => $values,
'target_blank' => $target_blank,
'icon' => $icon,
);
}
function amapress_is_plugin_active( $plugin_slug ) {
// Check if get_plugins() function exists. This is required on the front end of the
// site, since it is in a file that is normally only loaded in the admin.
if ( ! function_exists( 'get_plugins' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
$installed_plugins = array_keys( get_plugins() );
$network_active_plugins = array_keys( get_site_option( 'active_sitewide_plugins', array() ) );
$active_plugins = array_values( get_option( 'active_plugins', array() ) );
$active_plugins = array_merge( $active_plugins, $network_active_plugins );
// var_dump($active_plugins);
$active_plugins = array_map( function ( $v ) {
$vv = explode( '/', $v );
return $vv[0];
}, $active_plugins );
$installed_plugins = array_map( function ( $v ) {
$vv = explode( '/', $v );
return $vv[0];
}, $installed_plugins );
return in_array( $plugin_slug, $active_plugins ) ? 'active' : ( in_array( $plugin_slug, $installed_plugins ) ? 'installed' : 'not-installed' );
}
function amapress_check_plugin_install(
$plugin_slug, $plugin_name, $message_if_install_needed,
$not_installed_level = 'warning', $installed_level = 'success',
$values = null
) {
if ( is_array( $plugin_slug ) ) {
$is_active = amapress_is_plugin_active( $plugin_slug['short_slug'] );
$action_link = amapress_install_plugin_from_github_url(
$plugin_slug['slug'],
$plugin_slug['name'],
$plugin_slug['github_repo']
);
$plugin_info_link = Amapress::makeExternalLink( 'https://github.com/' . $plugin_slug['github_repo'],
__( 'Voir le dépôt GitHub de l\'extension', 'amapress' ), true );
$install_link = $action_link;
$activate_link = $action_link;
} else {
$is_active = amapress_is_plugin_active( $plugin_slug );
$plugin_info_link = '<span class="dashicons dashicons-wordpress-alt"></span> ' .
Amapress::makeLink( 'https://fr.wordpress.org/plugins/' . $plugin_slug,
__( 'Fiche Infos Wordpress', 'amapress' ), true, true );
$install_link = amapress_get_plugin_install_link( $plugin_slug );
$activate_link = amapress_get_plugin_activate_link( $plugin_slug );
}
return amapress_get_check_state(
$is_active == 'active' ? $installed_level : $not_installed_level,
$plugin_name . ( $is_active != 'active' ? ' (<span class="dashicons dashicons-admin-plugins"></span> ' . ( $is_active == 'not-installed' ? __( 'installer', 'amapress' ) : __( 'activer', 'amapress' ) ) . ')' : ' (<span class="dashicons dashicons-plugins-checked"></span> ' . __( 'actif', 'amapress' ) . ')' ),
$message_if_install_needed . '<br/>' . $plugin_info_link,
$is_active == 'not-installed' ? $install_link : ( $is_active == 'installed' ? $activate_link : '' ),
$values, true, false
);
}
function amapress_check_plugin_not_active( $plugin_slug, $plugin_name, $message_if_active, $active_level = 'warning' ) {
$is_active = amapress_is_plugin_active( $plugin_slug );
return amapress_get_check_state(
$is_active == 'active' ? $active_level : 'success',
$plugin_name . ( $is_active == 'active' ? ' (désactiver)' : '' ),
$message_if_active,
$is_active == 'active' ? amapress_get_plugin_desactivate_link( $plugin_slug ) : ''
);
}
function amapress_clean_state_transient() {
global $amapress_import_demo;
if ( $amapress_import_demo ) {
return;
}
static $amapress_clean_state_transient = false;
if ( ! $amapress_clean_state_transient ) {
delete_transient( 'amapress_state_summary' );
delete_transient( 'amapress_state_check_titles' );
$amapress_clean_state_transient = true;
}
}
function amapress_get_state() {
amapress_clean_state_transient();
$state = array();
$state['01_plugins'] = array();
$backup_status = amapress_get_updraftplus_backup_status();
$state['01_plugins'][] = amapress_check_plugin_install( 'updraftplus', __( 'UpdraftPlus WordPress Backup', 'amapress' ),
sprintf( __( '<strong>Requis</strong> : Réalise la sauvegarde du site.
<br/><strong>Etat actuel</strong>: sauvegarde %s (%s), %s
<br/><strong>Configuration minimale :</strong> sauvegarde quotidienne de la base de données, sauvegarde hebdomadaire des fichiers, stockage externe', 'amapress' ),
$backup_status, amapress_get_updraftplus_backup_last_backup_date(), amapress_get_updraftplus_backup_intervals() ) .
sprintf( __( '<br/>%s
<br/><span class="dashicons dashicons-admin-settings"></span> %s', 'amapress' ),
Amapress::makeWikiLink( 'https://wiki.amapress.fr/admin/sauvegarde' ), Amapress::makeLink( admin_url( 'options-general.php?page=updraftplus' ), __( 'Configuration', 'amapress' ), true, true ) ),
! defined( 'FREE_PAGES_PERSO' ) && ! defined( 'AMAPRESS_DEMO_MODE' ) ? 'error' : 'info',
! defined( 'FREE_PAGES_PERSO' ) && ! defined( 'AMAPRESS_DEMO_MODE' ) ?
( 'inactive' == $backup_status ? 'error' : ( 'local' == $backup_status ? 'warning' : 'success' ) ) : 'info' );
$state['01_plugins'][] = amapress_check_plugin_install( 'akismet', __( 'Akismet', 'amapress' ),
__( '<strong>Recommandé</strong> : Protège le site du SPAM.', 'amapress' ),
'warning' );
$state['01_plugins'][] = amapress_check_plugin_install( 'block-bad-queries', __( 'Block Bad Queries', 'amapress' ),
__( '<strong>Recommandé</strong> : Protège votre site contre les attaques par requêtes malveillantes', 'amapress' ),
'warning' );
$state['01_plugins'][] = amapress_check_plugin_install( 'new-user-approve', __( 'New User Approve', 'amapress' ),
__( '<strong>Optionnel</strong> : Installer ce plugin si le paramètre « Création de compte sur le site » (Section 2 – configuration) est activé. Une inscription en ligne nécessitera une validation de l’utilisateur par un administrateur.', 'amapress' ),
Amapress::userCanRegister() ? 'error' : 'info' );
$state['01_plugins'][] = amapress_check_plugin_install(
[
'short_slug' => 'google-sitemap-generator',
'slug' => 'google-sitemap-generator/sitemap.php',
'name' => __( 'Google XML Sitemaps (BlueChip fork)', 'amapress' ),
'github_repo' => 'chesio/google-sitemap-generator',
],
__( 'Google XML Sitemaps (BlueChip fork)', 'amapress' ),
sprintf( __( '<strong>Recommandé</strong> : Utilisation simple, améliore le référencement du site en générant un plan du site et en notifiant les moteurs de recherche des modifications du site.
<br/>Après activation rendez-vous dans sa <a target="_blank" href="%s">configuration</a> (Section Contenu du sitemap/Autres types d\'article) et cocher les cases "Inclure les articles de type Produits/Recettes/Producteurs/Lieux de distribution/Productions"', 'amapress' ), admin_url( 'options-general.php?page=google-sitemap-generator%2Fsitemap.php#sm_includes' ) ),
defined( 'AMAPRESS_DEMO_MODE' ) ? 'info' : 'warning' );
$state['01_plugins'][] = amapress_check_plugin_install( 'unconfirmed', __( 'Unconfirmed', 'amapress' ),
__( '<strong>Recommandé</strong> : Permet de gérer les inscriptions en cours, renvoyer le mail de bienvenue avec le lien pour activer le compte utilisateur.', 'amapress' ),
'warning' );
$state['01_plugins'][] = amapress_check_plugin_install( 'user-switching', __( 'User Switching', 'amapress' ),
__( '<strong>Recommandé</strong> : Permet aux administrateurs de consulter Amapress avec un autre compte utilisateur. Ce plugin est à installer par un webmaster. ', 'amapress' ),
'warning' );
$state['01_plugins'][] = amapress_check_plugin_install( 'wp-maintenance', 'WP Maintenance',
__( '<strong>Optionnel</strong> : Permet d\'indiquer aux visiteurs que le site de votre AMAP est en construction et d\'éviter l\'affichage de contenu non finalisé.', 'amapress' ),
'info' );
$state['01_plugins'][] = amapress_check_plugin_install( 'uk-cookie-consent', 'Termly | GDPR/CCPA Cookie Consent Banner',
__( '<strong>Recommandé</strong> : Affiche un bandeau de consentement à l\'utilisation des cookies sur votre site. Cela est nécessaire pour être en conformité avec la loi RGPD, par exemple, si vous faites des statistiques (ie, Google Analytics) sur les visiteurs.', 'amapress' ),
'warning' );
$state['01_plugins'][] = amapress_check_plugin_install( 'enable-media-replace', __( 'Enable Media Replace', 'amapress' ),
__( '<strong>Recommandé</strong> : Permet de remplacer facilement une image ou un contrat Word dans la « Media Library » de Wordpress', 'amapress' ),
'warning' );
$state['01_plugins'][] = amapress_check_plugin_install( 'contact-form-7', __( 'Contact Form 7', 'amapress' ),
sprintf(
__( '<strong>Optionnel</strong> : Permet de créer des formulaires de demande d\'adhésion à l’AMAP (%s), de contact les auteurs de recettes…', 'amapress' ),
Amapress::makeWikiLink( 'https://wiki.amapress.fr/admin/contact_form' )
),
'info' );
$state['01_plugins'][] = amapress_check_plugin_install( 'really-simple-captcha', __( 'Really Simple CAPTCHA', 'amapress' ),
__( '<strong>Optionnel</strong> : Permet de mettre des captcha dans les formulaires Contact Form 7 pour empêcher les bots de spams', 'amapress' ),
'info' );
$state['01_plugins'][] = amapress_check_plugin_install( 'contact-form-7-honeypot', __( 'Honeypot for Contact Form 7', 'amapress' ),
__( '<strong>Optionnel</strong> : Permet de mettre des pièges à bots de spams dans les formulaires Contact Form 7 (sans impact sur les utilisateurs)', 'amapress' ),
'info' );
$state['02_plugins_not'] = array();
$state['02_plugins_not'][] = amapress_check_plugin_not_active( 'aryo-activity-log', __( 'Activity Log', 'amapress' ),
__( '<strong>Non recommandé</strong> : ce plugin peut entrainer des lenteurs du Tableau de Bord et du site en général; Permet de tracer l\'activité des utilisateurs dans votre AMAP (création, modification, suppression de contenu, pages, articles, utilisateurs...)', 'amapress' ),
'warning' );
$state['05_config'] = array();
if ( version_compare( phpversion(), '7.0', '<' ) ) {
$state['05_config'][] = amapress_get_check_state(
'warning',
sprintf( __( 'PHP 7 ou sup recommandée (actuellement %s)', 'amapress' ), phpversion() ),
__( 'Voir la configuration de votre hébergement (par ex, pour <a href="https://docs.ovh.com/fr/hosting/configurer-le-php-sur-son-hebergement-web-mutu-2014/">OVH</a>). Utiliser la version 7 ou supérieur de PHP est recommandé pour obtenir des performances optimales pour WordPress et Amapress.', 'amapress' ),
''
);
}
if ( ! defined( 'FREE_PAGES_PERSO' ) ) {
$github_updater = get_option( 'git_updater' );
if ( is_multisite() ) {
$github_updater = get_site_option( 'git_updater' );
}
if ( empty( $github_updater ) ) {
$state['05_config'][] = amapress_get_check_state(
'error',
__( 'L\'extension Git Updater est requis pour la bonne mise à jour d\'Amapress', 'amapress' ),
__( 'Veuillez utiliser l\'installateur automatique qui est affiché en haut du <a target="_blank" href="', 'amapress' ) . admin_url( 'index.php' ) . '">tableau de bord</a> ou suivre la <a target="_blank" href="https://github.com/afragen/git-updater/wiki/Installation">procédure d\'installation manuelle</a>',
''
);
} elseif ( empty( $github_updater['github_access_token'] ) ) {
$state['05_config'][] = amapress_get_check_state(
'error',
__( 'Un jeton d\'accès GitHub (Personal Access Token) pour l\'extension Git Updater est requis pour la bonne mise à jour d\'Amapress', 'amapress' ),
__( 'Veuillez créer un Personal Access Token en suivant ce <a target="_blank" href="https://git-updater.com/knowledge-base/general-usage/">lien</a>', 'amapress' ),
admin_url( 'options-general.php?page=git-updater&tab=git_updater_settings&subtab=github' )
);
}
}
if ( ! extension_loaded( 'zip' ) ) {
$state['05_config'][] = amapress_get_check_state(
'error',
__( 'Extension PHP ZIP', 'amapress' ),
__( 'L\'extension ZIP de PHP doit être activée pour le bon fonctionnement d\'Amapress', 'amapress' ),
'https://www.php.net/manual/fr/zip.setup.php'
);
}
if ( ! extension_loaded( 'curl' ) ) {
$state['05_config'][] = amapress_get_check_state(
'error',
__( 'Extension PHP cURL', 'amapress' ),
__( 'L\'extension cURL de PHP doit être activée pour le bon fonctionnement d\'Amapress', 'amapress' ),
'https://www.php.net/manual/fr/curl.setup.php'
);
}
if ( ! extension_loaded( 'imap' ) ) {
$state['05_config'][] = amapress_get_check_state(
'warning',
__( 'Extension PHP IMAP', 'amapress' ),
__( 'L\'extension IMAP de PHP doit être activée pour que les Emails groupés soient actifs', 'amapress' ),
'https://www.php.net/manual/fr/imap.setup.php'
);
}
if ( 'active' === amapress_is_plugin_active( 'akismet' ) ) {
if ( ! amapress_has_akismet_api_key() ) {
$state['05_config'][] = amapress_get_check_state(
'warning',
__( 'Clé API Akismet', 'amapress' ),
__( 'Une clé API doit être configurée pour qu\'Akismet soit fonctionnel', 'amapress' ),
admin_url( 'options-general.php?page=akismet-key-config' )
);
}
}
$state['05_config'][] = amapress_get_check_state(
is_ssl() ? 'success' : 'warning',
is_ssl() ? 'HTTPS Activé' : 'HTTPS Désactivé',
__( 'Passer votre site en HTTPS améliore sa sécurité et son référencement.', 'amapress' )
. ( ! is_ssl() ? '<br/>' . __( 'Pour activer le HTTPS simplement dans WordPress, voir plugin Really Simple SSL ci-dessous.', 'amapress' ) : '' )
. ( is_ssl() && current_user_can( 'manage_options' ) ?
'<br/><a href="' . esc_attr( add_query_arg( 'check_ssl', 'T' ) ) . '" target="_blank">' . __( 'Vérifier que le contenu du site de votre AMAP référence uniquement du contenu HTTPS', 'amapress' ) . '</a>'
: '' ),
''
);
if ( is_ssl() ) {
$siteurl = get_option( 'siteurl' );
if ( ! empty( $siteurl ) && 0 !== strpos( $siteurl, 'https:' ) ) {
$state['05_config'][] = amapress_get_check_state(
'error',
__( 'Paramètre "Adresse web de WordPress (URL)" non HTTPS', 'amapress' ),
sprintf( __( 'Devrait contenir "%s" au lieu de "%s"', 'amapress' ), str_replace( 'http:', 'https:', $siteurl ), $siteurl ),
admin_url( 'options-general.php' )
);
}
$home = get_option( 'home' );
if ( ! empty( $home ) && 0 !== strpos( $home, 'https:' ) ) {
$state['05_config'][] = amapress_get_check_state(
'error',
__( 'Paramètre "Adresse web du site (URL)" non HTTPS', 'amapress' ),
sprintf( __( 'Devrait contenir "%s" au lieu de "%s"', 'amapress' ), str_replace( 'http:', 'https:', $home ), $home ),
admin_url( 'options-general.php' )
);
}
}
$state['05_config'][] = amapress_check_plugin_install( 'really-simple-ssl', __( 'Really Simple SSL', 'amapress' ),
__( '<strong>Recommandé</strong> : Aide à passer votre site en HTTPS.', 'amapress' ),
is_ssl() ? 'info' : 'warning' );
$permalink_structure = get_option( 'permalink_structure' );
if ( defined( 'FREE_PAGES_PERSO' ) && FREE_PAGES_PERSO ) {
$state['05_config'][] = amapress_get_check_state(
empty( $permalink_structure )
|| ! in_array( $permalink_structure,
[
'/index.php/%year%/%monthnum%/%day%/%postname%/',
'/index.php/%year%/%monthnum%/%postname%/',
'/index.php/%postname%/'
] ) ? 'error' : 'success',
__( 'Réglage des permaliens', 'amapress' ),
__( 'Le réglage des permaliens pour Free Pages Perso doit être "Structure personnalisée", commencer par /index.php/ suivi de "%postname%/" ou "%year%/%monthnum%/%postname%/" ou "%year%/%monthnum%/%day%/%postname%/"', 'amapress' ),
admin_url( 'options-permalink.php' )
);
} else {
$state['05_config'][] = amapress_get_check_state(
'info',
'DNS SPF record',
amapress_check_spf(),
''
);
$state['05_config'][] = amapress_get_check_state(
empty( $permalink_structure )
|| ! in_array( $permalink_structure,
[
'/%year%/%monthnum%/%day%/%postname%/',
'/%year%/%monthnum%/%postname%/',
'/%postname%/'
] ) ? 'error' : 'success',
__( 'Réglage des permaliens', 'amapress' ),
__( 'Le réglage des permaliens doit suivre une des valeurs suivantes : Date et titre, Mois et titre ou Titre de la publication', 'amapress' ),
admin_url( 'options-permalink.php' )
);
}
$has_site_verif_codes = ! empty( Amapress::getOption( '' ) ) && ! empty( Amapress::getOption( '' ) );
$state['05_config'][] = amapress_get_check_state(
$has_site_verif_codes ? 'success' : 'warning',
$has_site_verif_codes ? __( 'Code de vérification du site (Google/Bing) : OK', 'amapress' ) : __( 'Codes de vérification du site (Google/Bing) : non renseignés', 'amapress' ),
__( 'Créer des codes de vérification du site depuis les Webmaster Tools pour <a href="https://www.google.com/webmasters/tools/dashboard?hl=fr" target="_blank">Google</a> et <a href="https://www.bing.com/toolbox/webmaster" target="_blank">Bing</a> permet d\'obtenir un meilleur référencement', 'amapress' ),
admin_url( 'options-general.php?page=amapress_site_options_page&tab=amp_site_reference' )
);
if ( ! function_exists( 'get_filesystem_method' ) ) {
require_once ABSPATH . 'wp-admin/includes/file.php';
}
$transport = get_filesystem_method();
$state['05_config'][] = amapress_get_check_state(
'direct' == $transport ? 'success' : 'warning',
sprintf( __( 'Méthode de mise à jour WordPress: %s', 'amapress' ), $transport ),
'direct' == $transport ? __( 'Le mode de mise à jour actuel est direct. Vous pourrez effectuer les mises à jours sans problème.', 'amapress' ) : __( 'Le mode de mise à jour actuel n\'est pas direct. Vous pourrez rencontrer des difficultés à effectuer les mises à jours (<a href="https://codex.wordpress.org/fr:Modifier_wp-config.php#Les_Constantes_des_Mises_.C3.80_Jour_WordPress" target="_blank">voir les options de configuration de WordPress</a>).', 'amapress' ),
''
);
$redir_test_url = site_url( 'shouldredirect' );
$state['05_config'][] = amapress_get_check_state(
'info',
__( 'Test de fonctionnement des redirections WordPress', 'amapress' ),
sprintf( __( 'Cliquez sur le lien suivant : <a target="_blank" href="%s">%s</a>.<br/>Si vous voyez un message indiquant "Redirection réussie", tout va bien. Sinon vérifiez que le mod_rewrite est actif et que les htaccess ne sont désactivés.', 'amapress' ), $redir_test_url, $redir_test_url ),
''
);
$htaccess_test_url = wp_upload_dir()['baseurl'] . '/amapress-contrats/';
$state['05_config'][] = amapress_get_check_state(
'info',
__( 'Test de fonctionnement de protection de dossier', 'amapress' ),
sprintf( __( 'Cliquez sur le lien suivant : <a target="_blank" href="%s">%s</a>.<br/>Si vous voyez un message indiquant "Accès interdit", tout va bien. Sinon vérifiez que les htaccess ne sont désactivés.', 'amapress' ), $htaccess_test_url, $htaccess_test_url ),
''
);
$admin_email = get_bloginfo( 'admin_email' );
$state['05_config'][] = amapress_get_check_state(
'info',
__( 'Adresse email de l\'administrateur', 'amapress' ),
sprintf( __( 'L\'adresse email de l\'administrateur du site est actuellement : <strong>%s</strong>. L\'administrateur reçoit des emails sur l\'activité sur le site comme le changement de mot de passe)', 'amapress' ), esc_html( $admin_email ) ),
admin_url( 'options-general.php' )
);
$state['05_config'][] = amapress_get_check_state(
'info',
__( 'Délai de suppression automatique des éléments dans les corbeilles', 'amapress' ),
sprintf( __( 'Actuellement %d jour(s). Pour changer la valeur, ajouter <code>define(\'EMPTY_TRASH_DAYS\', <em>valeur_en_jour</em>);</code> dans votre <code>wp-config.php</code>.', 'amapress' ), esc_html( EMPTY_TRASH_DAYS ) ),
''
);
$blog_desc = get_bloginfo( 'description' );
$state['05_config'][] = amapress_get_check_state(
empty( $blog_desc ) ? 'warning' : 'success',
__( 'Description de l\'AMAP', 'amapress' ),
__( 'Cette section permet le référencement dans les moteurs de recherche.
<br/>Remplir les champs <strong>Titre</strong> (Le nom de votre AMAP) et <strong>Slogan</strong> (Un sous titre pour votre AMAP. Vous pouvez ajouter la mention suivante "Construit avec Amapress, l\'outil pour les AMAP")', 'amapress' ),
admin_url( 'customize.php?autofocus[section]=title_tagline' )
);
$site_icon = get_option( 'site_icon' );
$state['05_config'][] = amapress_get_check_state(
empty( $site_icon ) ? 'warning' : 'success',
__( 'Icône de l\'AMAP', 'amapress' ),
__( 'Ajouter une icône pour personnaliser l\'entête du navigateur et les signets/favoris.', 'amapress' ),
admin_url( 'customize.php?autofocus[section]=title_tagline' )
);
$state['05_config'][] = amapress_get_check_state(
! Amapress::userCanRegister() ? 'success' : ( 'active' != amapress_is_plugin_active( 'new-user-approve' ) ? 'error' : 'warning' ),
__( 'Création de compte sur le site : ', 'amapress' ) . ( Amapress::userCanRegister() ? 'activée' : 'désactivée' ),
__( '<strong>Non recommandé</strong> : Cette option permet aux nouveaux visiteurs de créer un compte utilisateur en direct. Sans cette option, seuls les responsables pourront créer des comptes utilisateurs. ', 'amapress' ),
admin_url( 'options-general.php#users_can_register' )
);
// $blog_desc = get_theme_mod('custom_logo');
// $state['05_config'][] = amapress_get_check_state(
// empty($blog_desc) ? 'warning' : 'success',
// __('Icone de l\'AMAP', 'amapress'),
// __('Ajouter une icone pour l\'AMAP personnalise l\'entête du navigateur et les signets', 'amapress'),
// admin_url('customize.php?autofocus[section]=title_tagline')
// );
$static_front_id = get_option( 'page_on_front' );
$state['05_config'][] = amapress_get_check_state(
empty( $static_front_id ) ? 'error' : 'success',
__( 'Page d\'accueil statique', 'amapress' ),
__( 'Vérifier que votre thème est configuré avec l’option « page d\'accueil statique ».<br/>Sélectionner votre page d’accueil existante, ou configurer une nouvelle page.', 'amapress' ),
admin_url( 'customize.php?autofocus[section]=static_front_page' )
);
$front_page_content = null;
$front_page_logo = null;
if ( ! empty( $static_front_id ) ) {
$page = get_post( $static_front_id );
if ( $page ) {
$front_page_content = $page->post_content;
$front_page_logo = get_post_thumbnail_id( $page->ID );
}
}
$state['05_config'][] = amapress_get_check_state(
empty( $front_page_content ) ? 'warning' : 'success',
__( 'Contenu à la page d\'accueil', 'amapress' ),
__( 'Ajouter le texte de présentation de votre Amap', 'amapress' ),
admin_url( 'post.php?post=' . $static_front_id . '&action=edit' )
);
$static_blog_id = get_option( 'page_for_posts' );
$state['05_config'][] = amapress_get_check_state(
empty( $static_blog_id ) ? 'error' : 'success',
__( 'Page de blog/articles statique', 'amapress' ),
__( 'Vérifier que votre thème est configuré avec l’option « page d\'accueil statique ».<br/>Sélectionner votre page de blog/articles existante, ou configurer une nouvelle page.', 'amapress' ),
admin_url( 'customize.php?autofocus[section]=static_front_page' )
);
$contact_page = Amapress::getContactInfos();
$state['05_config'][] = amapress_get_check_state(
empty( $contact_page ) || strpos( $contact_page, '[[' ) !== false ? 'warning' : 'success',
__( 'Contenu de la page de contact', 'amapress' ),
__( 'Ajouter les informations nécessaires pour contacter l’Amap pour une nouvelle inscription.', 'amapress' )
. '<br/>' . Amapress::makeWikiLink( 'https://wiki.amapress.fr/admin/contact_form' ),
admin_url( 'options-general.php?page=amapress_options_page&tab=amp_public_contacts_config' )
);
$state['05_config'][] = amapress_get_check_state(
empty( $front_page_logo ) ? 'warning' : 'success',
__( 'Logo de la page d\'accueil', 'amapress' ),
__( 'Ajouter votre logo sur la page d\'accueil', 'amapress' ),
admin_url( 'post.php?post=' . $static_front_id . '&action=edit' )
);
$state['05_config'][] = amapress_get_check_state(
'info',
__( 'Configuration de la liste d\'émargement', 'amapress' ),
__( 'Personnaliser les infos affichées (téléphones, mails, instructions...) sur la liste d\'émargement et sa taille d\'impression.', 'amapress' ),
admin_url( 'admin.php?page=amapress_distribs_conf_opt_page&tab=amp_emargement_options_tab' )
);
// $contrat_anon = Amapress::getOption('contrat_info_anonymous');
// $state['05_config'][] = amapress_get_check_state(
// empty($contrat_anon) ? 'warning' : 'success',
// __('Information sur les contrats', 'amapress'),
// empty($contrat_anon) ?
// __('Ajouter le texte d\'information sur les contrats', 'amapress') :
// __('Cliquer sur le lien ci-dessus pour éditer le texte d\'information sur les contrats', 'amapress'),
// admin_url('options-general.php?page=amapress_options_page&tab=contrats')
// );
// $menu_name = 'primary';
// $locations = get_nav_menu_locations();
// $state['05_config'][] = amapress_get_check_state(
// empty($main_menu) || count($main_menu) == 0 ? 'error' : 'success',
// __('Menu principal du site', 'amapress'),
// empty($main_menu) || count($main_menu) == 0 ?
// __('Remplir le menu principal du site', 'amapress') :
// __('Cliquer sur le lien ci-dessus pour éditer le menu', 'amapress'),
// admin_url('customize.php?autofocus[panel]=nav_menus')
// );
$info_page_menu_item_found = false;
$blog_page_menu_item_found = false;
$info_page_id = Amapress::getOption( 'mes-infos-page' );
foreach ( get_nav_menu_locations() as $menu_name => $menu_id ) {
$menus = wp_get_nav_menu_items( $menu_id );
if ( ! empty( $menus ) ) {
foreach ( $menus as $menu_item ) {
if ( $menu_item->object_id == $info_page_id ) {
$info_page_menu_item_found = true;
} else if ( $menu_item->object_id == $static_blog_id ) {
$blog_page_menu_item_found = true;
}
}
}
}
$state['05_config'][] = amapress_get_check_state(
! $blog_page_menu_item_found ? 'warning' : 'success',
__( 'Entrée de menu - Page de blog', 'amapress' ),
__( 'Créer une entrée dans le menu principal vers la page « Blog/Articles » (menu permettant l\'accès aux articles publiés sur le site).', 'amapress' ),
admin_url( 'nav-menus.php' )
);
$state['05_config'][] = amapress_get_check_state(
! $info_page_menu_item_found ? 'error' : 'success',
__( 'Entrée de menu - Mes Infos', 'amapress' ),
__( '<strong>Important</strong> : Créer obligatoirement une entrée dans le menu principal vers la page « Mes Infos » (menu permettant la connexion).', 'amapress' ),
admin_url( 'nav-menus.php' )
);
// $state['05_config'][] = amapress_get_check_state(
// empty($front_page_logo) ? 'warning' : 'success',
// __('Logo de la page d\'accueil', 'amapress'),
// empty($front_page_logo) ?
// __('Ajouter un logo à la page d\'accueil', 'amapress') :
// __('Cliquer sur le lien ci-dessus pour éditer la page d\'accueil et son logo', 'amapress'),
// admin_url('post.php?post=' . $static_front_id . '&action=edit')
// );
$state['05_config'][] = amapress_get_check_state(
'info',
sprintf( __( 'Choix de la géolocalisation (actuellement %s) et de l\'affichage des cartes (actuellement %s)', 'amapress' ), Amapress::getOption( 'geocode_provider' ), Amapress::getOption( 'map_provider' ) ),
__( 'Vous pouvez choisir entre Nominatim/Open Street Map et Google Maps pour la géolocalisation et l\'affichage des cartes', 'amapress' ),
admin_url( 'options-general.php?page=amapress_options_page&tab=amp_google_api_config' )
);
if ( 'google' == Amapress::getOption( 'geocode_provider' ) || 'google' == Amapress::getOption( 'map_provider' ) ) {
$google_key = Amapress::getOption( 'google_map_key' );
$state['05_config'][] = amapress_get_check_state(
! empty( $google_key ) ? 'success' : 'error',
__( 'Clé API Google', 'amapress' ),
__( '<strong>Requis</strong> : Une clé Google API est nécessaire pour le bon fonctionnement de la géolocalisation ', 'amapress' ),
admin_url( 'options-general.php?page=amapress_options_page&tab=amp_google_api_config' )
);
}
if ( 'here' == Amapress::getOption( 'geocode_provider' ) ) {
$here_map_app_id = Amapress::getOption( 'here_map_app_id' );
$google_key = Amapress::getOption( 'here_map_app_code' );
$state['05_config'][] = amapress_get_check_state(
! empty( Amapress::getOption( 'here_map_app_id' ) )
&& ! empty( Amapress::getOption( 'here_map_app_code' ) ) ? 'success' : 'error',
'APP ID/APP CODE Here Maps',
__( '<strong>Requis</strong> : des identifiants APP ID/APP CODE sont nécessaires pour le bon fonctionnement de la géolocalisation ', 'amapress' ),
admin_url( 'options-general.php?page=amapress_options_page&tab=amp_google_api_config' )
);
}
$state['05_config'][] = amapress_get_check_state(
'info',
__( 'Adresse mail du site', 'amapress' ),
__( 'Configurer l\'adresse email du site (par défaut, "wordpress", actuellement "<strong>', 'amapress' ) . esc_html( Amapress::getOption( 'email_from_mail' ) ) . '</strong>") et son nom d\'affichage (par défaut, le nom du site). Pensez à configurer une redirection pour cette adresse dans la configuration de votre hébergement.',
admin_url( 'options-general.php?page=amapress_site_options_page&tab=amp_site_mail_config' )
);
$state['05_config'][] = amapress_get_check_state(
'info',
__( 'Message sur la page de connexion', 'amapress' ),
__( 'Personnaliser le message qui s\'affiche sur la page de connexion, par exemple, pour rappeler la procédure de récupération de son mot de passe.', 'amapress' ),
admin_url( 'options-general.php?page=amapress_site_options_page&tab=amp_connection_config#amapress_below_login_message' )
);
$state['05_config'][] = amapress_get_check_state(
'info',
__( 'Email de bienvenue/demande de récupération mot de passe', 'amapress' ),
__( 'Ajoutez et personnalisez le mail de bienvenue que chaque amapien reçoit à la création de son compte ou lorsqu\'il demande à récupérer son mot de passe', 'amapress' ),
admin_url( 'options-general.php?page=amapress_site_options_page&tab=welcome_mail' )
);
$state['05_config'][] = amapress_get_check_state(
'info',
__( 'Configuration des mailing lists', 'amapress' ),
sprintf( __( '<p>Si vous avez un accès au système de mailing list (Sympa), par ex Ouvaton, Sud Ouest ou autre fournisseur,
configurer le mot de passe du listmaster et le domaine de liste <a href="%s">ici</a>.</p>
<p>Créez vos listes depuis l\'interface de Sympa chez votre fournisseur, puis <a href="%s">configurer les membres et modérateurs pour chaque liste</a></p>', 'amapress' ), admin_url( 'admin.php?page=amapress_mailinglist_options_page' ), admin_url( 'edit.php?post_type=amps_mailing' ) ),
admin_url( 'edit.php?post_type=amps_mailing' )
);
$use_mail_queue = Amapress::getOption( 'mail_queue_use_queue' );
$nb_mails = __( '"pas de limite" (file désactivée)', 'amapress' );
if ( $use_mail_queue ) {
$mail_interval = Amapress::getOption( 'mail_queue_interval' );
if ( empty( $mail_interval ) ) {
$mail_interval = AMAPRESS_MAIL_QUEUE_DEFAULT_INTERVAL;
}
$mail_limite = Amapress::getOption( 'mail_queue_limit' );
if ( empty( $mail_limite ) ) {
$mail_limite = AMAPRESS_MAIL_QUEUE_DEFAULT_LIMIT;
}
$mails_hours = $mail_limite / (float) $mail_interval * 3600;
$nb_mails = sprintf( __( '%d (max %s emails toute les %ss)', 'amapress' ), $mails_hours, $mail_limite, $mail_interval );
}
$state['05_config'][] = amapress_get_check_state(
$use_mail_queue ? 'success' : 'warning',
__( 'Configuration de la file d\'envoi des emails sortants', 'amapress' ),
sprintf( __( '<p>La plupart des hébergeurs ont une limite d\'envoi des emails sortants par heure. Actuellement le site est configuré pour envoyer au maximum %s emails par heure.
<br/>Par défaut, Amapress met les mails dans une file d\'attente avant de les envoyer pour éviter les blocages et rejets de l\'hébergeur.
<br />Un autre bénéfice est le réessaie d\'envoi en cas d\'erreur temporaire et le logs des emails envoyés par le site pour traçage des activités (pour une durée configurable).</p>', 'amapress' ), $nb_mails ),
admin_url( 'options-general.php?page=amapress_mailqueue_options_page&tab=amapress_mailqueue_options' )
);
$state['05_config'][] = amapress_check_plugin_install( 'pwa', __( 'Progressive Web App', 'amapress' ),
__( '<strong>Recommandé</strong> : permet au site d\'être vu comme une application mobile et d\'ajouter un raccourci à l\'écran d\'accueil', 'amapress' ),
'info' );
$pwa_short_name = Amapress::getOption( 'pwa_short_name' );
$state['05_config'][] = amapress_get_check_state(
'active' === amapress_is_plugin_active( 'pwa' ) ? ( ! empty( $pwa_short_name ) ? 'success' : 'warning' ) : 'info',
__( 'Configuration Progressive Web App', 'amapress' ),
__( 'Configurer un nom de raccourci (max 12 caractères), une couleur de thème et un type d\'affichage', 'amapress' ),
admin_url( 'options-general.php?page=amapress_pwa_options_page' )
);
$state['05_config'][] = amapress_check_plugin_install( 'autoptimize', __( 'Autoptimize', 'amapress' ),
__( '<strong>Recommandé</strong> : permet d\'optimiser la vitesse du site', 'amapress' ),
'active' === amapress_is_plugin_active( 'pwa' ) ? 'warning' : 'info' );
$state['05_config'][] = amapress_get_check_state(
'info',
__( 'Configuration Autoptimize', 'amapress' ),
__( 'Configurer l\'optimisation du code Javascript, CSS et HTML', 'amapress' ),
admin_url( 'options-general.php?page=autoptimize' )
);
$state['10_users'] = array();
$users = get_users( array( 'role' => 'responsable_amap' ) );
$state['10_users'][] = amapress_get_check_state(
count( $users ) == 0 ? 'warning' : 'success',
__( 'Compte Responsable AMAP', 'amapress' ),
__( 'Créer les comptes des Responsables de l\'AMAP', 'amapress' ),
admin_url( 'user-new.php?role=responsable_amap' ),
implode( ', ', array_map( function ( $u ) {
$dn = AmapressUser::getBy( $u );
$l = admin_url( 'user-edit.php?user_id=' . $dn->getID() . '&wp_http_referer=%2Fwp-admin%2Fusers.php' );
return "<a href='{$l}' target='_blank'>{$dn->getDisplayName()}</a>";
}, $users ) )
);
$prod_users = get_users( array( 'role' => 'producteur' ) );
$state['10_users'][] = amapress_get_check_state(
count( $prod_users ) == 0 ? 'error' : 'success',
__( 'Compte Producteur', 'amapress' ),
__( 'Créer les comptes des producteurs', 'amapress' ),
admin_url( 'user-new.php?role=producteur' ),
implode( ', ', array_map( function ( $u ) {
$dn = AmapressUser::getBy( $u );
$l = admin_url( 'user-edit.php?user_id=' . $dn->getID() . '&wp_http_referer=%2Fwp-admin%2Fusers.php' );
return "<a href='{$l}' target='_blank'>{$dn->getDisplayName()}</a>";
}, $prod_users ) )
);
$users = get_users( 'amapress_role=referent_producteur' );
$state['10_users'][] = amapress_get_check_state(
count( $users ) == 0 ? 'warning' : 'success',
__( 'Compte Référent Producteur', 'amapress' ),
__( 'Créer les comptes des Référents Producteurs', 'amapress' ),
admin_url( 'user-new.php?role=referent' ),
implode( ', ', array_map( function ( $u ) {
$dn = AmapressUser::getBy( $u );
$l = admin_url( 'user-edit.php?user_id=' . $dn->getID() . '&wp_http_referer=%2Fwp-admin%2Fusers.php' );
return "<a href='{$l}' target='_blank'>{$dn->getDisplayName()}</a>";
}, $users ) )
);
$amap_roles = amapress_get_amap_roles();
$state['10_users'][] = amapress_get_check_state(
count( $amap_roles ) == 0 ? 'warning' : 'success',
__( 'Création de rôle descriptif des membres du collectif', 'amapress' ),
__( 'Créer des étiquettes pour les rôles spécifiques des membres du collectif.', 'amapress' ) .
'<br/>' . Amapress::makeWikiLink( 'https://wiki.amapress.fr/roles#roles_specifiques', __( 'Rôles spécifiques', 'amapress' ) ),
admin_url( 'edit-tags.php?taxonomy=amps_amap_role_category' ),
implode( ', ', array_map( function ( $t ) {
/** @var WP_Term $t */
$l = admin_url( 'users.php?amps_amap_role_category=' . $t->slug );
return "<a href='{$l}' target='_blank'>{$t->name}</a>";
}, $amap_roles ) )
);
$empty_resp_roles = false;
foreach (
[
'resp-distrib-amap-role',
'resp-distrib-gardiens-amap-role',
'resp-visite-amap-role',
'resp-intermittents-amap-role',
'resp-amap_event-amap-role',
Amapress::getOption( 'enable-gardiens-paniers' ) ? 'resp-distrib-gardien-amap-role' : ''
] as $option
) {
if ( ! empty( $option ) && empty( Amapress::getOption( $option ) ) ) {
$empty_resp_roles = true;
}
}
$state['10_users'][] = amapress_get_check_state(
count( $amap_roles ) == 0 || $empty_resp_roles ? 'warning' : 'success',
__( 'Association de rôle descriptif des membres du collectif', 'amapress' ),
__( 'Associer chaque membre du collectif au rôle spécifique qui lui est attribué dans son compte utilisateur', 'amapress' ) .
'<br/>' . Amapress::makeWikiLink( 'https://wiki.amapress.fr/roles#roles_specifiques', __( 'Rôles spécifiques', 'amapress' ) ),
admin_url( 'users.php?page=amapress_collectif&tab=amp_amap_roles_config' )
);
/** @var WP_User[] $users_no_desc */
$users_no_desc = get_users( [
'amapress_role' => 'collectif_no_amap_role',
] );
$members_no_desc = array_map( function ( $user ) {
$amapien = AmapressUser::getBy( $user );
return Amapress::makeLink( $amapien->getEditLink(), $amapien->getDisplayName() . ' (' . $amapien->getEmail() . ')[' . $amapien->getAmapRolesString() . ']', true, true );
}, $users_no_desc );
if ( ! empty( $members_no_desc ) ) {
$only_admins = true;
foreach ( $users_no_desc as $user ) {
if ( ! in_array( 'administrator', $user->roles ) ) {
$only_admins = false;
}
}
$state['10_users'][] = amapress_get_check_state(
$only_admins ? 'success' : 'warning',
__( 'Membres du collectif sans rôle descriptif', 'amapress' ),
sprintf( __( '<a target="_blank" href="%s">Associer</a> des rôles descriptifs aux utilisateurs ayant accès au backoffice. (<em>Les administrateurs n\'ont pas forcement besoin de rôle descriptif</em>)', 'amapress' ), admin_url( 'users.php?page=amapress_collectif&tab=amapress_edit_roles_collectif' ) ),
admin_url( 'users.php?page=amapress_collectif&tab=amapress_edit_roles_collectif' ),
implode( ', ', $members_no_desc )
);
}
$members_no_contrats = array_map( function ( $user ) {
$amapien = AmapressUser::getBy( $user );
return AMapress::makeLink( $amapien->getEditLink(), $amapien->getDisplayName() . ' (' . $amapien->getEmail() . ')', true, true );
}, get_users( [
'amapress_role' => 'collectif_no_prod',
'amapress_contrat' => 'no',
] ) );
if ( ! empty( $members_no_contrats ) ) {
$state['10_users'][] = amapress_get_check_state(
'info',
__( 'Membres du collectif sans contrat', 'amapress' ),
sprintf( __( '<a target="_blank" href="%s">Vérifier</a> les utilisateurs membres du collectif qui n\'ont pas de contrats', 'amapress' ), admin_url( 'users.php?page=amapress_collectif&tab=amapress_edit_roles_collectif' ) ),
admin_url( 'users.php?amapress_contrat=no&amapress_role=collectif_no_prod' ),
implode( ', ', $members_no_contrats )
);
}
$state['15_posts'] = array();
$state['15_posts'][] = amapress_get_check_state(
'info',
__( 'Configuration générale de votre AMAP', 'amapress' ),
'',
admin_url( 'admin.php?page=amapress_gest_contrat_conf_opt_page' ),
__( 'AMAP avec contrat obligatoire/principal', 'amapress' ) . __( ' : ', 'amapress' ) . ( ! Amapress::getOption( 'disable_principal' ) ? __( 'oui', 'amapress' ) : __( 'non', 'amapress' ) ) .
'<br/>' . __( 'Autoriser la co-adhésion partielle', 'amapress' ) . __( ' : ', 'amapress' ) . ( Amapress::getOption( 'allow_partial_coadh' ) ? __( 'oui', 'amapress' ) : __( 'non', 'amapress' ) ) .
'<br/>' . __( 'Rendre le numéro de téléphone mobile obligatoire', 'amapress' ) . __( ' : ', 'amapress' ) . ( Amapress::getOption( 'mob_phone_req' ) ? __( 'oui', 'amapress' ) : __( 'non', 'amapress' ) ) .
'<br/>' . Amapress::makeWikiLink( 'https://wiki.amapress.fr/referent_producteur/co-panier' ) .
'<br/>' . __( 'Maximum par défaut de membre(s) du foyer', 'amapress' ) . __( ' : ', 'amapress' ) . Amapress::getOption( 'def_max_cofoy' ) .
'<br/>' . __( 'Maximum par défaut de co-adhérent(s)', 'amapress' ) . __( ' : ', 'amapress' ) . Amapress::getOption( 'def_max_coadh' ) .
'<br/>' . __( 'Les co-adhérents doivent avoir une adhésion séparée', 'amapress' ) . __( ' : ', 'amapress' ) . ( Amapress::getOption( 'coadh_self_adh' ) ? __( 'oui', 'amapress' ) : __( 'non', 'amapress' ) ) .
'<br/>' . __( 'L\'adhésion doit avoir été validée avant de pouvoir s\'inscrire aux contrats', 'amapress' ) . __( ' : ', 'amapress' ) . ( Amapress::getOption( 'check_adh_rcv' ) ? __( 'oui', 'amapress' ) : __( 'non', 'amapress' ) ) .
'<br/>' . __( 'L\'adhésion ou une adhésion précédente doit avoir été validée avant de pouvoir s\'inscrire aux contrats', 'amapress' ) . __( ' : ', 'amapress' ) . ( Amapress::getOption( 'check_adh_rcv_p' ) ? __( 'oui', 'amapress' ) : __( 'non', 'amapress' ) ) .
'<br/>' . sprintf( __( 'Durée de la période de renouvellement : %d jours', 'amapress' ),
Amapress::getOption( 'renouv_days' ) ) .
'<br/>' . sprintf( __( 'Décalage de la période d\'adhésion : %d semaine(s)', 'amapress' ),
Amapress::getOption( 'adhesion_shift_weeks' ) ) .
'<br/>' . sprintf( __( 'Clôture des inscriptions : %d heure(s) avant le jour de distribution', 'amapress' ),
Amapress::getOption( 'before_close_hours' ) )
);
$lieux = Amapress::get_lieux();
$not_localized_lieux = array_filter( $lieux,
function ( $lieu ) {
/** @var AmapressLieu_distribution $lieu */
return ! $lieu->isAdresseLocalized();
} );
$state['15_posts'][] = amapress_get_check_state(
count( $lieux ) == 0 ? 'error' : ( ! empty( $not_localized_lieux ) ? 'warning' : 'success' ),
__( 'Lieu de distribution', 'amapress' ),
__( 'Créer au moins un lieu de distribution', 'amapress' ),
admin_url( 'edit.php?post_type=' . AmapressLieu_distribution::INTERNAL_POST_TYPE ),
implode( ', ', array_map( function ( $dn ) {
/** @var AmapressLieu_distribution $dn */
$l = admin_url( 'post.php?post=' . $dn->getID() . '&action=edit' );
return "<a href='{$l}' target='_blank'>{$dn->getTitle()}</a>";
}, $lieux ) ) .
( ! empty( $not_localized_lieux ) ? '<br /><strong>' . __( 'Lieux non localisés :', 'amapress' ) . '</strong> ' . implode( ', ', array_map( function ( $dn ) {
/** @var AmapressLieu_distribution $dn */
$l = admin_url( 'post.php?post=' . $dn->getID() . '&action=edit' );
return "<a href='{$l}' target='_blank'>{$dn->getTitle()}</a>";
}, $not_localized_lieux )
) : '' )
);
$subscribable_contrat_instances = AmapressContrats::get_subscribable_contrat_instances();
$online_contrats = array_filter( $subscribable_contrat_instances, function ( $c ) {
/** @var AmapressContrat_instance $c */
return $c->canSelfSubscribe();
} );
$not_online_contrats = array_filter( AmapressContrats::get_active_contrat_instances(), function ( $c ) {
/** @var AmapressContrat_instance $c */
return ! $c->canSelfSubscribe();
} );
$first_online_date = 0;
foreach ( $online_contrats as $online_contrat ) {
if ( $online_contrat->getDate_debut() > $first_online_date ) {
$first_online_date = $online_contrat->getDate_debut();
break;
}
}
if ( empty( $first_online_date ) ) {
$first_online_date = amapress_time();
}
$adh_period = AmapressAdhesionPeriod::getCurrent();
$state['15_posts'][] = amapress_get_check_state(
empty( $adh_period ) ? 'error' : 'success',
__( 'Période d\'adhésion', 'amapress' ),
__( 'Créer une période d\'adhésion pour les cotisations de l\'année en cours', 'amapress' ),
admin_url( 'edit.php?post_type=' . AmapressAdhesionPeriod::INTERNAL_POST_TYPE ),
( ! empty( $adh_period ) ? '<a href="' . esc_attr( $adh_period->getAdminEditLink() ) . '" target=\'_blank\'>' . esc_html( $adh_period->getTitle() ) . '</a>' : __( 'Aucune période d\'adhésion', 'amapress' ) )
);
$adh_period2 = AmapressAdhesionPeriod::getCurrent( $first_online_date );
if ( ! $adh_period || ! $adh_period2 || $adh_period2->ID != $adh_period->ID ) {
$state['15_posts'][] = amapress_get_check_state(
empty( $adh_period2 ) ? 'error' : 'success',
__( 'Période d\'adhésion', 'amapress' ),
__( 'Créer une période d\'adhésion pour les cotisations du début des contrats en ligne', 'amapress' ),
admin_url( 'edit.php?post_type=' . AmapressAdhesionPeriod::INTERNAL_POST_TYPE ),
( ! empty( $adh_period2 ) ? '<a href="' . esc_attr( $adh_period2->getAdminEditLink() ) . '" target=\'_blank\'>' . esc_html( $adh_period2->getTitle() ) . '</a>' : __( 'Aucune période d\'adhésion', 'amapress' ) )
);
}
$adhesion_categs = get_categories( array(
'orderby' => 'name',
'order' => 'ASC',
'taxonomy' => 'amps_paiement_category',
'hide_empty' => false,
) );
$state['15_posts'][] = amapress_get_check_state(
count( $adhesion_categs ) == 0 ? 'warning' : 'success',
__( 'Types de paiement des cotisations', 'amapress' ),
sprintf( __( 'Créer des <a href="%s" target=\'_blank\'>types de paiement pour le bulletin d\'adhésion à l\'AMAP</a> (par ex "Don à l\'AMAP", "Panier solidaire").', 'amapress' ), admin_url( 'edit-tags.php?taxonomy=amps_paiement_category' ) ),
admin_url( 'edit-tags.php?taxonomy=amps_amap_role_category' ),
implode( ', ', array_map( function ( $t ) {
/** @var WP_Term $t */
$l = admin_url( 'term.php?taxonomy=amps_paiement_category&tag_ID=' . $t->term_id );
return "<a href='{$l}' target='_blank'>{$t->name}</a>";
}, $adhesion_categs ) )
);
$all_producteurs = get_posts( array(
'post_type' => AmapressProducteur::INTERNAL_POST_TYPE,
'post_status' => [ 'publish', 'archived' ],
'posts_per_page' => - 1,
'meta_query' => array(
array(
'key' => 'amapress_producteur_user',
'value' => amapress_prepare_in( array_map( 'Amapress::to_id', $prod_users ) ),
'compare' => 'IN',
'type' => 'NUMERIC',
)
)
) );
$producteurs = get_posts( array(
'post_type' => AmapressProducteur::INTERNAL_POST_TYPE,
'post_status' => 'publish',
'posts_per_page' => - 1,
'meta_query' => array(
array(
'key' => 'amapress_producteur_user',
'value' => amapress_prepare_in( array_map( 'Amapress::to_id', $prod_users ) ),
'compare' => 'IN',
'type' => 'NUMERIC',
)
)
) );
//TODO better check prod vs user
$state['15_posts'][] = amapress_get_check_state(
count( $prod_users ) == 0 ? 'error' : ( count( $all_producteurs ) < count( $prod_users ) ? 'warning' : 'success' ),
__( 'Producteurs', 'amapress' ),
__( 'Créer les Producteur correspondant à leur compte utilisateur', 'amapress' ),
admin_url( 'edit.php?post_type=' . AmapressProducteur::INTERNAL_POST_TYPE ),
implode( ', ', array_map( function ( $u ) {