aboutsummaryrefslogtreecommitdiff
path: root/src/SemanticScuttle/header.php
blob: 562ae4349cc1574de56637e2636febe666e8b432 (plain)
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
<?php
/**
 * Base file that is used by shell scripts and www/www-header.php.
 *
 * SemanticScuttle - your social bookmark manager.
 *
 * PHP version 5.
 *
 * @category Bookmarking
 * @package  SemanticScuttle
 * @author   Benjamin Huynh-Kim-Bang <mensonge@users.sourceforge.net>
 * @author   Christian Weiske <cweiske@cweiske.de>
 * @author   Eric Dane <ericdane@users.sourceforge.net>
 * @license  GPL http://www.gnu.org/licenses/gpl.html
 * @link     http://sourceforge.net/projects/semanticscuttle
 */

if ('@data_dir@' == '@' . 'data_dir@') {
    //non pear-install
    $datadir = dirname(__FILE__) . '/../../data/';
    $wwwdir  = dirname(__FILE__) . '/../../www/';
} else {
    //pear installation; files are in include path
    $datadir = '@data_dir@/SemanticScuttle/';
    //FIXME: when you have multiple installations, the www_dir will be wrong
    $wwwdir  = '@www_dir@/SemanticScuttle/';
}
require_once dirname(__FILE__) . '/Environment.php';
require_once dirname(__FILE__) . '/Config.php';

$cfg = new SemanticScuttle_Config();
list($configfile, $defaultfile) = $cfg->findFiles();
if ($defaultfile === null) {
    header('HTTP/1.0 500 Internal Server Error');
    echo 'No default configuration file config.default.php found.'
        . ' This is really, really strange'
        . "\n";
    exit(1);
}
if ($configfile === null) {
    header('HTTP/1.0 500 Internal Server Error');
    echo 'Please copy "config.php.dist" to "config.php" in data/ folder.' . "\n";
    exit(1);
}
set_include_path(
    get_include_path() . PATH_SEPARATOR
    . dirname(__FILE__) . '/../'
);

// 1 // First requirements part (before debug management)
require_once $defaultfile;
require_once $configfile;

if (isset($_GET['unittestMode']) && $_GET['unittestMode'] == 1
) {
    if ($allowUnittestMode !== true) {
        header('HTTP/1.0 400 Bad Request');
        echo "Unittestmode is not allowed\n";
        exit(2);
    }

    define('HTTP_UNIT_TEST_MODE', true);
    define('UNIT_TEST_MODE', true);
}
if (defined('UNIT_TEST_MODE')) {
    //load configuration for unit tests
    $testingConfigFile = $datadir . '/config.testing.php';
    if (file_exists($testingConfigFile)) {
        require_once $testingConfigFile;
    }
    //test-specific configuration file
    $unittestConfigFile = $datadir . '/config.testing-tmp.php';
    if (file_exists($unittestConfigFile)) {
        require_once $unittestConfigFile;
    }

    //make local config vars global - needed for unit tests
    //run with phpunit
    foreach (get_defined_vars() as $var => $value) {
        $GLOBALS[$var] = $value;
    }
}

// some constants are based on variables from config file
require_once 'SemanticScuttle/constants.php';


// Debug Management using constants
if (DEBUG_MODE) {
    ini_set('display_errors', '1');
    ini_set('mysql.trace_mode', '1');
    error_reporting(E_ALL);
} else {
    ini_set('display_errors', '0');
    ini_set('mysql.trace_mode', '0');
    error_reporting(0);
}

// 2 // Second requirements part which could display bugs
// (must come after debug management)
require_once 'SemanticScuttle/Service.php';
require_once 'SemanticScuttle/DbService.php';
require_once 'SemanticScuttle/Service/Factory.php';
require_once 'SemanticScuttle/functions.php';
require_once 'SemanticScuttle/Model/Bookmark.php';
require_once 'SemanticScuttle/Model/UserArray.php';
require_once 'SemanticScuttle/Model/User/SslClientCert.php';
require_once 'SemanticScuttle/UrlHelper.php';

if (count($GLOBALS['serviceoverrides']) > 0
    && !defined('UNIT_TEST_MODE')
) {
    SemanticScuttle_Service_Factory::$serviceoverrides
        = $GLOBALS['serviceoverrides'];
}

// 3 // Third requirements part which import functions from includes/ directory

// UTF-8 functions
require_once 'SemanticScuttle/utf8.php';

// Translation
require_once 'php-gettext/gettext.inc';
$domain = 'messages';
T_setlocale(LC_MESSAGES, $locale);
T_bindtextdomain($domain, realpath($datadir . 'locales/'));
T_bind_textdomain_codeset($domain, 'UTF-8');
T_textdomain($domain);

// 4 // Session
if (isset($_SERVER['REMOTE_ADDR'])) {
    session_start();
    if ($GLOBALS['enableVoting']) {
        if (isset($_SESSION['lastUrl'])) {
            $GLOBALS['lastUrl'] = $_SESSION['lastUrl'];
        }
        //this here is hacky, but currently the only way to
        // differentiate between css/js php files and normal
        // http files
        if (!isset($GLOBALS['saveInLastUrl'])
            || $GLOBALS['saveInLastUrl']
        ) {
            $_SESSION['lastUrl'] = $_SERVER['REQUEST_URI'];
        }
    }
}

// 5 // Create mandatory services and objects
$userservice = SemanticScuttle_Service_Factory::get('User');
$currentUser = $userservice->getCurrentObjectUser();

$templateservice = SemanticScuttle_Service_Factory::get('Template');
$tplVars = array();
$tplVars['currentUser'] = $currentUser;
$tplVars['userservice'] = $userservice;

// 6 // Force UTF-8 behaviour for server (cannot be moved into top.inc.php which is not included into every file)
if (!defined('UNIT_TEST_MODE') || defined('HTTP_UNIT_TEST_MODE')) {
    //API files define that, so we need a way to support both of them
    if (!isset($httpContentType)) {
        if (DEBUG_MODE) {
            //using that mime type makes all javascript nice in Chromium
            // it also serves as test base if the pages really validate
            $httpContentType = 'application/xhtml+xml';
        } else {
            //until we are sure that all pages validate, we
            // keep the non-strict mode on for normal installations
            $httpContentType = 'text/html';
        }
    }
    if ($httpContentType !== false) {
        header('Content-Type: ' . $httpContentType . '; charset=utf-8');
    }
}
?>