tiki-setup.php 29.7 KB
Newer Older
1
<?php
changi67's avatar
changi67 committed
2
/**
kstingel's avatar
kstingel committed
3
 * contains the hooks for Tiki's internal functionality.
4
 *
kstingel's avatar
kstingel committed
5
 * this script may only be included, it will die if called directly.
6
 *
kstingel's avatar
kstingel committed
7
 * @package TikiWiki
8
 * @copyright (c) Copyright 2002-2016 by authors of the Tiki Wiki CMS Groupware Project. All Rights Reserved. See copyright.txt for details and a complete list of authors.
kstingel's avatar
kstingel committed
9
 * @licence Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
changi67's avatar
changi67 committed
10
 */
changi67's avatar
changi67 committed
11
// $Id$
changi67's avatar
changi67 committed
12

kstingel's avatar
kstingel committed
13
// die if called directly.
14
/**
kstingel's avatar
kstingel committed
15
 * @global array $prefs
16
 * @global array $tikilib
kstingel's avatar
kstingel committed
17
 */
sylvieg's avatar
sylvieg committed
18
global $prefs, $tikilib;
19 20
if (strpos($_SERVER['SCRIPT_NAME'], basename(__FILE__)) !== false) {
	header('location: index.php');
changi67's avatar
changi67 committed
21
	exit;
redflo's avatar
redflo committed
22
}
23
if (version_compare(PHP_VERSION, '5.6.0', '<')){
24 25 26 27
	if(php_sapi_name() != 'cli') {					// if not running a command line version of php, show requirements
		header('location: tiki-install.php');
		exit;
	}
28
	// This is command-line. No 'location' command make sense here. Let admins access what works and deal with the rest.
29
	echo "Warning: Tiki16 and above expects PHP 5.6.0 and above. You are running " . phpversion() . " at your own risk\n";
campbe13's avatar
campbe13 committed
30
}
31 32 33 34

// Be sure that the user is not already defined by PHP on hosts that still have the php.ini config "register_globals = On"
unset($user);

35
require_once 'lib/setup/third_party.php';
36 37 38
// Enable Versioning
include_once ('lib/setup/twversion.class.php');
$TWV = new TWVersion();
39 40 41 42 43
$num_queries = 0;
$elapsed_in_db = 0.0;
$server_load = '';
$area = 'tiki';
$crumbs = array();
changi67's avatar
changi67 committed
44 45
require_once ('lib/setup/tikisetup.class.php');
require_once ('lib/setup/timer.class.php');
46 47
$tiki_timer = new timer();
$tiki_timer->start();
changi67's avatar
changi67 committed
48
require_once ('tiki-setup_base.php');
49 50

// Attempt setting locales. This code is just a start, locales should be set per-user.
51
// Also, different operating systems use different locale strings. en_US.utf8 is valid on POSIX systems, maybe not on Windows, feel free to add alternative locale strings.
52
setlocale(LC_ALL, ''); // Attempt changing the locale to the system default.
53
// Since the system default may not be UTF-8 but we may be dealing with multilingual content, attempt ensuring the collations are intelligent by forcing a general UTF-8 collation.
54
// This will have no effect if the locale string is not valid or if the designated locale is not generated.
55

56
foreach (array('en_US.utf8') as $UnicodeLocale) {
57 58 59 60
	if (setlocale(LC_COLLATE, $UnicodeLocale)) {
		break;
	}
}
61

62 63 64
if ($prefs['feature_tikitests'] == 'y') {
	require_once ('tiki_tests/tikitestslib.php');
}
65
$crumbs[] = new Breadcrumb($prefs['browsertitle'], '', $prefs['tikiIndex']);
66 67 68
if ($prefs['site_closed'] == 'y') {
	require_once ('lib/setup/site_closed.php');
}
changi67's avatar
changi67 committed
69
require_once ('lib/setup/error_reporting.php');
70 71 72
if ($prefs['use_load_threshold'] == 'y') {
	require_once ('lib/setup/load_threshold.php');
}
changi67's avatar
changi67 committed
73
require_once ('lib/setup/sections.php');
74
$headerlib = TikiLib::lib('header');
75

76
$domain_map = array();
77 78 79 80 81 82 83 84 85 86
if ( isset($_SERVER['HTTP_HOST']) ) {
	$host = $_SERVER['HTTP_HOST'];
} else {
	$host = "";
}
if ( isset($_SERVER['REQUEST_URI']) ) {
	$requestUri = $_SERVER['REQUEST_URI'];
} else {
	$requestUri = "";
}
87

88 89
if ( $prefs['tiki_domain_prefix'] == 'strip' && substr($host, 0, 4) == 'www.' ) {
	$domain_map[$host] = substr($host, 4);
90
} elseif ( $prefs['tiki_domain_prefix'] == 'force' && substr($host, 0, 4) != 'www.' ) {
91 92
	$domain_map[$host] = 'www.' . $host;
}
93

94
if (strpos($prefs['tiki_domain_redirects'], ',') !== false) {
95
	foreach (explode("\n", $prefs['tiki_domain_redirects']) as $row) {
96 97
		list($old, $new) = array_map('trim', explode(',', $row, 2));
		$domain_map[$old] = $new;
98
	}
99 100
	unset($old);
	unset($new);
101 102
}

103
if ( isset($domain_map[$host]) && ! defined('TIKI_CONSOLE') ) {
104
	$prefix = $tikilib->httpPrefix();
105
	$prefix = str_replace("://$host", "://{$domain_map[$host]}", $prefix);
106
	$url = $prefix . $requestUri;
107

108
	$access->redirect($url, null, 301);
109 110 111
	exit;
}

112 113 114
if (isset($_REQUEST['PHPSESSID'])) {
	$tikilib->setSessionId($_REQUEST['PHPSESSID']);
}
changi67's avatar
changi67 committed
115
elseif (function_exists('session_id')) $tikilib->setSessionId(session_id());
116

117 118 119 120 121
// Session info needs to be kept up to date if pref login_multiple_forbidden is set
if ( $prefs['login_multiple_forbidden'] == 'y' ) {
	$tikilib->update_session();
}

122 123
require_once ('lib/setup/cookies.php');

124
if ($prefs['mobile_feature'] === 'y') {
125
	require_once ('lib/setup/mobile.php');	// needs to be before js_detect but after cookies
126 127
} else {
	$prefs['mobile_mode'] = '';
128 129
}

changi67's avatar
changi67 committed
130 131
require_once ('lib/setup/user_prefs.php');
require_once ('lib/setup/language.php');
132
require_once ('lib/setup/javascript.php');
changi67's avatar
changi67 committed
133
require_once ('lib/setup/wiki.php');
134 135 136 137 138

/* Cookie consent setup, has to be after the JS decision and wiki setup */

$cookie_consent_html = '';
if ($prefs['cookie_consent_feature'] === 'y') {
139
	if (!empty($_REQUEST['cookie_consent_checkbox']) || $prefs['site_closed'] === 'y') {
140
		// js disabled
141
		setCookieSection($prefs['cookie_consent_name'], 'y');	// set both real cookie and tiki_cookie_jar
142 143 144 145 146 147 148 149 150 151
		$feature_no_cookie = false;
		setCookieSection($prefs['cookie_consent_name'], 'y');
	}
	$cookie_consent = getCookie($prefs['cookie_consent_name']);
	if (empty($cookie_consent)) {
		if ($prefs['javascript_enabled'] !== 'y') {
			$prefs['cookie_consent_mode'] = '';
		} else {
			$headerlib->add_js('jqueryTiki.no_cookie = true; jqueryTiki.cookie_consent_alert = "' . addslashes($prefs['cookie_consent_alert']) . '";');
		}
152
		foreach ($_COOKIE as $k => $v) {
153 154 155
			if (strpos($k, session_name()) === false) {
				setcookie($k, '', time() - 3600);        // unset any previously existing cookies except the session
			}
156
		}
157 158 159 160 161 162 163
		$cookie_consent_html = $smarty->fetch('cookie_consent.tpl');
	} else {
		$feature_no_cookie = false;
	}
}
$smarty->assign('cookie_consent_html', $cookie_consent_html);

164 165 166 167 168 169
if ($prefs['feature_polls'] == 'y') {
	require_once ('lib/setup/polls.php');
}
if ($prefs['feature_mailin'] == 'y') {
	require_once ('lib/setup/mailin.php');
}
170
require_once ('lib/setup/tikiIndex.php');
171 172 173
if ($prefs['useGroupHome'] == 'y') {
	require_once ('lib/setup/default_homepage.php');
}
174
if ($prefs['user_force_avatar_upload'] === 'y') {
175 176
        require_once ('lib/setup/avatar_force_upload.php');
}
177 178 179
if ($prefs['tracker_force_fill'] == 'y') {
	require_once ('lib/setup/tracker_force_fill.php');
}
180
// change $prefs['tikiIndex'] if feature_sefurl is enabled (e.g. tiki-index.php?page=HomePage becomes HomePage)
181
if ($prefs['feature_sefurl'] == 'y' && ! defined('TIKI_CONSOLE')) {
182 183 184
	//TODO: need a better way to know which is the type of the tikiIndex URL (wiki page, blog, file gallery etc)
	//TODO: implement support for types other than wiki page and blog
	if ($prefs['tikiIndex'] == 'tiki-index.php' && $prefs['wikiHomePage']) {
lphuberdeau's avatar
lphuberdeau committed
185
		$wikilib = TikiLib::lib('wiki');
186
		$prefs['tikiIndex'] = $wikilib->sefurl($userlib->best_multilingual_page($prefs['wikiHomePage']));
187 188
	} else if (substr($prefs['tikiIndex'], 0, strlen('tiki-view_blog.php')) == 'tiki-view_blog.php') {
		include_once('tiki-sefurl.php');
189
		$prefs['tikiIndex'] = filter_out_sefurl($prefs['tikiIndex'], 'blog');
190
	}
191
}
192

changi67's avatar
changi67 committed
193 194
require_once ('lib/setup/theme.php');
if (!empty($varcheck_errors)) {
195
	$smarty->assign('msg', $varcheck_errors);
196
	$smarty->display('error_raw.tpl');
197
	die;
198
}
199 200 201 202 203 204 205 206 207
if ($prefs['feature_usermenu'] == 'y') {
	require_once ('lib/setup/usermenu.php');
}
if ($prefs['feature_live_support'] == 'y') {
	require_once ('lib/setup/live_support.php');
}
if ($prefs['feature_referer_stats'] == 'y' || $prefs['feature_stats'] == 'y') {
	require_once ('lib/setup/stats.php');
}
changi67's avatar
changi67 committed
208 209 210
require_once ('lib/setup/dynamic_variables.php');
require_once ('lib/setup/output_compression.php');
if ($prefs['feature_debug_console'] == 'y') {
211 212 213
	// Include debugger class declaration. So use loggin facility in php files become much easier :)
	include_once ('lib/debug/debugger.php');
}
214 215 216 217 218 219 220 221 222
if ($prefs['feature_integrator'] == 'y') {
	require_once ('lib/setup/integrator.php');
}
if (isset($_REQUEST['comzone'])) {
	require_once ('lib/setup/comments_zone.php');
}
if ($prefs['feature_lastup'] == 'y') {
	require_once ('lib/setup/last_update.php');
}
changi67's avatar
changi67 committed
223
if (!empty($_SESSION['interactive_translation_mode']) && ($_SESSION['interactive_translation_mode'] == 'on')) {
224
	$cachelib->empty_cache('templates_c');
225
}
226 227 228
if ($prefs['feature_freetags'] == 'y') {
	require_once ('lib/setup/freetags.php');
}
229
if ($prefs['feature_categories'] == 'y'){
230
	require_once ('lib/setup/categories.php');
231 232 233 234
	if ($prefs['feature_areas'] == 'y' &&  $prefs['categories_used_in_tpl'] == 'y') {
		$areaslib = TikiLib::lib('areas');
		$areaslib->HandleObjectCategories($objectCategoryIdsNoJail);
	}
oeversetten's avatar
 
oeversetten committed
235
}
236 237 238 239 240 241
if ($prefs['feature_userlevels'] == 'y') {
	require_once ('lib/setup/userlevels.php');
}
if ($prefs['auth_method'] == 'openid') {
	require_once ('lib/setup/openid.php');
}
changi67's avatar
changi67 committed
242
if ($prefs['feature_wysiwyg'] == 'y') {
243 244 245
	if (!isset($_SESSION['wysiwyg'])) {
		$_SESSION['wysiwyg'] = 'n';
	}
246
	$smarty->assign_by_ref('wysiwyg', $_SESSION['wysiwyg']);
247
}
248

249

250 251
if ($prefs['feature_antibot'] == 'y' && empty($user)) {
	if ($prefs['recaptcha_enabled'] === 'y') {
ameoba32's avatar
ameoba32 committed
252
		if ($prefs['recaptcha_version'] == '2') {
nkoth's avatar
nkoth committed
253 254 255 256 257
			if (!empty($prefs['language'])) {
				$headerlib->add_jsfile_cdn("$url_scheme://www.google.com/recaptcha/api.js?hl=" . $prefs['language']);
			} else {
				$headerlib->add_jsfile_cdn("$url_scheme://www.google.com/recaptcha/api.js");
			}	
ameoba32's avatar
ameoba32 committed
258 259 260
		} else {
			$headerlib->add_jsfile_cdn("$url_scheme://www.google.com/recaptcha/api/js/recaptcha_ajax.js");
		}
261
	}
262 263
	$captchalib = TikiLib::lib('captcha');
	$smarty->assign('captchalib', $captchalib);
264
}
265

266 267 268 269
if ($prefs['feature_credits'] == 'y') {
	require_once('lib/setup/credits.php');
}

270
if ( $prefs['https_external_links_for_users'] == 'y' ) {
271
	$base_url_canonical_default = $base_url_https;
272
} else {
273 274 275 276 277 278 279
	$base_url_canonical_default = $base_url_http;
}

if ( !empty($prefs['feature_canonical_domain']) ) {
	$base_url_canonical = $prefs['feature_canonical_domain'];
} else {
	$base_url_canonical = $base_url_canonical_default;
280
}
281 282 283 284
// Since it's easier to be error-resistant than train users, ensure base_url_canonical ends with '/'
if ( substr($base_url_canonical,-1) != '/' ) {
	$base_url_canonical .= '/';
}
285

286 287 288 289 290
$smarty->assign_by_ref('phpErrors', $phpErrors);
$smarty->assign_by_ref('num_queries', $num_queries);
$smarty->assign_by_ref('elapsed_in_db', $elapsed_in_db);
$smarty->assign_by_ref('crumbs', $crumbs);
$smarty->assign('lock', false);
291 292 293
$smarty->assign('edit_page', 'n');
$smarty->assign('forum_mode', 'n');
$smarty->assign('uses_tabs', 'n');
294
$smarty->assign('wiki_extras', 'n');
295 296 297 298 299 300
$smarty->assign('tikipath', $tikipath);
$smarty->assign('tikiroot', $tikiroot);
$smarty->assign('url_scheme', $url_scheme);
$smarty->assign('url_host', $url_host);
$smarty->assign('url_port', $url_port);
$smarty->assign('url_path', $url_path);
301
$smarty->assign('dir_level', $dir_level);
302 303 304 305
$smarty->assign('base_host', $base_host);
$smarty->assign('base_url', $base_url);
$smarty->assign('base_url_http', $base_url_http);
$smarty->assign('base_url_https', $base_url_https);
306
$smarty->assign('base_url_canonical', $base_url_canonical);
307
$smarty->assign('base_url_canonical_default', $base_url_canonical_default);
308 309
$smarty->assign('show_stay_in_ssl_mode', $show_stay_in_ssl_mode);
$smarty->assign('stay_in_ssl_mode', $stay_in_ssl_mode);
310 311
$smarty->assign('tiki_version', $TWV->version);
$smarty->assign('tiki_branch', $TWV->branch);
312
$smarty->assign('tiki_star', $TWV->getStar());
313
$smarty->assign('tiki_uses_svn', $TWV->svn);
314

315 316
$smarty->assign('symbols', TikiLib::symbols());

317 318 319 320
if ( isset( $_GET['msg'] ) ) {
	$smarty->assign('display_msg', $_GET['msg']);
} elseif ( isset( $_SESSION['msg'] ) ) {
	$smarty->assign('display_msg', $_SESSION['msg']);
321 322
	unset($_SESSION['msg']);
} else {
323
	$smarty->assign('display_msg', '');
324 325
}

326 327 328 329 330 331 332 333 334
if ( isset( $_GET['msgtype'] ) ) {
	$smarty->assign('display_msgtype', $_GET['msgtype']);
} elseif ( isset( $_SESSION['msgtype'] ) ) {
	$smarty->assign('display_msgtype', $_SESSION['msgtype']);
	unset($_SESSION['msgtype']);
} else {
	$smarty->assign('display_msgtype', '');
}

335 336
require_once 'lib/setup/events.php';

337
if ( $prefs['rating_advanced'] == 'y' && $prefs['rating_recalculation'] == 'randomload' ) {
lphuberdeau's avatar
lphuberdeau committed
338
	$ratinglib = TikiLib::lib('rating');
339 340 341
	$ratinglib->attempt_refresh();
}

342
$headerlib->add_jsfile('lib/tiki-js.js');
343

344
// using jquery-migrate-1.3.0.js plugin for tiki 11, still required in tiki 12 LTS to support some 3rd party plugins
345

346
if ( isset($prefs['javascript_cdn']) && $prefs['javascript_cdn'] == 'google' ) {
347 348
	$headerlib->add_jsfile_cdn("$url_scheme://ajax.googleapis.com/ajax/libs/jquery/$headerlib->jquery_version/jquery.min.js");
	// goggle is not hosting migrate so load from local
349
	$headerlib->add_jsfile_dependancy("vendor/components/jquery-migrate/jquery-migrate.min.js", true);
350
} else if ( isset($prefs['javascript_cdn']) && $prefs['javascript_cdn'] == 'jquery' ) {
351
	$headerlib->add_jsfile_cdn("$url_scheme://code.jquery.com/jquery-$headerlib->jquery_version.min.js");
352
	$headerlib->add_jsfile_cdn("$url_scheme://code.jquery.com/jquery-migrate-$headerlib->jquerymigrate_version.min.js");
353
} else {
354
	if ( isset($prefs['tiki_minify_javascript']) && $prefs['tiki_minify_javascript'] === 'y' ) {
355
		$headerlib->add_jsfile_dependancy("vendor/components/jquery/jquery.min.js", true);
356
		$headerlib->add_jsfile_dependancy("vendor/components/jquery-migrate/jquery-migrate.min.js", true);
357
	} else {
358 359
		$headerlib->add_jsfile_dependancy("vendor/components/jquery/jquery.js", true);
		$headerlib->add_jsfile_dependancy("vendor/components/jquery-migrate/jquery-migrate.js", true);
360
	}
361
}
362

363
if ( isset($prefs['fgal_elfinder_feature']) && $prefs['fgal_elfinder_feature'] === 'y' ) {
364
	$str = $prefs['tiki_minify_javascript'] === 'y' ? 'min' : 'full';
365 366
	// elfinder is sensible to js compression - problem is inside elfinder
	// see http://stackoverflow.com/questions/11174170/js-invalid-left-hand-side-expression-in-postfix-operation for more general details
367 368
	$headerlib->add_jsfile('vendor/studio-42/elfinder/js/elfinder.' . $str . '.js', true)
			->add_cssfile('vendor/studio-42/elfinder/css/elfinder.' . $str . '.css')
369 370 371 372
			->add_jsfile('lib/jquery_tiki/elfinder/tiki-elfinder.js');

	$elFinderLang = str_replace(array('cn', 'pt-br'), array('zh_CN', 'pt_BR'), $language);

373 374
	if (file_exists('vendor/studio-42/elfinder/js/i18n/elfinder.' . $elFinderLang . '.js')) {
		$headerlib->add_jsfile('vendor/studio-42/elfinder/js/i18n/elfinder.' . $elFinderLang . '.js');
375
	}
376
}
377

378
$headerlib->add_jsfile('lib/jquery_tiki/tiki-jquery.js');
379

380 381 382 383 384
if (isset($_REQUEST['geo_zoomlevel_to_found_location'])) {
	$zoomToFoundLocation = $_REQUEST['geo_zoomlevel_to_found_location'];
} else {
	$zoomToFoundLocation = isset($prefs['geo_zoomlevel_to_found_location']) ? $prefs['geo_zoomlevel_to_found_location'] : 'street';
}
385
$headerlib->add_js('var zoomToFoundLocation = "'. addslashes($zoomToFoundLocation) .'";');	// Set the zoom option after searching for a location
386

387 388 389 390 391
if ($prefs['geo_openlayers_version'] === 'ol3') {
	$headerlib->add_jsfile('lib/jquery_tiki/tiki-maps-ol3.js');
} else {
	$headerlib->add_jsfile('lib/jquery_tiki/tiki-maps.js');
}
392
$headerlib->add_jsfile('vendor/jquery/plugins/jquery-json/src/jquery.json.js');
393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414

if ($prefs['feature_jquery_zoom'] === 'y') {
	$headerlib->add_jsfile('vendor/jquery/plugins/zoom/jquery.zoom.js')
		->add_css('
.img_zoom {
	display:inline-block;
}
.img_zoom:after {
	content:"";
	display:block;
	width:33px;
	height:33px;
	position:absolute;
	top:0;
	right:0;
	background:url(vendor/jquery/plugins/zoom/icon.png);
}
.img_zoom img {
	display:block;
}
');
}
415

416 417 418
if ($prefs['feature_syntax_highlighter'] == 'y') {
	//add codemirror stuff
	$headerlib
419 420
		->add_cssfile('vendor/codemirror/codemirror/lib/codemirror.css')
		->add_jsfile_dependancy('vendor/codemirror/codemirror/lib/codemirror.js')
421
		->add_jsfile('vendor/codemirror/codemirror/addon/search/searchcursor.js')
422
		->add_jsfile('vendor/codemirror/codemirror/addon/mode/overlay.js')
423 424
	//add tiki stuff
		->add_cssfile('lib/codemirror_tiki/codemirror_tiki.css')
425
		->add_jsfile('lib/codemirror_tiki/codemirror_tiki.js');
426

427
	require_once("lib/codemirror_tiki/tiki_codemirror.php");
428
	createCodemirrorModes();
429
}
430
if ($prefs['feature_wikilingo'] == 'y') {
431 432 433 434
	$headerlib
		//flp stuff
		->add_cssfile('vendor/jquery/plugins/tablesorter/css/theme.dropbox.css')
		->add_jsfile('vendor/jquery/plugins/tablesorter/js/jquery.tablesorter.js');
435 436
}

437 438 439
if ( $prefs['feature_jquery_carousel'] == 'y' ) {
	$headerlib->add_jsfile('vendor/jquery/plugins/infinitecarousel/jquery.infinitecarousel3.js');
}
440

441
if ( $prefs['feature_ajax'] === 'y' ) {
442
	$headerlib->add_jsfile('lib/jquery_tiki/tiki-ajax_services.js');
443 444
	if ( $prefs['ajax_autosave'] === 'y' ) {
		$headerlib->add_jsfile('lib/ajax/autosave.js');
445
	}
446
}
447

448 449
// $url_scheme is 'http' or 'https' depending on request type condsidering already a reverse proxy
// $https_mode is true / false depending on request type condsidering already a reverse proxy
450 451
if ( $prefs['feature_jquery_ui'] == 'y' ) {
	if ( isset($prefs['javascript_cdn']) && $prefs['javascript_cdn'] == 'google' ) {
452
		$headerlib->add_jsfile_cdn("$url_scheme://ajax.googleapis.com/ajax/libs/jqueryui/$headerlib->jqueryui_version/jquery-ui.min.js");
453
	} else if ( isset($prefs['javascript_cdn']) && $prefs['javascript_cdn'] == 'jquery' ) {
454
		$headerlib->add_jsfile_cdn("$url_scheme://code.jquery.com/ui/$headerlib->jqueryui_version/jquery-ui.min.js");
455 456
	} else {
		if ( $prefs['tiki_minify_javascript'] === 'y' ) {
457
			$headerlib->add_jsfile_dependancy("vendor/jquery/jquery-ui/jquery-ui.min.js", true);
458
		} else {
459
			$headerlib->add_jsfile_dependancy("vendor/jquery/jquery-ui/jquery-ui.js");
460
		}
461
	}
462

463 464
	// restore jquery-ui buttons function, thanks to http://stackoverflow.com/a/23428433/2459703
	$headerlib->add_js('
465 466 467 468 469
var bootstrapButton;
if (typeof $.fn.button.noConflict === "function") {
	bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value
	$.fn.bootstrapBtn = bootstrapButton            // give $().bootstrapBtn the Bootstrap functionality
}
470 471
');

472
	if ( $prefs['feature_jquery_ui_theme'] !== 'none' ) {
473 474
		// cdn for css not working - this is the only css from a cdn anyway - so use local version 
		//if ( isset($prefs['javascript_cdn']) && $prefs['javascript_cdn'] == 'jquery' ) {			
475 476
			// $headerlib->add_cssfile("$url_scheme://code.jquery.com/ui/$headerlib->jqueryui_version/themes/{$prefs['feature_jquery_ui_theme']}/jquery-ui.css");
			$headerlib->add_cssfile('vendor/jquery/jquery-ui-themes/themes/' . $prefs['feature_jquery_ui_theme'] . '/jquery-ui.css');
477 478 479
	//	} else {
	//		$headerlib->add_cssfile('vendor/jquery/jquery-ui-themes/themes/' . $prefs['feature_jquery_ui_theme'] . '/jquery-ui.css');
	//	}
480
	}
481

482 483 484 485 486 487 488
	if ( $prefs['feature_jquery_autocomplete'] == 'y' ) {
		$headerlib->add_css(
			'.ui-autocomplete-loading { background: white url("img/spinner.gif") right center no-repeat; }'
		);
	}
	if ( $prefs['jquery_ui_chosen'] == 'y' ) {
		$headerlib->add_jsfile('vendor/jquery/plugins/chosen/chosen.jquery.js');
489
	//	$headerlib->add_cssfile('vendor/jquery/plugins/chosen/chosen.css'); Replaced by github.com/alxlit/bootstrap-chosen
490 491 492
		$headerlib->add_css(
			'select { font-size: 16px; padding: 4px; border-color:#fff; /* this forces chrome to apply the font-size */ }'
		);
493
	}
494 495 496
	$headerlib->add_jsfile('vendor/jquery/jquery-timepicker-addon/dist/jquery-ui-timepicker-addon.js');
	$headerlib->add_cssfile('vendor/jquery/jquery-timepicker-addon/dist/jquery-ui-timepicker-addon.css');
}
497 498 499 500
if ( $prefs['jquery_fitvidjs'] == 'y' ) {
	$headerlib->add_jsfile('vendor/jquery/plugins/fitvidjs/jquery.fitvids.js')
				->add_jq_onready('$("article").fitVids();');		// apply fitvid to any video in the middle section
}
501 502 503 504 505 506 507 508 509 510 511 512 513 514
if ( $prefs['feature_jquery_superfish'] == 'y' ) {
	$headerlib->add_jsfile('vendor/jquery/plugins/superfish/dist/js/superfish.js');
	$headerlib->add_jsfile('vendor/jquery/plugins/superfish/dist/js/supersubs.js');
}
if ( $prefs['feature_jquery_tooltips'] === 'y' || $prefs['feature_jquery_superfish'] === 'y' ) {
	$headerlib->add_jsfile('vendor/jquery/plugins/superfish/dist/js/hoverIntent.js');
}
if ( $prefs['feature_jquery_reflection'] == 'y' ) {
	$headerlib->add_jsfile('vendor/jquery/plugins/reflection-jquery/js/reflection.js');
}
if ( $prefs['feature_jquery_media'] == 'y' ) {
	$headerlib->add_jsfile('vendor/jquery/plugins/media/jquery.media.js');
}
if ( $prefs['feature_jquery_tablesorter'] == 'y' ) {
515
	$headerlib->add_jsfile('vendor/jquery/plugins/tablesorter/js/jquery.tablesorter.combined.js');
516
	$headerlib->add_jsfile('vendor/jquery/plugins/tablesorter/js/widgets/widget-pager.js');
517 518
	$headerlib->add_jsfile('vendor/jquery/plugins/tablesorter/js/widgets/widget-filter-formatter-jui.js');
	$headerlib->add_jsfile('vendor/jquery/plugins/tablesorter/js/widgets/widget-grouping.js');
519
	$headerlib->add_jsfile('vendor/jquery/plugins/tablesorter/js/widgets/widget-columnSelector.js');
520
	$headerlib->add_jsfile('vendor/jquery/plugins/tablesorter/js/parsers/parser-input-select.js');
521
	$headerlib->add_jsfile('vendor/jquery/plugins/tablesorter/js/widgets/widget-math.js');
522
	$headerlib->add_jsfile('lib/jquery_tiki/tablesorter.js');
523
}
gezzzan's avatar
gezzzan committed
524 525 526 527 528

if ( $prefs['feature_jquery_tagcanvas'] == 'y' ) {
	$headerlib->add_jsfile('vendor/jquery/plugins/tagcanvas/jquery.tagcanvas.js');
}

529 530 531 532
if ( $prefs['feature_shadowbox'] == 'y' ) {
	$headerlib->add_jsfile('vendor/jquery/plugins/colorbox/jquery.colorbox.js');
	$headerlib->add_cssfile('vendor/jquery/plugins/colorbox/' . $prefs['jquery_colorbox_theme'] . '/colorbox.css');
}
533

534 535 536
if ( $prefs['wikiplugin_flash'] == 'y' ) {
	$headerlib->add_jsfile('lib/swfobject/swfobject.js');
}
537 538 539 540 541 542 543
if ($prefs['jquery_timeago'] === 'y') {
	$headerlib->add_jsfile('vendor/jquery/plugins/timeago/jquery.timeago.js');
	$language_short = substr($prefs['language'], 0, 2);
	$timeago_locale = "vendor/jquery/plugins/timeago/locales/jquery.timeago.{$language_short}.js";
	if (is_readable($timeago_locale)) {
		$headerlib->add_jsfile($timeago_locale);	// TODO handle zh-CN and zh-TW
	}
544
	$headerlib->add_jq_onready('$("time.timeago").timeago(); jQuery.timeago.settings.allowFuture = true;');
545
}
546 547

if ( $prefs['feature_jquery_validation'] == 'y' ) {
548
	$headerlib->add_jsfile('vendor/jquery/plugins/jquery-validation/dist/jquery.validate.js');
549
	$headerlib->add_jsfile('lib/validators/validator_tiki.js');
550 551
}

552 553
// note: jquery.async.js load a copy of jquery
$headerlib->add_jsfile('vendor/jquery/plugins/async/jquery.async.js');
554 555
$headerlib->add_jsfile('vendor/jquery/plugins/treetable/jquery.treetable.js');
$headerlib->add_cssfile('vendor/jquery/plugins/treetable/css/jquery.treetable.css');
556

557 558
$headerlib->add_jsfile('vendor/cwspear/bootstrap-hover-dropdown/bootstrap-hover-dropdown.js');

559 560 561 562
if ($prefs['feature_equal_height_rows_js'] == 'y'){
	$headerlib->add_jsfile("vendor/Sam152/Javascript-Equal-Height-Responsive-Rows/grids.min.js");
}

563
if (empty($user) && $prefs['feature_antibot'] == 'y') {
564
	$headerlib->add_jsfile_late('lib/captcha/captchalib.js');
565 566 567 568 569
}

if ( $prefs['feature_jcapture'] === 'y' ) {
	$headerlib->add_jsfile('lib/jcapture_tiki/tiki-jcapture.js');
}
570

571
if ( ! empty( $prefs['header_custom_css'] ) ) {
572
	$headerlib->add_css($prefs['header_custom_css']);
573 574
}

575
if ( ! empty( $prefs['header_custom_js'] ) ) {
576
	$headerlib->add_js($prefs['header_custom_js']);
577 578
}

579 580 581 582
if ($prefs['feature_file_galleries'] == 'y') {
	$headerlib->add_jsfile('lib/jquery_tiki/files.js');
}

583 584
if ($prefs['feature_trackers'] == 'y') {
	$headerlib->add_jsfile('lib/jquery_tiki/tiki-trackers.js');
585 586 587

	if ($prefs['feed_tracker'] === 'y') {
		$opts = TikiLib::lib('trk')->get_trackers_options(null, 'publishRSS', 'y');
588
		foreach ($opts as & $o) {
589 590 591 592 593
			$o = $o['trackerId'];
		}
		$trackers = TikiLib::lib('trk')->list_trackers();

		$rss_trackers = array();
594
		foreach ($trackers['data'] as $trk) {
595 596 597 598 599 600 601 602 603 604
			if (in_array($trk['trackerId'], $opts)) {
				$rss_trackers[] = array(
					'trackerId' => $trk['trackerId'],
					'name' => $trk['name'],
				);
			}
		}
		TikiLib::lib('smarty')->assign('rsslist_trackers', $rss_trackers);
	}

605 606
}

607
if ($prefs['feature_draw'] == 'y') {
608 609
	//svg-edit/empbedapi.js neededs to be external - why?
	$headerlib->add_jsfile("vendor/svg-edit/svg-edit/embedapi.js");
610 611 612 613
	$headerlib->add_jsfile("lib/svg-edit_tiki/draw.js");
	$headerlib->add_cssfile("lib/svg-edit_tiki/draw.css");
}

614 615 616 617
if ($prefs['geo_always_load_openlayers'] == 'y') {
	$headerlib->add_map();
}

618 619 620 621
if ($prefs['workspace_ui'] == 'y') {
	$headerlib->add_jsfile('lib/jquery_tiki/tiki-workspace-ui.js');
}

622
if ($prefs['feature_sefurl'] != 'y') {
623
	$headerlib->add_js(
624
		'$.service = function (controller, action, query) {
625 626 627 628 629
		if (! query) {
			query = {};
		}
		query.controller = controller;

630
		if (action) {
631
			query.action = action;
632
		}
633

634
		return "tiki-ajax_services.php?" + $.buildParams(query);
635
	};'
636
	);
637 638
}

639
if ($prefs['feature_friends'] == 'y' || $prefs['monitor_enabled'] == 'y') {
640 641 642
	$headerlib->add_jsfile('lib/jquery_tiki/social.js');
}

643 644 645 646
if ($prefs['ajax_inline_edit'] == 'y') {
	$headerlib->add_jsfile('lib/jquery_tiki/inline_edit.js');
}

647 648 649 650
if ($prefs['mustread_enabled'] == 'y') {
	$headerlib->add_jsfile('lib/jquery_tiki/mustread.js');
}

651 652 653
if (true) {
	// Before being clever and moving this close to where you think it's needed (again),
	// consider there are more places that you think.
654 655 656
	
	// This is not a very helpful comment...
	$headerlib->add_jsfile_dynamic('tiki-jsplugin.php?language='.$prefs['language']);
657
	if ($prefs['wikiplugin_module'] === 'y' && $prefs['wikiplugininline_module'] === 'n') {
658
		$headerlib->add_jsfile_dynamic('tiki-jsmodule.php?language='.$prefs['language']);
659 660 661
	}
}

662 663
if ( session_id() ) {
	if ( $prefs['tiki_cachecontrol_session'] ) {
664
		header('Cache-Control: ' . $prefs['tiki_cachecontrol_session']);
665 666
	}
} else {
667
	if ( $prefs['tiki_cachecontrol_nosession'] ) {
668
		header('Cache-Control: ' . $prefs['tiki_cachecontrol_nosession']);
669 670
	}
}
671

672 673 674 675 676 677 678 679
if ( !empty($prefs['access_control_allow_origin']) && !empty($_SERVER['HTTP_ORIGIN']) && $base_host !== $_SERVER['HTTP_ORIGIN']) {
	$http_origin = $_SERVER['HTTP_ORIGIN'];

	if (in_array($http_origin, preg_split('/[\s,]+/', $prefs['access_control_allow_origin']))) {
	    header("Access-Control-Allow-Origin: $http_origin");
	}
}

680 681 682 683 684 685
if ( isset($token_error) ) {
	$smarty->assign('token_error', $token_error);
	$smarty->display('error.tpl');
	die;
}

686 687
require_once( 'lib/setup/plugins_actions.php' );

688
if ($tiki_p_admin == 'y') {
689
	$headerlib->add_jsfile_late('lib/jquery_tiki/tiki-admin.js');
690 691
}

692 693 694 695
if ($prefs['wikiplugin_addtocart'] == 'y') {
	$headerlib->add_jsfile('lib/payment/cartlib.js');
}

696
//////////////////////////////////////////////////////////////////////////
kstingel's avatar
kstingel committed
697 698 699 700 701 702 703 704 705 706 707
// ******************************************************************** //
// ** IMPORTANT NOTE:                                                ** //
// ** USE THE GLOBAL VARIABLE BELOW TO CONTROL THE VERSION OF EMAIL  ** //
// ** WHICH IS USED                                                  ** //
// **   $prefs['openpgp_gpg_pgpmimemail'] == 'y'                     ** //
// **       USE TIKI OpenPGP Enabled PGP/MIME-standard mail          ** //
// **   $prefs['openpgp_gpg_pgpmimemail'] == 'n'                     ** //
// **       USE TIKI normal mail functionality                       ** //
// **                                                                ** //
// ** SETTING THIS PREFERENCES VARIABLE TO "y" NEED PROPER           ** //
// ** CONFIGURATION OF gnupg AND RELATED KEYRING WITH PROPERLY       ** //
708
// ** CONFIGURED TIKI-SENDER KEYPAIR (PRIVATE/PUBLIC) AND ALL USER   ** //
kstingel's avatar
kstingel committed
709 710 711
// ** ACCOUNT-RELATED PUBLIC KEYS                                    ** //
// **                                                                ** //
// ** DO NOT SWITCH THIS VARIABLE TO TRUE FOR THIS EXPERIMENTAL      ** //
712
// ** FULLY PGP/MIME-ENCRYPTION COMPLIANT EMAIL FUNCTIONALITY, IF    ** //
kstingel's avatar
kstingel committed
713 714 715
// ** YOU ARE **NOT ABSOLUTE SURE HOW TO CONFIGURE IT**!             ** //
// **                                                                ** //
// ** ONCE PROPERLY CONFIGURED, SUCH 100% OPAQUE FUNCTIONALITY       ** //
716
// ** DELIVERS ROBUST END-TO-END PRIVACY WITH HIGH DEGREE OF TESTED  ** //
kstingel's avatar
kstingel committed
717 718 719 720 721 722
// ** ROBUSTNESS FOR THE FOLLOWING MAIL TRAFFIC:                     ** //
// **                                                                ** //
// **   - all webmail-based messaging from messu-compose.php         ** //
// **   - all admin notifications                                    ** //
// **   - all newsletters                                            ** //
// **                                                                ** //
723 724 725 726
// ** PLEASE NOTE THAT ALL SITE ACCOUNTS **MUST** HAVE PROPERLY	     ** //
// ** CONFIGURED OpenPGP-COMPLIANT PUBLIC-KEY IN THE SYSTEM's	     ** //
// ** KEYRING, SO IT IS NOT THEN WISE/POSSIBLE TO ALLOW ANONYMOUS    ** //
// ** SUBSCRIPTIONS TO NEWSLETTERS ETC, OR USE NOT FULLY PGP/MIME    ** //
kstingel's avatar
kstingel committed
727 728 729 730 731
// ** READY ACCOUNTS IN SUCH SYSTEM.                                 ** //
// **                                                                ** //
// ** IT IS ASSUMED, THAT IF AND WHEN YOU TURN SUCH PGP/MIME ON      ** //
// ** YOU ARE FULLY AWARE OF THE REQUIREMENTS AND CONSEQUENCES.      ** //
// **                                                                ** //
732
if ($prefs['openpgp_gpg_pgpmimemail'] == 'y') {
733 734 735 736
	// hollmeer 2012-11-03:
	// TURNED ON openPGP support from a lib based class
	require_once( 'lib/openpgp/openpgplib.php' );
}
kstingel's avatar
kstingel committed
737 738
// **                                                                ** //
// ******************************************************************** //
739 740
//////////////////////////////////////////////////////////////////////////

741
if( $prefs['feature_hidden_links'] == 'y' && isset($jitRequest['wysiwyg']) && $jitRequest['wysiwyg'] != 'y') {
742 743 744 745 746 747
	$headerlib->add_js("$('body').find('h1, h2, h3, h4, h5, h6').each(function() {
	var headerid = $(this).attr('id');
		if(headerid != undefined) {
			$(this).append('<a class=\"tiki_anchor\" href=\"#'+headerid+'\"></a>');
		}
	});");
748 749
}

750 751 752
// any furher $headerlib->add_js() call not using rank = 'external' will be put into rank 'late'
// this should separate the overall JS from page specific JS
$headerlib->forceJsRankLate();
753 754

if ( $prefs['conditions_enabled'] == 'y' ) {
755 756 757 758 759 760
	if (! Services_User_ConditionsController::hasRequiredAge($user)) {
		$servicelib = TikiLib::lib('service');
		$broker = $servicelib->getBroker();
		$broker->process('user_conditions', 'age_validation', $jitRequest);
		exit;
	}
761 762 763 764 765 766 767
	if (Services_User_ConditionsController::requiresApproval($user)) {
		$servicelib = TikiLib::lib('service');
		$broker = $servicelib->getBroker();
		$broker->process('user_conditions', 'approval', $jitRequest);
		exit;
	}
}