index.php 10.7 KB
Newer Older
moodler's avatar
moodler committed
1
2
<?PHP  // $Id$
       // index.php - the front page.
3

4
5
6
7
8
9
    if (!file_exists('./config.php')) {
        header('Location: install.php');
        die;
    }

/// Bounds for block widths on this page
defacer's avatar
defacer committed
10
11
12
13
14
    define('BLOCK_L_MIN_WIDTH', 160);
    define('BLOCK_L_MAX_WIDTH', 210);
    define('BLOCK_R_MIN_WIDTH', 160);
    define('BLOCK_R_MAX_WIDTH', 210);

15
    require_once('config.php');
moodler's avatar
moodler committed
16
17
18
19
    require_once($CFG->dirroot.'/course/lib.php');
    require_once($CFG->dirroot.'/lib/blocklib.php');
    require_once($CFG->dirroot.'/mod/resource/lib.php');
    require_once($CFG->dirroot.'/mod/forum/lib.php');
martin's avatar
martin committed
20

21
    if (! $site = get_site()) {
moodler's avatar
moodler committed
22
        redirect("$CFG->wwwroot/$CFG->admin/index.php");
martin's avatar
martin committed
23
24
    }

25
26
27
28
    if ($CFG->forcelogin) {
        require_login();
    }

29
30
    if (isadmin()) {
        if (moodle_needs_upgrading()) {
moodler's avatar
moodler committed
31
            redirect("$CFG->wwwroot/$CFG->admin/index.php");
32
        }
33
34
35
    }

    if (empty($USER->id)) {
36
37
38
39
40
        if (empty($CFG->loginhttps)) {
            $wwwroot = $CFG->wwwroot;
        } else {
            $wwwroot = str_replace('http','https',$CFG->wwwroot);
        }
gustav_delius's avatar
gustav_delius committed
41
        $loginstring = "<font size=\"2\"><a href=\"$wwwroot/login/index.php\">".get_string("login")."</a></font>";
42
    } else {
gustav_delius's avatar
gustav_delius committed
43
        $loginstring = "<font size=\"1\">".user_login_string($site)."</font>";
martin's avatar
martin committed
44
    }
45

46
47
48
49
50
    if (empty($CFG->langmenu)) {
        $langmenu = "";
    } else {
        $currlang = current_language();
        $langs = get_list_of_languages();
51
        $langmenu = popup_form ("$CFG->wwwroot/index.php?lang=", $langs, "chooselang", $currlang, "", "", "", true);
52
    }
53

moodler's avatar
moodler committed
54
    print_header(strip_tags($site->fullname), "$site->fullname", "home", "",
gustav_delius's avatar
gustav_delius committed
55
                 "<meta name=\"description\" content=\"".s(strip_tags($site->summary))."\" />",
56
                 true, "", "$loginstring$langmenu");
martin's avatar
martin committed
57

58
59
60
61
    $editing = isediting($site->id);

    // Doing this now so we can pass the results to block_action()
    // and dodge the overhead of doing the same work twice.
62

63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
    $blocks = $site->blockinfo;
    $delimpos = strpos($blocks, ':');

    if($delimpos === false) {
        // No ':' found, we have all left blocks
        $leftblocks = explode(',', $blocks);
        $rightblocks = array();
    }
    else if($delimpos === 0) {
        // ':' at start of string, we have all right blocks
        $blocks = substr($blocks, 1);
        $leftblocks = array();
        $rightblocks = explode(',', $blocks);
    }
    else {
        // Both left and right blocks
        $leftpart = substr($blocks, 0, $delimpos);
        $rightpart = substr($blocks, $delimpos + 1);
        $leftblocks = explode(',', $leftpart);
        $rightblocks = explode(',', $rightpart);
moodler's avatar
moodler committed
83
84
    }

85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
    if($editing) {
        if (isset($_GET['blockaction'])) {
            if (isset($_GET['blockid'])) {
                block_action($site, $leftblocks, $rightblocks, strtolower($_GET['blockaction']), intval($_GET['blockid']));
            }
        }

        // This has to happen after block_action() has possibly updated the two arrays
        $allblocks = array_merge($leftblocks, $rightblocks);

        $missingblocks = array();
        $recblocks = get_records('blocks','visible','1');

        // Note down which blocks are going to get displayed
        blocks_used($allblocks, $recblocks);

        if($editing && $recblocks) {
            foreach($recblocks as $recblock) {
                // If it's not hidden or displayed right now...
                if(!in_array($recblock->id, $allblocks) && !in_array(-($recblock->id), $allblocks)) {
                    // And if it's applicable for display in this format...
defacer's avatar
defacer committed
106
107
108
109
110
111
112
                    $formats = block_method_result($recblock->name, 'applicable_formats');

                    if( isset($formats['site']) ? $formats['site'] : !empty($formats['all'])) {
                        // Translation: if the 'site' format is explicitly accepted/rejected, use
                        // that setting. Otherwise, fallback to the 'all' format. The empty() test
                        // uses the trick that empty() fails if 'all' is either !isset() or false.

113
114
115
116
117
118
                        // Add it to the missing blocks
                        $missingblocks[] = $recblock->id;
                    }
                }
            }
        }
moodler's avatar
moodler committed
119
    }
120
121
122
123
124
125
126
127
    else {
        // Note down which blocks are going to get displayed
        $allblocks = array_merge($leftblocks, $rightblocks);
        $recblocks = get_records('blocks','visible','1');
        blocks_used($allblocks, $recblocks);
    }

    // If the block width cache is not set, set it
moodler's avatar
moodler committed
128
129
    if(!isset($SESSION) or !isset($SESSION->blockcache) or 
        !isset($SESSION->blockcache->width->{$site->id}) or $editing) {
130
131
132
133
134
135
        // This query might be optimized away if we 're in editing mode
        if(!isset($recblocks)) {
            $recblocks = get_records('blocks','visible','1');
        }
        $preferred_width_left = blocks_preferred_width($leftblocks, $recblocks);
        $preferred_width_right = blocks_preferred_width($rightblocks, $recblocks);
moodler's avatar
moodler committed
136

137
138
139
140
        // This may be kind of organizational overkill, granted...
        // But is there any real need to simplify the structure?
        $SESSION->blockcache->width->{$site->id}->left = $preferred_width_left;
        $SESSION->blockcache->width->{$site->id}->right = $preferred_width_right;
moodler's avatar
moodler committed
141
    } else {
142
143
144
        $preferred_width_left = $SESSION->blockcache->width->{$site->id}->left;
        $preferred_width_right = $SESSION->blockcache->width->{$site->id}->right;
    }
moodler's avatar
moodler committed
145

defacer's avatar
defacer committed
146
147
148
149
150
    $preferred_width_left = min($preferred_width_left, BLOCK_L_MAX_WIDTH);
    $preferred_width_left = max($preferred_width_left, BLOCK_L_MIN_WIDTH);
    $preferred_width_right = min($preferred_width_right, BLOCK_R_MAX_WIDTH);
    $preferred_width_right = max($preferred_width_right, BLOCK_R_MIN_WIDTH);

martin's avatar
martin committed
151
152
?>

153

154
155
<table width="100%" border="0" cellspacing="5" cellpadding="5">
  <tr>
156
157
158
159
160
161
162
163
164
  <?PHP

    if(block_have_active($leftblocks) || $editing) {
        echo '<td style="vertical-align: top; width: '.$preferred_width_left.'px;">';
        print_course_blocks($site, $leftblocks, BLOCK_LEFT);
        echo '</td>';
    }

    echo '<td style="vertical-align: top;">';
165
166
167
168
    
    
/// Print Section
    if ($site->numsections > 0) {
moodler's avatar
moodler committed
169
        print_simple_box_start('center', '100%', $THEME->cellcontent, 5, 'sitetopic');
170
171
172
173
    
        /// If currently moving a file then show the current clipboard
        if (ismoving($site->id)) {
            $stractivityclipboard = strip_tags(get_string("activityclipboard", "", addslashes($USER->activitycopyname)));
gustav_delius's avatar
gustav_delius committed
174
            echo "<p><font size=\"2\">";
moodler's avatar
moodler committed
175
            echo "$stractivityclipboard&nbsp;&nbsp;(<a href=\"course/mod.php?cancelcopy=true\">".get_string("cancel")."</a>)";
176
177
178
179
            echo "</font></p>";
        }


moodler's avatar
moodler committed
180
181
182
183
184
185
186
187
        if (!$section = get_record('course_sections', 'course', $site->id, 'section', 1)) {
            delete_records('course_sections', 'course', $site->id, 'section', 1); // Just in case
            $section->course = $site->id;
            $section->section = 1;
            $section->summary = '';
            $section->visible = 1;
            $section->id = insert_record('course_sections', $section);
        }
188

moodler's avatar
moodler committed
189
        echo format_text($section->summary, FORMAT_HTML);
190
191

        if ($editing) {
moodler's avatar
moodler committed
192
            $streditsummary = get_string('editsummary');
193
            echo "<a title=\"$streditsummary\" ".
moodler's avatar
moodler committed
194
                 " href=\"course/editsection.php?id=$section->id\"><img src=\"$CFG->pixpath/t/edit.gif\" ".
195
                 " height=\"11\" width=\"11\" border=\"0\" alt=\"$streditsummary\" /></a><br /><br />";
196
197
        }

moodler's avatar
moodler committed
198
199
        get_all_mods($site->id, $mods, $modnames, $modnamesplural, $modnamesused);
        print_section($site, $section, $mods, $modnamesused, true);
200
201

        if ($editing) {
202
            print_section_add_menus($site, $section->section, $modnames);
203
        }
moodler's avatar
moodler committed
204
205
        print_simple_box_end();
        print_spacer(10);
206
207
    }

208
209
210
211
212
213
214
215
216
217
218
219
220
    switch ($CFG->frontpage) {     /// Display the main part of the front page.
        case FRONTPAGENEWS:
            if (! $newsforum = forum_get_course_forum($site->id, "news")) {
                error("Could not find or create a main news forum for the site");
            }

            if (isset($USER->id)) {
                $SESSION->fromdiscussion = "$CFG->wwwroot";
                if (forum_is_subscribed($USER->id, $newsforum->id)) {
                    $subtext = get_string("unsubscribe", "forum");
                } else {
                    $subtext = get_string("subscribe", "forum");
                }
gustav_delius's avatar
gustav_delius committed
221
                $headertext = "<table border=\"0\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" class=\"headingblockcontent\"><tr>
222
                               <td>$newsforum->name</td>
gustav_delius's avatar
gustav_delius committed
223
                               <td align=\"right\"><font size=\"1\">
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
                               <a href=\"mod/forum/subscribe.php?id=$newsforum->id\">$subtext</a>
                               </td></tr></table>";
            } else {
                $headertext = $newsforum->name;
            }
            print_heading_block($headertext);
            print_spacer(8,1);
            forum_print_latest_discussions($newsforum->id, $site->newsitems);
        break;

        case FRONTPAGECOURSELIST:
        case FRONTPAGECATEGORYNAMES:
            if (isset($USER->id) and !isset($USER->admin)) {
                print_heading_block(get_string("mycourses"));
                print_spacer(8,1);
                print_my_moodle();
            } else {
                if (count_records("course_categories") > 1) {
                    if ($CFG->frontpage == FRONTPAGECOURSELIST) {
                        print_heading_block(get_string("availablecourses"));
                    } else {
                        print_heading_block(get_string("categories"));
                    }
                    print_spacer(8,1);
                    print_simple_box_start("center", "100%");
                    print_whole_category_list();
                    print_simple_box_end();
                    print_course_search("", false, "short");
                } else {
                    print_heading_block(get_string("availablecourses"));
                    print_spacer(8,1);
                    print_courses(0, "100%");
                }
            }
        break;

    }

    echo '</td>';
    if(block_have_active($rightblocks) || $editing || isadmin()) {
        echo '<td style="vertical-align: top; width: '.$preferred_width_right.'px;">';
        if (isadmin()) {
            echo '<div align="center">'.update_course_icon($site->id).'</div>';
            echo '<br />';
        }
        print_course_blocks($site, $rightblocks, BLOCK_RIGHT);
        if ($editing && !empty($missingblocks)) {
271
            block_print_blocks_admin($site, $missingblocks);
272
273
274
275
        }
        echo '</td>';
    }
?>
276

277
278
  </tr>
</table>
martin's avatar
martin committed
279

280
<?PHP print_footer('home');     // Please do not modify this line ?>