8 *
9 * @global Input $INPUT
10 */
11
12 используйте dokuwiki \ ChangeLog \ PageChangeLog ;
13 использовать dokuwiki \ Extension \ Event ;
14
15 // обновить версию сообщения — всегда используйте строку, чтобы избежать локализованных плавающих чисел!
16 $updateVersion = "56";
17
18 // xdebug_start_profiling();
19
20 if (!defined('DOKU_INC')) define('DOKU_INC', __DIR__ . '/');
21
22 // здесь определяются все глобальные переменные DokuWiki (необходимы в тестовых запросах, но также помогают отслеживать)
23 global $ACT, $INPUT, $QUERY, $ID, $REV, $DATE_AT, $IDX,
24 $DATE, $RANGE, $HIGH, $TEXT, $PRE, $SUF, $SUM, $INFO, $JSINFO;
25
26
27 if (isset($_SERVER['HTTP_X_DOKUWIKI_DO'])) {
28 $ACT = trim(strtolower($_SERVER['HTTP_X_DOKUWIKI_DO']));
29 } elseif (!empty($_REQUEST['idx'])) {
30 $ACT = 'index';
31 } elseif (isset($_REQUEST['do'])) {
32 $ACT = $_REQUEST['do'];
33 } else {
34 $ACT = 'show';
35 }
36
37 // загрузка и инициализация базовой системы
38 require_once(DOKU_INC . 'inc/init.php');
39
40 //импортировать переменные
41 $INPUT->set('id', str_replace("\xC2\xAD", '', $INPUT->str('id'))); //мягкий перенос
42 $QUERY = trim($INPUT->str('q'));
43 $ID = getID();
44
45 $REV = $INPUT->int('rev');
46 $DATE_AT = $INPUT->str('at');
47 $IDX = $INPUT->str('idx');
48 $DATE = $INPUT->int('date');
49 $RANGE = $INPUT->str('range');
50 $HIGH = $INPUT->param('s');
51 if (empty($HIGH)) $HIGH = getGoogleQuery();
52
53 if ($INPUT->post->has('wikitext')) {
54 $TEXT = cleanText($INPUT->post->str('wikitext'));
55 }
56 $PRE = cleanText(substr($INPUT->post->str('prefix'), 0, -1));
57 $SUF = cleanText($INPUT->post->str('suffix'));
58 $SUM = $INPUT->post->str('summary');
59
60
61 //анализ DATE_AT
62 if ($DATE_AT) {
63 $date_parse = strtotime($DATE_AT);
64 if ($date_parse) {
65 $DATE_AT = $date_parse;
66 } else { // проверка метки времени UNIX
67 $date_parse = @date('Ymd', $DATE_AT);
68 if (!$date_parse || $date_parse === '19700101') {
69 msg(sprintf($lang['unable_to_parse_date'], hsc($DATE_AT)));
70 $DATE_AT = null;
71 }
72 }
73 }
74
75 //проверка существующих $REV, относящихся к $DATE_AT
76 if ($DATE_AT) {
77 $pagelog = new PageChangeLog($ID);
78 $rev_t = $pagelog->getLastRevisionAt($DATE_AT);
79 if ($rev_t === '') {
80 //текущая редакция
81 $REV = null;
82 $DATE_AT = null;
83 } elseif ($rev_t === false) {
84 //страница не существует
85 $rev_n = $pagelog->getRelativeRevision($DATE_AT, +1);
86 msg(
87 sprintf(
88 $lang['page_nonexist_rev'],
89 dformat($DATE_AT),
90 wl($ID, ['rev' => $rev_n]),
91 dformat($rev_n)
92 )
93 );
94 $REV = $DATE_AT; // приведет к сообщению о том, что страница не существует
95 } else {
96 $REV = $rev_t;
97 }
98 }
99
100 //сделать информацию о выбранной странице доступнойe
101 $INFO = pageinfo();
102
103 // обработка отладки
104 if ($conf['allowdebug'] && $ACT == 'debug') {
105 html_debug();
106 exit;
107 }
108
109 //отправлять 404 для отсутствующих страниц, если настроено или идентификатор имеет особое значение для ботов
110 if (
111 !$INFO['exists'] &&
112 ($conf['send404'] || preg_match('/^(robots\.txt|sitemap\.xml(\.gz)?|favicon\.ico|crossdomain\.xml)$/', $ID)) &&
113 ($ACT == 'show' || (!is_array($ACT) && str_starts_with($ACT, 'export_')))
114 ) {
115 header('HTTP/1.0 404 Not Found');
116 }
117
118 //подготовить хлебные крошки (инициализировать статическую переменную)
119 if ($conf['breadcrumbs']) breadcrumbs();
120
121 // проверка вверх по течению
122 checkUpdateMessages();
123
124 $tmp = []; // Нет данных о событии
125 Event::createAndTrigger('DOKUWIKI_STARTED', $tmp);
126
127 //закрыть сеанс
128 session_write_close();
129
130 //выполнить работу (выбирает, что делать, из глобальной среды)
131 act_dispatch();
132
133 $tmp = []; // Нет данных о событии
134 Event::createAndTrigger('DOKUWIKI_DONE', $tmp);
135
136 // xdebug_dump_function_profile(1);
137
«Подробности»
1
8*
9* @global Ввод $ ВВОД
10*/
11
12используйте dokuwiki \ ChangeLog \ PageChangeLog ;
13использовать dokuwiki \ Extension \ Event ;
14
15// обновить версию сообщения — всегда используйте строку, чтобы избежать локализованных плавающих чисел!
16$ updateVersion = "56" ;
17
18// xdebug_start_profiling();
19
20если (! определено ( 'DOKU_INC' )) определить ( 'DOKU_INC' , __DIR__ . '/' );
21
22// здесь определяются все глобальные переменные DokuWiki (необходимы в тестовых запросах, но также помогают отслеживать)
23глобальный $ ACT , $ INPUT , $ QUERY , $ ID , $ REV , $ DATE_AT , $ IDX ,
24 $ ДАТА , $ ДИАПАЗОН , $ ВЫСОКИЙ , $ ТЕКСТ , $ ПРЕД , $ СУФ , $ СУММА , $ ИНФОРМАЦИЯ , $ JSINFO ;
25
26
27если ( isset ($ _SERVER [ 'HTTP_X_DOKUWIKI_DO' ])) {
28 $ ACT = trim ( strtolower ($ _SERVER [ 'HTTP_X_DOKUWIKI_DO' ]));
29} elseif (! пусто ($ _REQUEST [ 'idx' ])) {
30 $ ACT = 'индекс' ;
31} elseif ( isset ($ _REQUEST [ 'do' ])) {
32 $ ACT = $ _REQUEST [ 'сделать' ];
33} еще {
34 $ ACT = 'показать' ;
35}
36
37// загрузка и инициализация базовой системы
38require_once ( DOKU_INC . ' inc / init.php ' );
39
40//импортировать переменные
41$ INPUT -> set ( 'id' , str_replace ( " \xC2 \xAD " , '' , $ INPUT -> str ( 'id' ))); //мягкий перенос
42$ QUERY = trim ($ INPUT -> str ( 'q' ));
43$ ID = getID ();
44
45$ REV = $ INPUT -> int ( 'rev' );
46$ ДАТА_В = $ ВХОД -> стр ( 'в' );
47$ IDX = $ INPUT -> str ( 'idx' );
48$ ДАТА = $ ВВОД -> int ( 'дата' );
49$ ДИАПАЗОН = $ ВХОД -> стр ( 'диапазон' );
50$ HIGH = $ INPUT -> param ( 's' );
51если ( пусто ($ HIGH )) $ HIGH = getGoogleQuery ();
52
53если ($ INPUT -> post -> has ( 'wikitext' )) {
54 $ TEXT = cleanText ($ INPUT -> post -> str ( 'wikitext' ));
55}
56$ PRE = cleanText ( substr ( $ INPUT -> post -> str ( 'prefix' ), 0 , -1 ));
57$ SUF = cleanText ($ INPUT -> post -> str ( 'suffix' ));
58$ SUM = $ INPUT -> post -> str ( 'summary' );
59
60
61//анализ DATE_AT
62если ($ ДАТА_В ) {
63 $ date_parse = strtotime ($ DATE_AT );
64 если ($ date_parse ) {
65 $ ДАТА_В = $ дата_парс ;
66 } else { // проверка метки времени UNIX
67 $ date_parse = @date ( ' Ymd' , $ DATE_AT );
68 если (!$ date_parse || $ date_parse === '19700101' ) {
69 msg ( sprintf ($ lang [ 'unable_to_parse_date' ], hsc ($ DATE_AT )));
70 $ ДАТА_В = ноль ;
71 }
72 }
73}
74
75//проверка существующих $REV, относящихся к $DATE_AT
76если ($ ДАТА_В ) {
77 $ pagelog = новый PageChangeLog ($ ID );
78 $ rev_t = $ pagelog -> getLastRevisionAt ($ DATE_AT );
79 если ($ rev_t === '' ) {
80 //текущая редакция
81 $ REV = null ;
82 $ ДАТА_В = ноль ;
83 } elseif ($ rev_t === false ) {
84 //страница не существует
85 $ rev_n = $ pagelog -> getRelativeRevision ($ DATE_AT , +1 );
86 сообщение (
87 спринтф (
88 $ lang [ 'page_nonexist_rev' ],
89 dformat ($ DATE_AT ),
90 wl ($ ID , [ 'rev' => $ rev_n ]),
91 dformat ($ rev_n )
92 )
93 );
94 $ REV = $ DATE_AT ; // приведет к сообщению о том, что страница не существует
95 } еще {
96 $ REV = $ rev_t ;
97 }
98}
99
100//сделать информацию о выбранной странице доступной
101$ ИНФОРМАЦИЯ = pageinfo ();
102
103// обработка отладки
104если ($ conf [ 'allowdebug' ] && $ ACT == 'debug' ) {
105 html_debug ();
106 Выход ;
107}
108
109//отправлять 404 для отсутствующих страниц, если настроено или идентификатор имеет особое значение для ботов
110если (
111 !$ ИНФОРМАЦИЯ [ 'существует' ] &&
112 ($ conf [ 'send404' ] || preg_match ( '/^(robots\.txt|sitemap\.xml(\.gz)?|favicon\.ico|crossdomain\.xml)$/' , $ ID )) &&
113 ($ ACT == 'show' || (! is_array ($ ACT ) && str_starts_with ($ ACT , 'export_' )))
114) {
115 заголовок ( 'HTTP/1.0 404 Не найдено' );
116}
117
118//подготовить хлебные крошки (инициализировать статическую переменную)
119если ($ conf [ 'хлебные крошки' ]) хлебные крошки ();
120
121// проверка вверх по течению
122checkUpdateMessages ();
123
124$ tmp = []; // Нет данных о событии
125Событие :: createAndTrigger ( 'DOKUWIKI_STARTED' , $ tmp );
126
127//закрыть сеанс
128session_write_close ();
129
130//выполнить работу (выбирает, что делать, из глобальной среды)
131act_dispatch ();
132
133$ tmp = []; // Нет данных о событии
134Событие :: createAndTrigger ( 'DOKUWIKI_DONE' , $ tmp );
135
136// xdebug_dump_function_profile(1);
137