-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathinstall.php
More file actions
1002 lines (972 loc) · 42.2 KB
/
Copy pathinstall.php
File metadata and controls
1002 lines (972 loc) · 42.2 KB
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
/*
* 12/12/2005 - 22:40:00 - Scout Web Portail - v 1.1.1
*
* install.php v 1.1.1 - Script d'installation du portail
* Copyright (C) 2005 ChMat
* http://www.scoutwebportail.org
*
* This file is part of Scout Web Portail.
*
* Scout Web Portail is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Scout Web Portail is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Scout Web Portail; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
/*
* Modifications v 1.1
* Ajout de la redirection vers le fichier d'update
* Prise en charge du nouveau modèle de mot de passe
* Mise en place du numéro de version du portail
* Script d'évaluation du serveur
* Premier jet de détection de l'url-rewriting : fonction foireuse pour l'instant => à revoir
* Gestion plus poussée des erreurs
* Possibilité de supprimer les tables conflictuelles à l'installation (installation sur une ancienne)
*/
/*
* Modification v 1.1.1
* build 091109 : correction d'un bug de compatibilité avec nouveaux paramètres PHP 5
*/
// On précise la version du portail que le script s'apprête à installer
$version_portail = '1.1.1';
// On précise les versions du portail depuis lesquelles le script peut effectuer des mises à jour
$can_update_from = array('1.0.x');
// on désactive l'affichage des notice pour les variables non initialisées
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// on ne charge pas fonc.php (qui charge tous les fichiers de fonctions)
// car fonc.php fait des requêtes dans la db. Or avant l'installation, la db est vide.
require_once('prv/fonc_str.php');
function return_bytes($val)
{ // renvoie la taille en octets à partir d'une taille au format 8M
// Merci http://be2.php.net/manual/fr/function.ini-get.php
$val = trim($val);
$last = strtolower($val{strlen($val)-1});
switch($last)
{ // Le modifieur 'G' est disponible depuis PHP 5.1.0
case 'g':
$val *= 1024;
case 'm':
$val *= 1024;
case 'k':
$val *= 1024;
}
return $val;
}
function taille_fichier($fichier)
{ // renvoie la taille d'un fichier exprimée en octets, kilo-octets, méga-octets ou giga-octets.
// $fichier peut être le chemin vers un fichier ou son poids en octets
if (!ereg ("^[0-9\.]+$", $fichier)) {$taille = @filesize($fichier) or $taille = 0;} else {$taille = $fichier;}
if ($taille >= 1073741824) {$taille = round($taille / 1073741824 * 100) / 100 . ' Go';}
elseif ($taille >= 1048576) {$taille = round($taille / 1048576 * 100) / 100 . ' Mo';}
elseif ($taille >= 1024) {$taille = round($taille / 1024 * 100) / 100 . ' Ko';}
else {$taille = $taille.' octets';}
if($taille == 0) {$taille = '0 octet';}
$taille = str_replace('.', ',', $taille); // on remplace le . des décimales par une virgule française :)
return $taille;
}
$upload_max_filesize = @return_bytes(@ini_get('upload_max_filesize'));
$upload_max_filesize = taille_fichier($upload_max_filesize);
function cleunique($taille = 20)
{ // retourne une clé aléatoire de $taille caractères
$cle = '';
// avec la taille 'mini', on ne met pas les lettres o, i et l.
// Elles sont parfois difficiles à différencier selon les polices de caractères
$lettres = ($taille != 'mini') ? 'oil' : '';
$lettres .= 'abcdefghjkmnpqrstuvwxyz0123456789';
$taille = ($taille == 'mini') ? 5 : $taille;
srand(time());
for ($i=0; $i < $taille; $i++)
{
$cle .= substr($lettres,(rand()%(strlen($lettres))), 1);
}
return $cle;
}
// La détection de l'url-rewriting est problématique et ne réagi
function detect_urlrewriting()
{ // Détecte si l'url-rewriting est activé sur le serveur et renvoie true ou false
return false;
// on met phpinfo() en mémoire tampon et on recherche la chaîne mod_rewrite.
// si elle est présente, le module d'url-rewriting est probablement chargé.
/*if (@ob_start())
{
phpinfo();
if ($string = @ob_get_contents())
{
ob_end_clean();
ob_end_flush();
return preg_match('/mod_rewrite/', $string);
}
}
else
{
return false;
}*/
}
function mysql_table_exists($table)
{ // Fonction proposée par Tim sur http://php.belnet.be/manual/fr/function.mysql-list-tables.php
$exists = mysql_query("SELECT 1 FROM $table LIMIT 0");
if ($exists) return true;
return false;
}
foreach($_GET as $cle => $valeur)
{ // $_GET['x'] devient $x
$$cle = $valeur;
}
foreach($_POST as $cle => $valeur)
{ // $_POST['x'] devient $x
$$cle = $valeur;
}
if ($step == 2)
{ // le webmaster a rempli le formulaire, on traite ses entrées
if (!empty($_POST['adresse_site']) and !empty($_POST['db_url']) and !empty($_POST['db_user']) and !empty($_POST['db_pw']) and !empty($_POST['db_pw_confirm']) and !empty($_POST['db_name']) and !empty($_POST['db_prefix']) and !empty($_POST['admin_pseudo']) and !empty($_POST['admin_pw']) and !empty($_POST['admin_pw_confirm']) and !empty($_POST['admin_prenom']) and !empty($_POST['admin_nom']) and !empty($_POST['admin_email']))
{ // Tous les champs sont remplis, on les analyse
$erreur = 0;
if ($admin_pw != $admin_pw_confirm or strlen($admin_pw) < 6)
{ // mot de passe du webmaster incorrect
$admin_pw = $admin_pw_confirm = '';
$erreur = 5;
}
if (!checkmail($admin_email))
{ // l'email du webmaster n'est pas une vraie adresse email
$admin_email = '';
$erreur = 5;
}
if (checkforbiddenchar($admin_pseudo))
{ // le pseudo du webmaster contient des caractères interdits
$admin_pseudo = '';
$erreur = 5;
}
$admin_pseudo = htmlentities($admin_pseudo, ENT_QUOTES);
$admin_prenom = htmlentities($admin_prenom, ENT_QUOTES);
$admin_nom = htmlentities($admin_nom, ENT_QUOTES);
$site_ville = htmlentities($site_ville, ENT_QUOTES);
$site_code_postal = htmlentities($site_code_postal, ENT_QUOTES);
if ($db_pw == $db_pw_confirm and $erreur == 0)
{ // pas d'erreur jusqu'à présent, on continue la vérification des données
if ($link = @mysql_connect($db_url, $db_user, $db_pw))
{ // lancement du lien vers le serveur MySQL
// Sélection de la DB
$db_ok = @mysql_select_db($db_name, $link);
if ($db_ok)
{ // On peut passer à la création des tables
$fichier_creation_tables = 'install/creation_tables.sql';
$fichier_fill_tables = 'install/fill_tables.sql';
$delimiter = ';';
$delimiter_basic = ';';
// On charge le parser SQL
require('install/sql_parse.php');
// On charge le fichier de fonctions sur les dates
require_once('prv/fonc_date.php');
// On crée les tables de base du portail
// et on les remplit avec quelques données de base
$sql_query = @fread(@fopen($fichier_creation_tables, 'r'), @filesize($fichier_creation_tables));
$sql_query = preg_replace('/scoutwebportail_/', $db_prefix, $sql_query);
$sql_query = remove_remarks($sql_query);
$sql_query = split_sql_file($sql_query, $delimiter);
for ($i = 0; $i < sizeof($sql_query); $i++)
{ // on exécute chacune des requêtes sql
if (trim($sql_query[$i]) != '')
{
if (ereg("$CREATE TABLE `?([-a-zA-Z0-9_]*)`?", $sql_query[$i], $data))
{ // si la requête crée une table, on vérifie qu'elle n'existe pas
if (mysql_table_exists($data[1]))
{ // la table existe, on la supprime pour pouvoir la créer à nouveau
if ($_POST['on_conflit'] == 'drop')
{
$sql = "DROP TABLE $data[1]";
@mysql_db_query($db_name, $sql);
}
else
{
header('Location: install.php?step=1&erreur=9&table='.$data[1]);
exit;
}
}
}
if (!$result = @mysql_db_query($db_name, $sql_query[$i]))
{ // erreur lors de la création des tables dans la db
header('Location: install.php?step=1&erreur=6&requete='.$i);
exit;
}
}
}
// Les tables ont été créées avec succès, on les remplit avec les données de base
$sql_query = @fread(@fopen($fichier_fill_tables, 'r'), @filesize($fichier_fill_tables));
$sql_query = preg_replace('/scoutwebportail_/', $db_prefix, $sql_query);
$sql_query = preg_replace('/INSTALL_DATE/', datedujour('j mois aaaa'), $sql_query);
$sql_query = preg_replace('/PSEUDO_ADMIN/', $admin_pseudo, $sql_query);
$sql_query = preg_replace('/EMAIL_ADMIN/', $admin_email, $sql_query);
$sql_query = preg_replace('/SITE_ADRESSE/', $adresse_site, $sql_query);
$sql_query = preg_replace('/SITE_VILLE/', $site_ville, $sql_query);
$sql_query = preg_replace('/SITE_CODE_POSTAL/', $site_code_postal, $sql_query);
// fonction mail() active ?
$mail_actif = ($mail_actif == 1) ? '1' : '0';
$sql_query = preg_replace('/OPTION_ENVOI_MAIL/', $mail_actif, $sql_query);
// url_rewriting activé ?
$url_rewriting_actif = ($_POST['u_rew_actif'] == 1) ? '1' : '0';
$sql_query = preg_replace('/OPTION_URL_REWRITING/', $url_rewriting_actif, $sql_query);
$sql_query = preg_replace('/INSTALL_SQL_DATETIME/', mysql_time_date(), $sql_query);
$sql_query = preg_replace('/INSTALL_SQL_DATE/', mysql_date(), $sql_query);
$sql_query = remove_remarks($sql_query);
$sql_query = split_sql_file($sql_query, $delimiter_basic);
for($i = 0; $i < sizeof($sql_query); $i++)
{
if (trim($sql_query[$i]) != '')
{
if (!($result = @mysql_db_query($db_name, $sql_query[$i])))
{ // erreur dans l'enregistrement des données dans la db
header('Location: install.php?step=1&erreur=7&requete='.$i);
exit;
}
}
}
// Les tables sont remplies avec les données de base
// voici les champs de la table auteurs au 20/05/2005 :
/*
num, pw, pseudo, prenom, nom, totem_scout, quali_scout, totem_jungle, email, niveau, nivdemande,
assistantwebmaster, numsection, dateinscr, banni, clevalidation, autorise, ipinscription, nbconnex, affaide, pagesvues,
lastconnex, siteweb, profilmembre, avatar, loisirs, majprofildone, majprofildate, newpw, conditions_acceptees
*/
// on définit la dose de sel à ajouter dans les mots de passe
// L'objectif est ici de créer un hash du pw spécifique au portail afin de réduire le risque d'être victime d'un reverse engineering
// en brute force sur les hash créés par la fonction md5.
$dose_de_sel = cleunique(200);
// Création du compte administrateur
$sql = "INSERT INTO ".$db_prefix."auteurs VALUES (1, '".md5($dose_de_sel.$admin_pw)."', '".$admin_pseudo."', '".$admin_prenom."', '".$admin_nom."', '', '', '', '".$admin_email."', 2, 0, 0, 0, CURRENT_TIMESTAMP(), '0', '', '".$admin_pseudo."', '".$_SERVER['REMOTE_ADDR']."', 0, '1', 1, '0000-00-00 00:00:00', '', '', '', '', 0, '0000-00-00', '0', '0')";
if (!@mysql_db_query($db_name, $sql))
{ // erreur dans la requête
header('Location: install.php?step=1&erreur=8');
exit;
}
// Il reste à remplacer le fichier connex.php
$fconnex = fopen('connex.php', 'w');
fwrite($fconnex, chr(60)."?php\n");
fwrite($fconnex, "// Fichier généré automatiquement à l'installation du Scout Web Portail ".$version_portail."\n");
fwrite($fconnex, "// lancement du lien vers le serveur MySQL\n");
fwrite($fconnex, "\$link = mysql_connect('".$db_url."', '".$db_user."', '".$db_pw."') or die('Impossible de se connecter à la base de données');\n");
fwrite($fconnex, "// Sélection de la DB\n");
fwrite($fconnex, "\$db = '".$db_name."';\n");
fwrite($fconnex, "// Définition du préfixe des noms de tables\n");
fwrite($fconnex, "define('PREFIXE_TABLES', '".$db_prefix."');\n");
// UN_PEU_DE_SEL est utilisé pour compliquer artificiellement la complexité du mot de passe utilisateur en cas de kidnapping de la db
fwrite($fconnex, "define('UN_PEU_DE_SEL', '".$dose_de_sel."');\n");
fwrite($fconnex, "define('INSTALL_DONE', true);\n");
// COOKIE_ID est le nom du cookie qui contient l'identifiant utilisateur pour cette installation du portail
// Chaque installation a un cookie id différent, permettant ainsi à plusieurs portails de cohabiter
// sur un même domaine.
fwrite($fconnex, "define('COOKIE_ID', 'id_swp_".cleunique(2)."');\n");
fwrite($fconnex, "?".chr(62)."\n");
fclose($fconnex);
@chmod('connex.php', 0644);
if ($_POST['u_rew_actif'] == 1)
{ // l'url-rewriting est activé
// Adaptation du fichier .htaccess pour l'url-rewriting
$furl_rewriter = fopen('prv/htaccess', 'r'); // on lit le fichier modèle
$url_rewriter = fread($furl_rewriter, @filesize('prv/htaccess'));
fclose($furl_rewriter);
$dossier_site = dirname($_SERVER['SCRIPT_NAME']); // on récupère le dossier du portail
$dossier_site .= (ereg("/$", $dossier_site)) ? '' : '/';
$url_rewriter = preg_replace('!/scoutwebportail/!', $dossier_site, $url_rewriter); // en met à jour les chemins
@unlink('.htaccess'); // on supprime le .htaccess actuel
$furl_rewriter = fopen('.htaccess', 'w'); // et on crée la nouvelle version
@fwrite($furl_rewriter, $url_rewriter);
@fclose($furl_rewriter);
// pour terminer on initialise le menu général du portail avec l'url-rewriting activé
$sql = "UPDATE ".$db_prefix."config SET valeur = '<ul id=\"menu_general\">
<li><a href=\"staff.htm\">Les Staffs</a></li>
<li><a href=\"galerie.htm\">Albums photos</a></li>
<li><a href=\"news.htm\">Actu de l'Unité</a></li>
<li><a href=\"pagesectionmaj.htm\">Pages récentes</a></li>
<li><a href=\"fichiers.htm\">Téléchargements</a></li>
<li><a href=\"annif.htm\">Les anniversaires</a></li>
<li><a href=\"listembsite.htm\">Liste des membres</a></li>
<li><a href=\"livreor.htm\">Livre d'or</a></li>
<li><a href=\"index.php?page=aide\">Aide</a></li>
</ul>' WHERE champ = 'menu_standard'";
@mysql_db_query($db_name, $sql);
}
else
{ // l'url-rewriting n'est pas activé, on crée le menu général sachant cela
$sql = "UPDATE ".$db_prefix."config SET valeur = '<ul id=\"menu_general\">
<li><a href=\"index.php?page=staff\">Les Staffs</a></li>
<li><a href=\"index.php?page=galerie\">Albums photos</a></li>
<li><a href=\"index.php?page=news\">Actu de l'Unité</a></li>
<li><a href=\"index.php?page=pagesectionmaj\">Pages récentes</a></li>
<li><a href=\"index.php?page=fichiers\">Téléchargements</a></li>
<li><a href=\"index.php?page=annif\">Les anniversaires</a></li>
<li><a href=\"index.php?page=listembsite\">Liste des membres</a></li>
<li><a href=\"index.php?page=livreor\">Livre d'or</a></li>
<li><a href=\"index.php?page=aide\">Aide</a></li>
</ul>' WHERE champ = 'menu_standard'";
@mysql_db_query($db_name, $sql);
}
// rediriger le webmaster vers la page succès de l'installation
// lui signaler qu'il doit supprimer le dossier install, install.php et update_portail.php
header('Location: install.php?step=done&u='.$_POST['u_rew_actif']);
}
else
{ // impossible de sélectionner cette db
$db_exname = $db_name;
$db_name = '';
$erreur = 4;
}
}
else
{ // impossible de se connecter au serveur mysql avec les infos fournies
$erreur = 3;
}
}
else if ($erreur == 0)
{ // le pw d'accès à la db est incorrect
$db_pw = $db_pw_confirm = '';
$erreur = 2;
}
}
else
{ // un des champs n'a pas été rempli
$erreur = 1;
}
?>
<?php
}
?>
<?php echo '<?xml version="1.0" encoding="iso-8859-1"?'.'>'; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Installation du Scout Web Portail v <?php echo $version_portail; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript" language="JavaScript" src="fonc.js"></script>
<style type="text/css">
/* Styles utilisés durant l'installation du portail */
body, #index {
font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; color: #000;}
#index {
margin:0px;}
#top_page {
background: #FFF url('install/banniere.png') no-repeat; width:100%; height:60px; padding:0px;
border-bottom:1px #930 solid; text-indent:300px;}
#corps {
margin-left:5px;}
a {
color: #339;}
a:hover {
color: #930;}
h1 {
font-family: Helvetica, Verdana, Arial, sans-serif; font-size: 18px; font-weight:normal;
color: #C05A27; text-indent: 30px;
line-height: 35px; border-bottom: 1px #930 solid;}
h2, .titre2 {
font-size: 14px; color: #C05A27; font-weight: bold; background-color: #FFF8DC; border-bottom: 1px #D19275 solid;}
h3 {
font-size: 13px; color: #339; font-weight:bold;}
input, select, td, textarea {
font-size: 11px; color: #666; font-family: Verdana, Arial, Helvetica, sans-serif;}
.cadrenoir {
border: 1px #930 solid;}
.case_install {
width:200px;}
.petit, .petitbleu {
font-size: 10px; font-family: Verdana, Arial, Helvetica, sans-serif;}
.petitbleu {
color: #69C;}
.erreur, .message_info {
margin:auto; width:80%; border:1px #DADADA solid; padding:1em; margin-bottom:1em;}
.rmq, .rmqbleu {
font-weight: bold; color: #C30;}
.rmqbleu {
color: #339;}
.td-1 {
background-color: #F3F3F3; color: #666; text-decoration: none;}
.td-2 {
background-color: #FFF; color: #666; text-decoration: none;}
</style>
</head>
<body id="index">
<div id="top_page"></div>
<div id="corps">
<h1>Installation du Scout Web Portail v <?php echo $version_portail; ?></h1>
<?php
if ($step != 'done')
{ // l'installation n'est pas terminée
?>
<p>Merci d'avoir choisi notre portail ! Nous espérons qu'il te plaira
et que ton groupe scout en bénéficiera.</p>
<p>Avant d'installer le portail, nous te conseillons fortement de lire le fichier
<a href="lisez-moi.html" target="_blank">lisez-moi.html</a>.</p>
<p>Le script du portail est sous <a href="http://www.gnu.org/licenses/licenses.html#GPL" target="_blank">licence
GNU GPL</a>, tu peux donc y apporter les modifications qui te semblent utiles
et l'adapter selon les besoins de ton groupe scout.</p>
<p>L'installation du portail est en grande partie automatisée afin de
réduire les opérations complexes dans la base de données.</p>
<h2 id="requirements">Rappel de la configuration nécessaire</h2>
<p>Cette version du portail nécessite une <strong>base de données
de type MySQL</strong> et un hébergement supportant le <strong>PHP</strong>
(version 4.3 ou supérieure recommandée). Idéalement,
il est conseillé de disposer également des fonctionnalités
suivantes : <em>upload de fichiers, url-rewriting, fonction mail(), bibliothèque
gd (redimensionnement des images) </em>. </p>
<p class="rmqbleu">Regarde ci-dessous l'évaluation
réalisée automatiquement :
<script type="text/javascript">
<!--
function evaluation()
{
if (getElement('txt_instr').style.display == 'none')
{
getElement('txt_instr').style.display = 'block';
getElement('bouton_eval').value = 'Masquer l\'évaluation';
}
else
{
getElement('txt_instr').style.display = 'none';
getElement('bouton_eval').value = 'Afficher l\'évaluation';
}
}
//-->
</script>
<input type="button" id="bouton_eval" onclick="evaluation()" value="Afficher l'évaluation" />
</p>
<div id="txt_instr" style="display:none;">
<?php
/*
On propose ici une évaluation des fonctionnalités actives ou non sur le serveur où sera installé SWP
Cette évaluation peut encore évoluer afin de déterminer avec plus de précision les différentes options
que l'on peut activer sur le portail
*/
?>
<table width="90%" border="0" align="center" cellpadding="2" cellspacing="0" class="cadrenoir">
<tr class="td-1">
<td width="30%" align="right">PHP actif :</td>
<td><?php if (1 > 0) { echo '<span class="rmqbleu">OK</span>'; echo ' - PHP version '.PHP_VERSION; } else { ?><span class="rmq">Inactif</span> - <strong>SWP ne fonctionne pas sans PHP</strong><?php } ?></td>
</tr>
<tr class="td-2">
<td width="30%" align="right">MySQL chargé :</td>
<td><?php
if (@extension_loaded('mysql'))
{
?><span class="rmqbleu">OK</span><?php
}
else
{
?><span class="rmq">Inactif</span> - <strong>SWP ne fonctionne pas sans MySQL</strong><?php
}
?></td>
</tr>
</table>
<h3>Fonctionnalités utiles</h3>
<p>Les fonctions ci-dessous apportent un plus au portail et étendent ses options.
Si l'une d'entre elles est désactivée, le portail peut fonctionner mais certains
outils ne seront pas disponibles. Les outils non disponibles sont mentionnés
en regard des fonctions inactives. </p>
<table width="90%" border="0" align="center" cellpadding="2" cellspacing="0" class="cadrenoir">
<tr class="td-1">
<td width="30%" align="right">Upload de fichiers :</td>
<td><?php
if (function_exists('ini_get') and @ini_get('file_uploads'))
{
?>
<span class="rmqbleu">Actif</span>
<?php
}
else if (function_exists('ini_get'))
{
?>
<span class="rmq">Inactif</span> - Outils non disponibles : <em>page de téléchargements, création d'albums photos par upload, upload des avatars, upload de photos des membres de l'unité.</em>
<?php
}
else
{
?>
<span class="rmq">Le serveur ne permet pas de vérifier si cette fonction est active ou non</span>
<?php
}
?><?php echo ($upload_max_filesize) ? ' (Max : '.$upload_max_filesize.')' : ''; ?></td>
</tr>
<tr>
<td align="right">Url-rewriting : </td>
<td><?php
if (detect_urlrewriting())
{
?><span class="rmqbleu">Actif</span> - l'url-rewriting semble actif<?php
}
else
{
?>Etat inconnu (Le portail n'est pas encore en mesure de détecter l'url-rewriting)<?php
}
?></td>
</tr>
<tr class="td-1">
<td width="30%" align="right">Envoi de mails :</td>
<td><?php
if (@function_exists('mail'))
{
?><span class="rmqbleu">Actif</span><?php
}
else
{
?><span class="rmq">Inactif</span> - Outils non disponibles : <em>newsletter, vérification de l'email à l'inscription.</em><?php
}
?></td>
</tr>
<tr>
<td width="30%" align="right">Redimensionnement des photos :</td>
<td><?php
if (@extension_loaded('gd'))
{
?><span class="rmqbleu">OK</span><?php
}
else
{
?><span class="rmq">Inactif</span> - Outils non disponibles : <em>création d'albums photos par upload, upload de photos de membres de l'unité.</em><?php
}
?></td>
</tr>
</table>
</div>
<?php
}
/*
Test préalable à l'installation. Le portail doit pouvoir écrire dans le dossier d'installation
même si d'autres dossiers doivent être accessibles, seul le dossier principal est nécessaire
pour pouvoir installer le portail. Les autres dossiers peuvent être chmodés plus tard.
Des messages d'erreur sont prévus dans les scripts où ces dossiers sont utilisés.
*/
if (!$ftest = @fopen('swp_test_file.txt', 'w') or !$ftest2 = @fopen('img/swp_test_file.txt', 'w') or !$ftest3 = @fopen('config.php', 'w'))
{
?>
<h2>Etape préalable à l'installation</h2>
<div class="msg">
<p><span class="rmq">Pour permettre l'installation du portail, applique un chmod
sur les dossiers suivants afin d'autoriser le portail à y écrire
: </span></p>
<ul>
<li><strong>dossier principal du portail</strong> (au minimum)</li>
<li>fichier <strong>config.php</strong> </li>
<li>dossier <strong>cache/</strong></li>
<li>dossier <strong>img/</strong></li>
<li>dossier <strong>img/activites/</strong></li>
<li>dossier <strong>img/photosmembres/</strong></li>
<li>dossier <strong>img/photosmembres/avatars/</strong></li>
<li>dossier <strong>fichiers/</strong></li>
</ul>
<p>Pour cela, utilise ton logiciel FTP.</p>
<p>Une fois que tu as terminé, poursuis l'installation en cliquant ci-dessous.</p>
<form name="form1" id="form1" method="post" action="install.php">
<div align="center">
<input type="submit" name="Submit" value="Poursuivre l'installation" />
</div>
</form>
</div>
<?php
}
else
{ // le test est concluant, on supprime le fichier test qui vient d'être créé
@fclose($ftest);
@fclose($ftest2);
@fclose($ftest3); // config.php sera utilisé pour mettre la config en cache
@unlink('swp_test_file.txt');
@unlink('img/swp_test_file.txt');
$step = ($step == 'done') ? 'done' : 1; // on permet l'affichage du formulaire d'installation
}
if ($step == 1 and !file_exists('connex.php'))
{
?>
<h2>Passons à l'installation proprement dite</h2>
<?php
if (!empty($erreur))
{
?>
<div class="erreur">
<?php
// Affichage du message d'erreur éventuel
if ($erreur == 1)
{
?>
<p align="center" class="rmq">Tous les champs doivent être remplis !</p>
<?php
}
else if ($erreur == 2)
{
?>
<p align="center" class="rmq">Le mot de passe MySQL est incorrect !</p>
<?php
}
else if ($erreur == 3)
{
?>
<p align="center" class="rmq">Une erreur s'est produite lors de la connexion
au serveur MySQL !</p>
<?php
}
else if ($erreur == 4)
{
?>
<p align="center" class="rmq">La base de données "<?php echo $db_exname; ?>"
ne semble pas exister...</p>
<?php
}
else if ($erreur == 5)
{
?>
<p align="center" class="rmq">Merci d'encoder des données correctes</p>
<?php
}
else if ($erreur == 6)
{
// $requete affiche l'indice correspondant à la position de la requête dans le fichier d'installation
?>
<p align="center" class="rmq">Le script d'installation a rencontré une
erreur lors de la crétion des tables dans la base de données.</p>
<p align="center" class="petit">Merci de signaler une erreur dans la requête
A<?php echo $requete; ?> sur <a href="http://www.scoutwebportail.org/">www.scoutwebportail.org</a>.</p>
<p align="center" class="petit">Si tu corriges l'erreur, supprime les tables
déjà créées avant de relancer l'installation.</p>
<p align="center" class="rmq">Echec de l'installation !</p>
<?php
}
else if ($erreur == 7)
{
// $requete affiche l'indice correspondant à la position de la requête dans le fichier d'installation
?>
<p align="center" class="rmq">Le script d'installation a rencontré une
erreur lors de l'enregistrement des données dans la base de données.</p>
<p align="center" class="petit">Merci de signaler une erreur dans la requête
B<?php echo $requete; ?> sur <a href="http://www.scoutwebportail.org/">www.scoutwebportail.org</a>.</p>
<p align="center" class="petit">Si tu corriges l'erreur, supprime les tables
déjà créées avant de relancer l'installation.</p>
<p align="center" class="rmq">Echec de l'installation !</p>
<?php
}
else if ($erreur == 8)
{
?>
<p align="center" class="rmq">Impossible de créer le compte du webmaster</p>
<p align="center" class="rmq">Echec de l'installation !</p>
<?php
}
else if ($erreur == 9)
{
?>
<p align="center" class="rmq">La base de données contient déjà une table nommée
'<?php echo $table; ?>'. </p>
<p align="center" class="rmq">Echec de l'installation !</p>
<?php
}
?>
</div>
<?php
} // fin messages d'erreur
// Formulaire de création
// On tente de deviner le nom de l'utilisateur MySQL en prenant le nom de l'utilisateur php
// Il est affiché par défaut comme utilisateur MySQL et comme nom de base de données.
$db_user_devine = (function_exists(get_current_user)) ? get_current_user() : '';
// On tente de deviner l'URL du site
$adresse_site_devinee = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['SCRIPT_NAME']);
$adresse_site_devinee .= (ereg("/$", $adresse_site_devinee)) ? '' : '/';
?>
<script type="text/javascript">
<!--
function check_pw(lequel)
{
if (getElement(lequel+'_pw').value != '' && getElement(lequel+'_pw_confirm').value != '')
{
if (getElement(lequel+'_pw').value != getElement(lequel+'_pw_confirm').value)
{
alert("Le mot de passe est incorrect !");
getElement(lequel+'_pw').value = '';
getElement(lequel+'_pw_confirm').value = '';
getElement(lequel+'_pw').focus();
}
}
}
//-->
</script>
<form name="install_form" id="install_form" method="post" action="install.php">
<h3>
<input name="step" type="hidden" id="step" value="2" />
Configuration du serveur</h3>
<table width="90%" border="0" align="center" cellpadding="2" cellspacing="0" class="cadrenoir">
<tr class="td-1">
<td width="250" align="right">Adresse du portail :</td>
<td><input name="adresse_site" type="text" class="case_install" id="adresse_site" tabindex="1" value="<?php echo (empty($adresse_site)) ? $adresse_site_devinee : $adresse_site; ?>" /> </td>
</tr>
<tr>
<td align="right">Adresse du serveur MySQL :</td>
<td><input name="db_url" type="text" class="case_install" id="db_url" tabindex="2" value="<?php echo (empty($db_url)) ? 'localhost' : $db_url; ?>" />
</td>
</tr>
<tr class="td-1">
<td align="right">Utilisateur MySQL :</td>
<td><input name="db_user" type="text" class="case_install" id="db_user" tabindex="3" value="<?php echo (empty($db_user)) ? $db_user_devine : $db_user; ?>" />
</td>
</tr>
<tr>
<td align="right">Mot de passe MySQL :</td>
<td><input name="db_pw" type="password" class="case_install" id="db_pw" tabindex="4" value="<?php echo $db_pw; ?>" onchange="check_pw('db');" /></td>
</tr>
<tr class="td-1">
<td align="right">Confirmation Mot de passe MySQL :</td>
<td><input name="db_pw_confirm" type="password" class="case_install" id="db_pw_confirm" tabindex="5" value="<?php echo $db_pw_confirm; ?>" onchange="check_pw('db');" /></td>
</tr>
<tr>
<td align="right">Nom de la base de données MySQL :</td>
<td><input name="db_name" type="text" class="case_install" id="db_name" tabindex="6" value="<?php echo (empty($db_name)) ? $db_user_devine : $db_name; ?>" /></td>
</tr>
<tr class="td-1">
<td align="right">Préfixe des tables Scout Web Portail :</td>
<td><input name="db_prefix" type="text" class="case_install" id="db_prefix" tabindex="7" value="<?php echo (empty($db_prefix)) ? 'swp_' : $db_prefix; ?>" /></td>
</tr>
<tr>
<td align="right"> </td>
<td> </td>
</tr>
<tr class="td-1">
<td align="right" valign="top"><label for="u_rew_actif">URL Rewriting
activé
<input name="u_rew_actif" type="checkbox" id="u_rew_actif" tabindex="8" onchange="if (this.checked) {alert('Tu as activé l\'url-rewriting.\nLis bien la petite note en bas de la page avant de continuer l\'installation.');}" value="1"<?php echo (detect_urlrewriting() or $u_rew_actif == 1) ? ' checked="checked"' : ''; ?> />
</label></td>
<td><p>l'url-rewriting permet de réécrire certaines des
adresses du portail :<br />
<strong>exple :</strong><em> index.php?page=forum&do=afffil&fil=2</em>
devient <em>fil2.htm</em> par exemple.</p>
<p>Les deux adresses aboutissent à la même page mais la
deuxième est nettement plus simple à retenir et à
écrire. Comme les animateurs peuvent rédiger les pages
du portail eux-même, cette fonction est très pratique.</p></td>
</tr>
<tr class="td-1">
<td align="right"><label for="mail_actif">Fonction mail() native de php
active
<input name="mail_actif" type="checkbox" id="mail_actif" tabindex="9" value="1"<?php echo ($mail_actif == 1 or function_exists('mail')) ? ' checked="checked"' : ''; ?> />
</label></td>
<td> </td>
</tr>
<tr class="td-1">
<td align="right"> </td>
<td><p><span class="rmq">Note : </span>l'url-rewriting et la fonction
mail() ne sont pas toujours activées sur tous les serveurs
web. Pour en savoir plus, consulte l'<a href="#requirements" onclick="evaluation();">évaluation
automatique</a> proposée ci-dessus. </p>
<p><span class="rmq">Note :</span> les informations préremplies ci-dessus
sont des propositions du portail. Assure-toi qu'elles sont correctes. </p></td>
</tr>
</table>
<h3>Compte Administrateur</h3>
<table width="90%" border="0" align="center" cellpadding="2" cellspacing="0" class="cadrenoir">
<tr class="td-1">
<td width="250" align="right">Pseudo :</td>
<td><input name="admin_pseudo" type="text" class="case_install" id="admin_pseudo" tabindex="10" value="<?php echo $admin_pseudo; ?>" maxlength="32" /></td>
</tr>
<tr>
<td align="right">Mot de passe :</td>
<td><input name="admin_pw" type="password" class="case_install" id="admin_pw" tabindex="11" title="6 caractères minimum" value="<?php echo $admin_pw; ?>" onchange="check_pw('admin');" />
(minimum 6 caractères)</td>
</tr>
<tr class="td-1">
<td align="right">Confirmation :</td>
<td><input name="admin_pw_confirm" type="password" class="case_install" id="admin_pw_confirm" tabindex="12" title="6 caractères minimum" value="<?php echo $admin_pw_confirm; ?>" onchange="check_pw('admin');" /></td>
</tr>
<tr>
<td align="right">Prénom :</td>
<td><input name="admin_prenom" type="text" class="case_install" id="admin_prenom" tabindex="13" value="<?php echo $admin_prenom; ?>" maxlength="100" /></td>
</tr>
<tr class="td-1">
<td align="right">Nom :</td>
<td><input name="admin_nom" type="text" class="case_install" id="admin_nom" tabindex="14" value="<?php echo $admin_nom; ?>" maxlength="100" /></td>
</tr>
<tr>
<td align="right">Email :</td>
<td><input name="admin_email" type="text" class="case_install" id="admin_email" tabindex="15" value="<?php echo $admin_email; ?>" maxlength="255" /></td>
</tr>
</table>
<h3>Paramètres généraux de ton unité/groupe scout</h3>
<table width="90%" border="0" align="center" cellpadding="2" cellspacing="0" class="cadrenoir">
<tr class="td-1">
<td width="250" align="right">Ville :</td>
<td><input name="site_ville" type="text" class="case_install" id="site_ville" tabindex="16" value="<?php echo $site_ville; ?>" maxlength="32" /></td>
</tr>
<tr>
<td align="right">Code postal :</td>
<td><input name="site_code_postal" type="text" class="case_install" id="site_code_postal" tabindex="17" value="<?php echo $site_code_postal; ?>" maxlength="255" /></td>
</tr>
</table>
<h3>Option technique</h3>
<p>En cas de conflit entre une table dans la db et une table du portail :<br />
<label for="on_conflit_drop"><input name="on_conflit" id="on_conflit_drop" type="radio" value="drop"<?php echo ($on_conflit == 'drop') ? ' checked="checked"' : ''; ?> />
Supprimer la table conflictuelle</label>
(aucun avertissement)<br />
<label for="on_conflit_stop"><input name="on_conflit" id="on_conflit_stop" type="radio" value="stop"<?php echo ($on_conflit == 'stop' or $on_conflit != 'drop') ? ' checked="checked"' : ''; ?> />
Interrompre l'installation</label></p>
<p align="left"><span class="rmq">Tu as activé l'url-rewriting ?<br />
</span>Si une <span class="rmqbleu">erreur 500</span> apparaît après
avoir cliqué sur le bouton ci-dessous, supprime le fichier .htaccess créé
par le portail à la racine du portail.<br />
Ensuite, actualise la page où s'est affichée l'erreur 500.</p>
<p align="center">
<input name="installation" type="submit" id="installation" tabindex="18" value="Continuer l'installation">
</p>
</form>
<?php
} // fin if get step != done
else if ($step == 'done')
{
?>
<div class="msg">
<p align="center">Félicitations, l'installation du portail a été effectuée
avec succès !</p>
<p align="center" class="rmqbleu">Avant de pouvoir utiliser le portail, supprime le dossier
'install' et le fichier 'install.php' du serveur.</p>
<p align="center" class="petitbleu">Ensuite, tu pourras entrer
sur le portail et le configurer de manière plus approfondie.</p>
<p align="center">Bonne continuation !</p>
<p align="center" class="petitbleu">
<input name="Submit" type="submit" tabindex="1" onclick="window.location = 'index.php';" value="Entrer sur le portail" />
</p>
<?php
if ($_GET['u'] == 1)
{ // url-rewriting activé, on affiche un avertissement en cas de problème.
// Généralement, si l'url-rewriting ou le fichier .htaccess n'est pas supporté, une erreur 500 est générée.
// Dans ce cas, il y a de fortes chances pour qu'il n'ait même pas confirmation de l'installation du portail
// mais plutôt une erreur 500.
?>
<p align="center" class="petitbleu">Si une erreur se produit avec l'url-rewriting, supprime
le fichier .htaccess à la racine du portail.<br />
Tu pourras éventuellement le désactiver depuis le panneau
de configuration du Portail.</p>
<?php
}
?>
</div>
<?php
}
else if ($step == 1 and file_exists('connex.php'))
{ // il semblerait que le portail soit déjà installé
// on détermine la version du portail afin de savoir si on propose une réinstallation ou une mise à jour
include_once('connex.php');
$update = false;
$version_installee = false;
if (defined('INSTALL_DONE') and INSTALL_DONE)
{
function send_sql($db, $sql)
{ // soumet une requête sql à la base de données et renvoie le résultat
if (!$res = @mysql_db_query($db, $sql))
{
return false;
}
return $res;
}
// si le champ version_portail existe, c'est une réinstallation qui est nécessaire
// s'il n'existe pas, on propose uniquement la mise à jour.
$sql = "SELECT valeur as version_portail FROM ".PREFIXE_TABLES."config WHERE champ = 'version_portail'";
if ($res = send_sql($db, $sql))
{
if (mysql_num_rows($res) == 0)
{ // version antérieure à la 1.1, update ou réinstallation
$version_installee = '1.0.x';
$update = true;
}
else
{ // version 1.1 ou postérieure
$ligne = mysql_fetch_assoc($res);
$version_installee = $ligne['version_portail'];
if ($version_installee == $version_portail)
{ // La version installee est la version de ce script d'installation
// On propose une réinstallation
$update = false;
$reinstall = true;
}
else if (in_array($version_installee, $can_update_from))
{ // Le script de mise à jour peut effectuer l'update de la version installée actuellement
// $can_update_from est défini en début de script
$update = true;
}
else
{ // Le script de mise à jour de cette version n'est pas prévu
// pour faire une mise à jour depuis la version installée
$update = false;
}
}
}
else
{ // Il se peut que connex.php soit présent mais que la db soit vide
// On propose donc une réinstallation
$update = false;
$reinstall = true;
}
}
if ($update)
{ // Il s'agit d'une mise à jour d'une version précédente
// Un script de mise à jour est prévu
?>
<h2>Mise à jour vers la version <?php echo $version_portail; ?></h2>
<p>Le script a détecté une installation de SWP v <?php echo $version_installee; ?>.</p>
<p>La mise à jour dispose d'un script automatique. Clique sur le
bouton ci-dessous pour t'y rendre.</p>
<form name="form1" id="form1" method="get" action="install/update_portail.php">
<div align="center">
<input type="submit" value="Update du portail" />
</div>
</form>
<?php
}
else if (!$update and $version_installee != $version_portail and !$reinstall)
{ // Le site contient une version du portail pour laquelle aucune mise à jour n'est prévue dans le script
?>
<h2>Mise à jour vers la version <?php echo $version_portail; ?></h2>
<p class="rmq">Ce script n'est pas prévu pour effectuer une mise à jour depuis la version <?php echo $version_installee; ?> du portail.</p>
<p class="petit">Effectue d'abord la mise à jour vers une version supérieure du portail pour laquelle une mise à jour est prévue depuis la version <?php echo $version_installee; ?>.<br />
Ensuite, tu pourras installer la dernière mise à jour vers la version <?php echo $version_portail; ?>.<br />
Ce script peut mettre à jour les versions suivantes : <?php echo implode(', ', $can_update_from); ?>.</p>
<?php
}
else
{ // Il s'agit d'une réinstallation du portail sur une version identique
?>
<h2>Réinstallation du portail</h2>
<div class="msg">
<p class="rmq">Il semblerait qu'une installation du portail existe déjà
dans ce dossier.</p>
<p>Pour relancer l'installation correctement, tu dois supprimer les éléments
suivants :</p>
<ul>
<li><strong>connex.php</strong></li>
<li>éventuellement <strong>config.php</strong></li>
<li>éventuellement <strong>.htaccess</strong></li>
<li>éventuellement les fichiers <strong>.cache</strong> contenus dans le dossier <strong>cache/</strong></li>
</ul>
<p>Une fois que tu as vérifié ces éléments,</p>
<form name="form1" id="form1" method="get" action="install.php">
<div align="center">
<input type="submit" value="Poursuis l'installation" />
</div>
</form>
</div>
<div class="msg">
<p class="petit"><strong>Réinstallation depuis une sauvegarde des données</strong><br />
Si tu réinstalles le portail et que tu as fait une sauvegarde des
données du portail, installe simplement le portail comme si c'était
la première installation et ensuite, remplace le fichier connex.php
et le contenu de la base de données.</p>
<p class="petit"><strong>Tu viens d'installer le portail ?</strong><br />
Si tu viens de terminer l'installation du portail, tu dois supprimer le
<strong>dossier install</strong> et le fichier <strong>install.php</strong>
pour pouvoir démarrer le portail. Une fois que c'est fait, tu peux
<a href="index.php">entrer sur le portail</a>. </p>
</div>
<?php
}
}
?>
</div>