-
Notifications
You must be signed in to change notification settings - Fork 8
/
populate.php
1948 lines (1559 loc) · 81.8 KB
/
populate.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
/**
* populate the database
*
* This script helps to create records in the database.
*
* The script populates the database according to the value of the parameter 'action':
* - 'blog' -- create a blog
* - 'book' -- create a book
* - 'build' -- create default items, like for first installation
* - 'collection' -- create a collection to share files
* - 'composite' -- with scrolling news, plus gadget and extra boxes
* - 'forum' -- create several structured discussion boards using the yabb layout
* - 'links' -- create a Yahoo-like directory of links
* - 'original' -- post original articles
* - 'partners' - our preferred partners
* - 'polls' -- create a section for polls
* - 'recipes' -- create a book of cooking recipes
* - 'servers' -- sample hosts to be pinged, etc. ([script]servers/populate.php[/script])
* - 'vote' -- create one vote, or one poll
* - 'wiki' -- create a wiki
*
* If no parameter has been set, the script displays a form to make the surfer select among available options.
*
*
* When the parameter 'action' has the value 'build', this script creates records in following tables:
* - sections ([script]sections/populate.php[/script]) -- basic sections
* - categories ([script]categories/populate.php[/script]) -- for featured pages
* - articles ([script]articles/populate.php[/script]) -- cover page, menu, etc.
*
* When the parameter has the value 'build', this script also invokes a hook to populate additional tables:
* - id: 'control/populate.php'
* - type: 'include'
*
* Only associates can use this script, except if no switch file is present.
* Invocations are also accepted if the user table is missing or empty.
*
* If an associate user profile is created, apply it to the current surfing session.
*
* @author Bernard Paques
* @author GnapZ
* @reference
* @license http://www.gnu.org/copyleft/lesser.txt GNU Lesser General Public License
*/
// common libraries
include_once '../shared/global.php';
// what to do
$action = '';
if(isset($_REQUEST['action']))
$action = $_REQUEST['action'];
if(!$action && isset($context['arguments'][0]))
$action = $context['arguments'][0];
$action = strip_tags($action);
// associates can do what they want
if(Surfer::is_associate())
$permitted = TRUE;
// the default is to disallow access
else
$permitted = FALSE;
// load localized strings
i18n::bind('help');
// load the skin
load_skin('help');
// the path to this page
$context['path_bar'] = array( 'control/' => i18n::s('Control Panel') );
// default page title
$context['page_title'] = i18n::s('Content Assistant');
// permission denied
if(!$permitted) {
// anonymous users are invited to log in or to register
if(!Surfer::is_logged())
Safe::redirect($context['url_to_home'].$context['url_to_root'].'users/login.php?url='.urlencode('help/populate.php?action='.$action));
// permission denied to authenticated user
Safe::header('Status: 401 Unauthorized', TRUE, 401);
Logger::error(i18n::s('You are not allowed to perform this operation.'));
// forward to the control panel
$menu = array('control/' => i18n::s('Control Panel'));
$context['text'] .= Skin::build_list($menu, 'menu_bar');
// create a blog
} elseif($action == 'blog') {
// page title
$context['page_title'] = i18n::s('Add a blog');
// get section parameters
if(!isset($_REQUEST['title']) || !$_REQUEST['title']) {
// splash
$context['text'] .= '<p>'.i18n::s('With YACS, each blog is an independant section, usually featuring one main contributor on some topic. Each post in a blog may include images, photos, files, comments, trackbacks and related links.').'</p>'
.'<p>'.i18n::s('You can either create one general-purpose blog, or run this script several time and create a set of more specialised blogs.').'</p>';
// a form to get section parameters
$context['text'] .= '<form method="post" action="'.$context['script_url'].'" onsubmit="return validateDocumentPost(this)" id="main_form"><div>'."\n"
.'<input type="hidden" name="action" value="blog" />';
$fields = array();
// the anchor
$label = i18n::s('Blog anchor');
$input = '<select name="anchor"><option value="">'.i18n::s('-- Root level')."</option>\n".Sections::get_options('none', NULL).'</select>';
$hint = i18n::s('Please carefully select a parent section, if any');
$fields[] = array($label, $input, $hint);
// the title
$label = i18n::s('Blog Title');
$input = '<textarea id="title" name="title" rows="1" cols="50" accesskey="t">'.encode_field(i18n::c('My Blog')).'</textarea>';
$hint = i18n::s('Please provide a meaningful title.');
$fields[] = array($label, $input, $hint);
// the introduction
$label = i18n::s('Introduction');
$input = '<textarea name="introduction" rows="5" cols="50" accesskey="i">'.encode_field(i18n::c('The best place to express myself')).'</textarea>';
$hint = i18n::s('Appears at site map, near section title');
$fields[] = array($label, $input, $hint);
// the description
$label = i18n::s('Description');
$input = '<textarea name="description" rows="4" cols="50">'.encode_field(i18n::c('A description of what this blog is about.')).'</textarea>';
$hint = i18n::s('Give a hint to interested people');
$fields[] = array($label, $input, $hint);
// the contribution flag: Yes/public, Restricted/logged, No/associates
$label = i18n::s('Contribution');
$input = '<input type="radio" name="contribution" value="N" accesskey="c" checked="checked" /> '.i18n::s('Only associates and owners can contribute.').BR;
$input .= '<input type="radio" name="contribution" value="R" /> '.i18n::s('Any authenticated member can contribute.');
$fields[] = array($label, $input);
// the active flag: Yes/public, Restricted/logged, No/associates
$label = i18n::s('Access');
$input = '<input type="radio" name="active" value="Y" accesskey="v" checked="checked" /> '.i18n::s('Public - Everybody, including anonymous surfers').BR;
$input .= '<input type="radio" name="active" value="R" /> '.i18n::s('Community - Access is granted to any identified surfer').BR;
$input .= '<input type="radio" name="active" value="N" /> '.i18n::s('Private - Access is restricted to selected persons');
$fields[] = array($label, $input);
// home panel
$label = i18n::s('Front page');
$input = i18n::s('Content of this section should be:').BR;
$input .= '<input type="radio" name="home_panel" value="main" checked="checked" /> '.i18n::s('displayed in the main panel').BR;
$input .= '<input type="radio" name="home_panel" value="gadget" /> '.i18n::s('listed in the main panel, in a gadget box').BR;
$input .= '<input type="radio" name="home_panel" value="extra" /> '.i18n::s('listed on page side, in an extra box').BR;
$input .= '<input type="radio" name="home_panel" value="none" /> '.i18n::s('not displayed at the front page');
$fields[] = array($label, $input);
// build the form
$context['text'] .= Skin::build_form($fields);
$fields = array();
// the submit button
$context['text'] .= '<p class="assistant_bar">'.Skin::build_submit_button(i18n::s('Add content'), i18n::s('Press [s] to submit data'), 's').'</p>'."\n";
// end of the form
$context['text'] .= '</div></form>';
// append the script used for data checking on the browser
$context['text'] .= JS_PREFIX
.'// check that main fields are not empty'."\n"
.'func'.'tion validateDocumentPost(container) {'."\n"
."\n"
.' // title is mandatory'."\n"
.' if(!container.title.value) {'."\n"
.' alert("'.i18n::s('Please provide a meaningful title.').'");'."\n"
.' Yacs.stopWorking();'."\n"
.' return false;'."\n"
.' }'."\n"
."\n"
.' // successful check'."\n"
.' return true;'."\n"
.'}'."\n"
."\n"
.'// set the focus on first form field'."\n"
.'$("#title").focus();'."\n"
.JS_SUFFIX."\n";
// create a section
} else {
$fields = array();
$fields['anchor'] = $_REQUEST['anchor'];
$fields['title'] = $_REQUEST['title'];
$fields['introduction'] = $_REQUEST['introduction'];
$fields['description'] = $_REQUEST['description'];
$fields['active_set'] = $_REQUEST['active'];
$fields['home_panel'] = $_REQUEST['home_panel'];
$fields['options'] = 'with_extra_profile articles_by_publication';
$fields['articles_layout'] = 'daily'; // the preferred layout for blogs
$fields['content_options'] = 'with_extra_profile'; // show user profiles in a side panel
if($_REQUEST['contribution'] == 'N') // only associates and owners can contribute
$fields['locked'] = 'Y';
$fields['rank'] = 10000; // default value
if($fields['id'] = Sections::post($fields)) {
// increment the post counter of the surfer
Users::increment_posts(Surfer::get_id());
// splash
$context['text'] .= '<p>'.i18n::s('Congratulations, you have shared new content.').'</p>';
// feed-back on contributor scope
switch($_REQUEST['contribution']) {
case 'N':
$context['text'] .= '<p>'.i18n::s('Assign at least one member as editor of this blog to enable contributions. Please remind that associates can always contribute at any place.').'</p>';
break;
case 'R':
$context['text'] .= '<p>'.i18n::s('Any authenticated member of the community is allowed to contribute to this blog. You should control community membership to avoid unappropriate material.').'</p>';
break;
}
// follow-up commands
$follow_up = i18n::s('What do you want to do now?');
$menu = array();
$menu = array_merge($menu, array(Sections::get_permalink($fields) => i18n::s('Access the new blog')));
if(Surfer::may_upload())
$menu = array_merge($menu, array('images/edit.php?anchor='.urlencode('section:'.$fields['id']) => i18n::s('Add an image')));
$menu = array_merge($menu, array('help/populate.php' => i18n::s('Launch the Content Assistant again')));
$menu = array_merge($menu, array('control/' => i18n::s('Control Panel')));
$follow_up .= Skin::build_list($menu, 'menu_bar');
$context['text'] .= Skin::build_block($follow_up, 'bottom');
// new content has been created
Logger::remember('help/populate.php', 'content assistant has created new content');
}
}
// create a book
} elseif($action == 'book') {
// page title
$context['page_title'] = i18n::s('Add a book');
// get section parameters
if(!isset($_REQUEST['title']) || !$_REQUEST['title']) {
// splash
$context['text'] .= '<p>'.i18n::s('With YACS, a book is an hierarchy of sections and of pages.').'</p>';
// a form to get section parameters
$context['text'] .= '<form method="post" action="'.$context['script_url'].'" onsubmit="return validateDocumentPost(this)" id="main_form"><div>'."\n"
.'<input type="hidden" name="action" value="book" />';
$fields = array();
// the anchor
$label = i18n::s('Book anchor');
$input = '<select name="anchor"><option value="">'.i18n::s('-- Root level')."</option>\n".Sections::get_options('none', NULL).'</select>';
$hint = i18n::s('Please carefully select a parent section, if any');
$fields[] = array($label, $input, $hint);
// the title
$label = i18n::s('Book Title');
$input = '<textarea id="title" name="title" rows="1" cols="50" accesskey="t">'.encode_field(i18n::c('User Manual')).'</textarea>';
$hint = i18n::s('Please provide a meaningful title.');
$fields[] = array($label, $input, $hint);
// the introduction
$label = i18n::s('Introduction');
$input = '<textarea name="introduction" rows="5" cols="50" accesskey="i">'.encode_field(i18n::c('With reader notes')).'</textarea>';
$hint = i18n::s('Appears at site map, near book title');
$fields[] = array($label, $input, $hint);
// the description
$label = i18n::s('Description');
$input = '<textarea name="description" rows="4" cols="50">'.encode_field(i18n::c('This book is electronic, meaning its content dynamically evolves over time. Moreover, notes may be added to each page by readers.')).'</textarea>';
$hint = i18n::s('Give a hint to interested people');
$fields[] = array($label, $input, $hint);
// build the form
$context['text'] .= Skin::build_form($fields);
$fields = array();
// up to 8 sections
$context['text'] .= Skin::build_block(i18n::s('Up to 8 sections'), 'title');
$context['text'] .= '<p>'.i18n::s('Add as many sections you need. You will be able to add new sections afterwards.')."</p>\n";
// loop
for($index = 1; $index <= 8; $index++) {
$context['text'] .= Skin::build_block(sprintf(i18n::s('Section #%d'), $index), 'subtitle');
$label = i18n::s('Title');
$input = '<input type="text" name="titles[]" size="50" value="" />';
$fields[] = array($label, $input);
$label = i18n::s('Introduction');
$input = '<textarea name="introductions[]" rows="2" cols="50"></textarea>';
$fields[] = array($label, $input);
// build the form
$context['text'] .= Skin::build_form($fields);
$fields = array();
}
// submit
$context['text'] .= Skin::build_block(i18n::s('Start'), 'title');
// the submit button
$context['text'] .= '<p class="assistant_bar">'.Skin::build_submit_button(i18n::s('Add content'), i18n::s('Press [s] to submit data'), 's').'</p>'."\n";
// end of the form
$context['text'] .= '</div></form>';
// append the script used for data checking on the browser
$context['text'] .= JS_PREFIX
.'// check that main fields are not empty'."\n"
.'func'.'tion validateDocumentPost(container) {'."\n"
."\n"
.' // title is mandatory'."\n"
.' if(!container.title.value) {'."\n"
.' alert("'.i18n::s('Please provide a meaningful title.').'");'."\n"
.' Yacs.stopWorking();'."\n"
.' return false;'."\n"
.' }'."\n"
."\n"
.' // successful check'."\n"
.' return true;'."\n"
.'}'."\n"
."\n"
.'// set the focus on first form field'."\n"
.'$("#title").focus();'."\n"
.JS_SUFFIX."\n";
// create a section
} else {
$fields = array();
$fields['anchor'] = $_REQUEST['anchor'];
$fields['title'] = $_REQUEST['title'];
$fields['introduction'] = $_REQUEST['introduction'];
$fields['description'] = $_REQUEST['description'];
$fields['articles_layout'] = 'none'; // the preferred layout for books
$fields['sections_layout'] = 'inline'; // the preferred layout for books
$fields['options'] = 'articles_by_title'; // preserve page ordering over time
$fields['content_options'] = 'auto_publish view_as_wiki edit_as_simple with_export_tools with_neighbours'; // let surfers convert pages
$fields['rank'] = 10000; // default value
if($fields['id'] = Sections::post($fields)) {
// create new sub-sections
for($index = 0; $index < count($_REQUEST['titles']); $index++) {
$sub_section = array();
$sub_section['anchor'] = 'section:'.$fields['id'];
$sub_section['title'] = $_REQUEST['titles'][$index];
$sub_section['introduction'] = $_REQUEST['introductions'][$index];
$sub_section['articles_layout'] = 'manual'; // the preferred layout for books
$sub_section['sections_layout'] = 'none'; // the preferred layout for books
$sub_section['options'] = 'articles_by_title'; // preserve page ordering over time
$sub_section['content_options'] = 'auto_publish view_as_wiki edit_as_simple with_export_tools with_neighbours'; // let surfers convert pages
$sub_section['rank'] = ($index+1); // preserve order
if($sub_section['title'])
Sections::post($sub_section, FALSE);
}
// increment the post counter of the surfer
Users::increment_posts(Surfer::get_id());
// splash
$context['text'] .= '<p>'.i18n::s('Congratulations, you have shared new content.').'</p>';
// follow-up commands
$follow_up = i18n::s('What do you want to do now?');
$menu = array();
$menu = array_merge($menu, array(Sections::get_permalink($fields) => i18n::s('Access the new book')));
if(Surfer::may_upload())
$menu = array_merge($menu, array('images/edit.php?anchor='.urlencode('section:'.$fields['id']) => i18n::s('Add an image')));
$menu = array_merge($menu, array('help/populate.php' => i18n::s('Launch the Content Assistant again')));
$menu = array_merge($menu, array('control/' => i18n::s('Control Panel')));
$follow_up .= Skin::build_list($menu, 'menu_bar');
$context['text'] .= Skin::build_block($follow_up, 'bottom');
// new content has been created
Logger::remember('help/populate.php', 'content assistant has created new content');
}
}
// initialize the database with sample data
} elseif($action == 'build') {
// redo the basic steps of data creation
include_once '../control/populate.php';
// create a collection
} elseif($action == 'collection') {
// page title
$context['page_title'] = i18n::s('Add a collection');
// get collection parameters
if(!isset($_REQUEST['name']) || !$_REQUEST['name']) {
// splash
$context['text'] .= '<p>'.i18n::s('YACS may turn your web site to a straightforward media server.').'</p>'
.'<p>'.i18n::s('Define a collection to publicly share some directory of the server hard drive. Then YACS will build nice index pages to list available files, and allow for immediate download. Where applicable, files will also be streamed to workstations through automatic playlists.').'</p>';
// if some collections has already been defined, use the dedicated configuration panel
Safe::load('parameters/collections.include.php');
if(@count($context['collections'])) {
$context['text'] .= '<p>'.sprintf(i18n::s('This assistant is aiming to help you create your very first collection. Since some collection has already been defined, please use %s and add a new definition.'), Skin::build_link('collections/configure.php', i18n::s('the dedicated configuration panel'), 'shortcut')).'</p>';
// or create a configuration file from scratch
} else {
// a form to get collection parameters
$context['text'] .= '<form method="post" action="'.$context['script_url'].'" onsubmit="return validateDocumentPost(this)" id="main_form"><div>'."\n"
.'<input type="hidden" name="action" value="collection" />';
$fields = array();
// the name
$label = i18n::s('Collection nick name');
$input = '<input type="text" id="name" name="name" size="32" value="'.encode_field(i18n::c('my_collection')).'" maxlength="32" />';
$hint = i18n::s('Prepended to the path of each file of the collection. Short and meaningful');
$fields[] = array($label, $input, $hint);
// the title
$label = i18n::s('Label');
$input = '<input type="text" name="title" size="45" value="'.encode_field(i18n::c('My Collection')).'" maxlength="255" />';
$hint = i18n::s('Used at index pages, and at the top of each page generated for this collection');
$fields[] = array($label, $input, $hint);
// the path
$label = i18n::s('Path prefix');
$input = '<input type="text" name="path" size="45" value="c:" maxlength="255" />';
$hint = sprintf(i18n::s('Local access to files; YACS installation directory is at "%s"'), $context['path_to_root']);
$fields[] = array($label, $input, $hint);
// the url
$label = i18n::s('URL prefix');
$input = '<input type="text" name="url" size="45" value="'.encode_field($context['url_to_home']).'" maxlength="255" />';
$hint = i18n::s('The ftp:// or http:// address used to access the collection, pointing to the same place than the path prefix');
$fields[] = array($label, $input, $hint);
// introduction
$label = i18n::s('Introduction');
$input = '<textarea name="introduction" cols="40" rows="5">'.encode_field(i18n::c('Public files to download')).'</textarea>';
$hint = i18n::s('To be used at the front page and on the collections index page');
$fields[] = array($label, $input, $hint);
// description
$label = i18n::s('Description');
$input = '<textarea name="description" cols="40" rows="3">'.encode_field(i18n::c('Click on file names to transfer them to your workstation, or to start a Video-on-demand session.')).'</textarea>';
$hint = i18n::s('To be inserted in the index page of this collection');
$fields[] = array($label, $input, $hint);
// build the form
$context['text'] .= Skin::build_form($fields);
$fields = array();
// the submit button
$context['text'] .= '<p class="assistant_bar">'.Skin::build_submit_button(i18n::s('Add content'), i18n::s('Press [s] to submit data'), 's').'</p>'."\n";
// end of the form
$context['text'] .= '</div></form>';
// append the script used for data checking on the browser
$context['text'] .= JS_PREFIX
.'// check that main fields are not empty'."\n"
.'func'.'tion validateDocumentPost(container) {'."\n"
."\n"
.' // name is mandatory'."\n"
.' if(!container.name.value) {'."\n"
.' alert("'.i18n::s('You must name this collection.').'");'."\n"
.' Yacs.stopWorking();'."\n"
.' return false;'."\n"
.' }'."\n"
.' // title is mandatory'."\n"
.' if(!container.title.value) {'."\n"
.' alert("'.i18n::s('Please provide a meaningful title.').'");'."\n"
.' Yacs.stopWorking();'."\n"
.' return false;'."\n"
.' }'."\n"
."\n"
.' // successful check'."\n"
.' return true;'."\n"
.'}'."\n"
."\n"
.'// set the focus on first form field'."\n"
.'$("#name").focus();'."\n"
.JS_SUFFIX."\n";
}
// create a collection
} else {
// build the new configuration file
$content = '<?php'."\n"
.'// This file has been created by the configuration script help/populate.php'."\n"
.'// on '.gmdate("F j, Y, g:i a").' GMT, for '.Surfer::get_name().'. Please do not modify it manually.'."\n"
.'global $context;'."\n";
$name = addcslashes($_REQUEST['name'], "\\'");
$title = addcslashes($_REQUEST['title'], "\\'");
$path = addcslashes($_REQUEST['path'], "\\'");
$url = addcslashes($_REQUEST['url'], "\\'");
$introduction = addcslashes($_REQUEST['introduction'], "\\'");
$description = addcslashes($_REQUEST['description'], "\\'");
if($name && $path && $url) {
$content .= '$context[\'collections\'][\''.$name.'\']=array(\''.$title.'\', \''
.$path.'\', \''.$url.'\', \''
.$introduction.'\', \''.$description.'\', \'\', \'\', \'Y\');'."\n";
}
$content .= '?>'."\n";
// update the parameters file
if(!Safe::file_put_contents('parameters/collections.include.php', $content)) {
Logger::error(sprintf(i18n::s('ERROR: Impossible to write to the file %s. The configuration has not been saved.'), 'parameters/collections.include.php'));
// allow for a manual update
$context['text'] .= '<p style="text-decoration: blink;">'.sprintf(i18n::s('To actually change the configuration, please copy and paste following lines by yourself in file %s.'), 'parameters/collections.include.php')."</p>\n";
// display updated parameters
$context['text'] .= Skin::build_box(i18n::s('Configuration parameters'), Safe::highlight_string($content), 'folded');
// job done
} else {
// purge the cache
Cache::clear();
// remember the change
$label = sprintf(i18n::c('%s has been updated'), 'parameters/collections.include.php');
Logger::remember('help/populate.php', $label);
// splash
$context['text'] .= '<p>'.i18n::s('Congratulations, you have shared new content.').'</p>';
// follow-up commands
$follow_up = i18n::s('What do you want to do now?');
$menu = array();
$menu = array_merge($menu, array('collections/browse.php?path='.urlencode($_REQUEST['name']) => i18n::s('Access the new collection')));
$menu = array_merge($menu, array('collections/' => i18n::s('File collections')));
$menu = array_merge($menu, array('help/populate.php' => i18n::s('Launch the Content Assistant again')));
$menu = array_merge($menu, array('control/' => i18n::s('Control Panel')));
$follow_up .= Skin::build_list($menu, 'menu_bar');
$context['text'] .= Skin::build_block($follow_up, 'bottom');
}
}
// create a composite section
} elseif($action == 'composite') {
// page title
$context['page_title'] = i18n::s('Add a section');
// get parameters
if(!isset($_REQUEST['main_title']) || !$_REQUEST['main_title']) {
// splash
$context['text'] .= '<p>'.i18n::s('YACS allows for composite section index pages.').'</p>'
.'<p>'.i18n::s('Use this assistant to create one main section, plus companion components, to better suit your needs. Of course, sections can be changed, deleted or added individually afterwards.').'</p>';
// a form to get section parameters
$context['text'] .= '<form method="post" action="'.$context['script_url'].'" onsubmit="return validateDocumentPost(this)" id="main_form"><div>'."\n"
.'<input type="hidden" name="action" value="composite" />';
$fields = array();
// section title
$context['text'] .= Skin::build_block(i18n::s('Section'), 'title');
// the anchor
$label = i18n::s('Section anchor');
$input = '<select name="anchor"><option value="">'.i18n::s('-- Root level')."</option>\n".Sections::get_options('none', NULL).'</select>';
$hint = i18n::s('Please carefully select a parent section, if any');
$fields[] = array($label, $input, $hint);
// the title
$label = i18n::s('Section title');
$input = '<input type="text" id="main_title" name="main_title" size="50" accesskey="t" value="'.encode_field($item['title']).'" />';
$hint = i18n::s('Please provide a meaningful title.');
$fields[] = array($label, $input, $hint);
// the introduction
$label = i18n::s('Introduction');
$input = '<textarea name="main_introduction" rows="2" cols="50" accesskey="i">'.encode_field($item['introduction']).'</textarea>';
$hint = i18n::s('Appears at site map, near section title');
$fields[] = array($label, $input, $hint);
// the description
$label = i18n::s('Description');
$input = '<textarea name="main_description" rows="4" cols="50" >'.encode_field($item['description']).'</textarea>';
$hint = i18n::s('Appears at the section index page');
$fields[] = array($label, $input, $hint);
// update the form
$context['text'] .= Skin::build_form($fields);
$fields = array();
// companions sections
$context['text'] .= Skin::build_block(i18n::s('Companion sections'), 'title');
$context['text'] .= '<p>'.i18n::s('Add one or several specialized sub-sections, depending of your requirements. It is safe to create all suggested sections, even if you do not need them right now.')."</p>\n";
// scrolling news
$context['text'] .= Skin::build_block(i18n::s('Side news'), 'subtitle');
$input = '<input type="checkbox" name="news_check" checked="checked" /> '.i18n::s('Add a companion section to post articles that will appear in the news panel of the parent section');
$context['text'] .= '<p>'.$input.'</p>';
$label = i18n::s('Title');
$input = '<input type="text" name="news_title" size="50" value="'.encode_field(i18n::c('Flashy news')).'" />';
$fields[] = array($label, $input);
$label = i18n::s('Introduction');
$input = '<textarea name="news_introduction" rows="2" cols="50">'.encode_field(i18n::c('Post here articles that will appear in the news panel of the parent section')).'</textarea>';
$fields[] = array($label, $input);
// update the form
$context['text'] .= Skin::build_form($fields);
$fields = array();
// gadget boxes
$context['text'] .= Skin::build_block(i18n::s('Gadget boxes'), 'subtitle');
$input = '<input type="checkbox" name="gadget_check" checked="checked" /> '.i18n::s('Add a companion section to post articles that will appear in individual gadget boxes');
$context['text'] .= '<p>'.$input.'</p>';
$label = i18n::s('Title');
$input = '<input type="text" name="gadget_title" size="50" value="'.encode_field(i18n::c('Gadget boxes')).'" />';
$fields[] = array($label, $input);
$label = i18n::s('Introduction');
$input = '<textarea name="gadget_introduction" rows="2" cols="50">'.encode_field(i18n::c('Post here articles that will appear in individual gadget boxes, in the middle of the index page of the parent section')).'</textarea>';
$fields[] = array($label, $input);
// update the form
$context['text'] .= Skin::build_form($fields);
$fields = array();
// extra boxes
$context['text'] .= Skin::build_block(i18n::s('Extra boxes'), 'subtitle');
$input = '<input type="checkbox" name="extra_check" checked="checked" /> '.i18n::s('Add a companion section to post articles that will appear in individual extra boxes');
$context['text'] .= '<p>'.$input.'</p>';
$label = i18n::s('Title');
$input = '<input type="text" name="extra_title" size="50" value="'.encode_field(i18n::c('Extra boxes')).'" />';
$fields[] = array($label, $input);
$label = i18n::s('Introduction');
$input = '<textarea name="extra_introduction" rows="2" cols="50">'.encode_field(i18n::c('Post here articles that will appear in individual extra boxes, aside the index of the parent section')).'</textarea>';
$fields[] = array($label, $input);
// update the form
$context['text'] .= Skin::build_form($fields);
$fields = array();
// next step
$context['text'] .= Skin::build_block(i18n::s('Next step'), 'title');
// the submit button
$context['text'] .= '<p class="assistant_bar">'.Skin::build_submit_button(i18n::s('Add content'), i18n::s('Press [s] to submit data'), 's').'</p>'."\n";
// end of the form
$context['text'] .= '</div></form>';
// append the script used for data checking on the browser
$context['text'] .= JS_PREFIX
.'// check that main fields are not empty'."\n"
.'func'.'tion validateDocumentPost(container) {'."\n"
."\n"
.' // title is mandatory'."\n"
.' if(!container.main_title.value) {'."\n"
.' alert("'.i18n::s('Please provide a meaningful title.').'");'."\n"
.' Yacs.stopWorking();'."\n"
.' return false;'."\n"
.' }'."\n"
."\n"
.' // successful check'."\n"
.' return true;'."\n"
.'}'."\n"
."\n"
.'// set the focus on first form field'."\n"
.'$("#main_title").focus();'."\n"
.JS_SUFFIX."\n";
// create the stuff
} else {
// update the main section
$item = array();
$item['anchor'] = $_REQUEST['anchor'];
$item['title'] = $_REQUEST['main_title'];
$item['introduction'] = $_REQUEST['main_introduction'];
$item['description'] = $_REQUEST['main_description'];
$item['id'] = Sections::post($item);
// news section
if($_REQUEST['news_check']) {
$section = array();
$section['anchor'] = 'section:'.$item['id'];
$section['title'] = $_REQUEST['news_title'];
$section['introduction'] = $_REQUEST['news_introduction'];
$section['index_panel'] = 'scroller';
$section['home_panel'] = 'none'; // new pages are not pushed at the front page
$section['content_options'] = 'without_rating'; // show user profiles in a side panel
if($section['title'])
$section['id'] = Sections::post($section, FALSE);
// add one sample article
if(isset($section['id'])) {
$article = array();
$article['anchor'] = 'section:'.$section['id'];
$article['title'] = i18n::c('sample');
$article['description'] = i18n::c('This is a sample scrolling news.');
$article['id'] = Articles::post($article);
}
}
// gadget section
if($_REQUEST['gadget_check']) {
$section = array();
$section['anchor'] = 'section:'.$item['id'];
$section['title'] = $_REQUEST['gadget_title'];
$section['introduction'] = $_REQUEST['gadget_introduction'];
$section['index_panel'] = 'gadget_boxes';
$section['home_panel'] = 'none'; // new pages are not pushed at the front page
$section['content_options'] = 'without_rating';
if($section['title'])
$section['id'] = Sections::post($section, FALSE);
// add one sample article
if($section['id']) {
$article = array();
$article['anchor'] = 'section:'.$section['id'];
$article['title'] = i18n::c('Gadget box');
$article['description'] = i18n::c('This is a sample gadget box.');
$article['id'] = Articles::post($article);
}
}
// extra section
if($_REQUEST['extra_check']) {
$section = array();
$section['anchor'] = 'section:'.$item['id'];
$section['title'] = $_REQUEST['extra_title'];
$section['introduction'] = $_REQUEST['extra_introduction'];
$section['index_panel'] = 'extra_boxes';
$section['home_panel'] = 'none'; // new pages are not pushed at the front page
$section['content_options'] = 'without_rating';
if($section['title'])
$section['id'] = Sections::post($section, FALSE);
// add one sample article
if($section['id']) {
$article = array();
$article['anchor'] = 'section:'.$section['id'];
$article['title'] = i18n::c('Sample box');
$article['description'] = i18n::c('This is a sample extra box.');
$article['id'] = Articles::post($article);
}
}
// increment the post counter of the surfer
Users::increment_posts(Surfer::get_id());
// splash
$context['text'] .= '<p>'.i18n::s('Congratulations, you have shared new content.').'</p>';
// follow-up commands
$follow_up = i18n::s('What do you want to do now?');
$menu = array();
$menu = array_merge($menu, array(Sections::get_permalink($item) => i18n::s('Access the new section')));
$menu = array_merge($menu, array('help/populate.php' => i18n::s('Launch the Content Assistant again')));
$menu = array_merge($menu, array('control/' => i18n::s('Control Panel')));
$follow_up .= Skin::build_list($menu, 'menu_bar');
$context['text'] .= Skin::build_block($follow_up, 'bottom');
// new content has been created
Logger::remember('help/populate.php', 'content assistant has created new content');
}
// create a forum
} elseif($action == 'forum') {
// page title
$context['page_title'] = i18n::s('Add a forum');
// get section parameters
if(!isset($_REQUEST['title']) || !$_REQUEST['title']) {
// splash
$context['text'] .= '<p>'.i18n::s('A forum is made of one or several discussion boards, which are aiming to support threads of interaction between community members. Each topic started in a discussion board may feature images, photos, files, and related links.').'</p>'
.'<p>'.i18n::s('You can either create one general-purpose discussion board, or a set of more specialised boards.').'</p>';
// a form to get section parameters
$context['text'] .= '<form method="post" action="'.$context['script_url'].'" onsubmit="return validateDocumentPost(this)" id="main_form"><div>'."\n"
.'<input type="hidden" name="action" value="forum" />';
$fields = array();
// the anchor
$label = i18n::s('Forum anchor');
$input = '<select name="anchor"><option value="">'.i18n::s('-- Root level')."</option>\n".Sections::get_options('none', NULL).'</select>';
$hint = i18n::s('Please carefully select a parent section, if any');
$fields[] = array($label, $input, $hint);
// the title
$label = i18n::s('Forum Title');
$input = '<textarea id="title" name="title" rows="1" cols="50" accesskey="t">'.encode_field(i18n::c('Forum')).'</textarea>';
$hint = i18n::s('Please provide a meaningful title.');
$fields[] = array($label, $input, $hint);
// the introduction
$label = i18n::s('Introduction');
$input = '<textarea name="introduction" rows="5" cols="50" accesskey="i">'.encode_field(i18n::c('Post your brand new ideas here!')).'</textarea>';
$hint = i18n::s('Appears at site map, near section title');
$fields[] = array($label, $input, $hint);
// the description
$label = i18n::s('Description');
$input = '<textarea name="description" rows="4" cols="50">'.encode_field(i18n::c('Registered members of this site may start a thread on any subject here. Use this forum either to ask for support, or to share new ideas with other members of the community. Pages posted in the forum benefit from the full power of YACS, including the ability to create polls, to upload files and to attach links.')).'</textarea>';
$hint = i18n::s('Give a hint to interested people');
$fields[] = array($label, $input, $hint);
// build the form
$context['text'] .= Skin::build_form($fields);
$fields = array();
// up to 8 sections
$context['text'] .= Skin::build_block(i18n::s('Up to 8 boards'), 'title');
$context['text'] .= '<p>'.i18n::s('You will be able to enhance these boards, or to add new boards, afterwards.')."</p>\n";
// loop
for($index = 1; $index <= 8; $index++) {
$context['text'] .= Skin::build_block(sprintf(i18n::s('Board #%d'), $index), 'subtitle');
$label = i18n::s('Family');
$input = '<input type="text" name="families[]" size="50" value="" />';
$fields[] = array($label, $input, i18n::s('Repeat the same string in successive boards that have to be grouped in the forum.'));
$label = i18n::s('Title');
$input = '<input type="text" name="titles[]" size="50" value="" />';
$fields[] = array($label, $input);
$label = i18n::s('Introduction');
$input = '<textarea name="introductions[]" rows="2" cols="50"></textarea>';
$fields[] = array($label, $input);
// build the form
$context['text'] .= Skin::build_form($fields);
$fields = array();
}
// submit
$context['text'] .= Skin::build_block(i18n::s('Start'), 'title');
// the submit button
$context['text'] .= '<p class="assistant_bar">'.Skin::build_submit_button(i18n::s('Add content'), i18n::s('Press [s] to submit data'), 's').'</p>'."\n";
// end of the form
$context['text'] .= '</div></form>';
// append the script used for data checking on the browser
$context['text'] .= JS_PREFIX
.'// check that main fields are not empty'."\n"
.'func'.'tion validateDocumentPost(container) {'."\n"
."\n"
.' // title is mandatory'."\n"
.' if(!container.title.value) {'."\n"
.' alert("'.i18n::s('Please provide a meaningful title.').'");'."\n"
.' Yacs.stopWorking();'."\n"
.' return false;'."\n"
.' }'."\n"
."\n"
.' // successful check'."\n"
.' return true;'."\n"
.'}'."\n"
."\n"
.'// set the focus on first form field'."\n"
.'$("#title").focus();'."\n"
.JS_SUFFIX."\n";
// create a section
} else {
$fields = array();
$fields['anchor'] = $_REQUEST['anchor'];
$fields['title'] = $_REQUEST['title'];
$fields['introduction'] = $_REQUEST['introduction'];
$fields['description'] = $_REQUEST['description'];
$fields['articles_layout'] = 'none'; // the preferred layout for discussion boards
$fields['sections_layout'] = 'yabb'; // the preferred layout for a forum
$fields['locked'] = 'Y'; // post in discussion boards
if($fields['id'] = Sections::post($fields)) {
// create new sub-sections
for($index = 0; $index < count($_REQUEST['titles']); $index++) {
$sub_section = array();
$sub_section['anchor'] = 'section:'.$fields['id'];
$sub_section['family'] = $_REQUEST['families'][$index];
$sub_section['title'] = $_REQUEST['titles'][$index];
$sub_section['introduction'] = $_REQUEST['introductions'][$index];
$sub_section['articles_layout'] = 'yabb'; // the preferred layout for discussion boards
$sub_section['articles_templates'] = 'information_template, question_template';
$sub_section['content_options'] = 'auto_publish, with_prefix_profile'; // control is a posteriori; show poster avatar, if any
$sub_section['rank'] = ($index+1); // preserve order
if($sub_section['title'])
Sections::post($sub_section, FALSE);
}
// increment the post counter of the surfer
Users::increment_posts(Surfer::get_id());
// splash
$context['text'] .= '<p>'.i18n::s('Congratulations, you have shared new content.').'</p>';
// follow-up commands
$follow_up = i18n::s('What do you want to do now?');
$menu = array();
$menu = array_merge($menu, array(Sections::get_permalink($fields) => i18n::s('Check the new forum')));
if(Surfer::may_upload())
$menu = array_merge($menu, array('images/edit.php?anchor='.urlencode('section:'.$fields['id']) => i18n::s('Add an image')));
$menu = array_merge($menu, array('help/populate.php' => i18n::s('Launch the Content Assistant again')));
$menu = array_merge($menu, array('control/' => i18n::s('Control Panel')));
$follow_up .= Skin::build_list($menu, 'menu_bar');
$context['text'] .= Skin::build_block($follow_up, 'bottom');
}
// new content has been created
Logger::remember('help/populate.php', 'content assistant has created new content');
}
// create a directory of links
} elseif($action == 'links') {
// page title
$context['page_title'] = i18n::s('Add a directory of links');
// reuse the section 'bookmarks'
if(!$item = Sections::get('bookmarks')) {
// or create one
$item = array();
$item['nick_name'] = 'bookmarks';
$item['title'] = i18n::c('Bookmarks');
$item['introduction'] = i18n::c('Shared links of interest');
$item['description'] = i18n::c('This section, and related sub-sections, lists links submitted by authenticated persons.');
$item['sections_layout'] = 'yahoo';
$item['locked'] = 'Y';
$item['id'] = Sections::post($item);
}
// get parameters
if(!isset($_REQUEST['main_title']) || !$_REQUEST['main_title']) {
// splash
$context['text'] .= '<p>'.i18n::s('YACS lets people share bookmarks and favorites quite easily.').'</p>'
.'<p>'.i18n::s('Use this assistant to initialize the tree of sections used to classify links at your site. Of course, sections can be changed, deleted or added individually afterwards.').'</p>';
// a form to get section parameters
$context['text'] .= '<form method="post" action="'.$context['script_url'].'" onsubmit="return validateDocumentPost(this)" id="main_form"><div>'."\n"
.'<input type="hidden" name="action" value="links" />';
$fields = array();
// top category
$context['text'] .= Skin::build_block(i18n::s('Top section'), 'title');
// the title
$label = i18n::s('Section title');
$input = '<input type="text" id="main_title" name="main_title" size="50" accesskey="t" value="'.encode_field($item['title']).'" />';
$hint = i18n::s('Please provide a meaningful title.');
$fields[] = array($label, $input, $hint);
// the introduction
$label = i18n::s('Introduction');
$input = '<textarea name="main_introduction" rows="2" cols="50" accesskey="i">'.encode_field($item['introduction']).'</textarea>';
$hint = i18n::s('Appears at site map, near section title');
$fields[] = array($label, $input, $hint);
// the description