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

4
5
    require_once("config.php");
    require_once("course/lib.php");
6
7
    require_once('lib/blocklib.php');
    require_once("mod/resource/lib.php");
8
    require_once("mod/forum/lib.php");
martin's avatar
martin committed
9

10
    if (! $site = get_site()) {
moodler's avatar
moodler committed
11
        redirect("$CFG->wwwroot/$CFG->admin/index.php");
martin's avatar
martin committed
12
13
    }

14
15
16
17
    if ($CFG->forcelogin) {
        require_login();
    }

18
19
    if (isadmin()) {
        if (moodle_needs_upgrading()) {
moodler's avatar
moodler committed
20
            redirect("$CFG->wwwroot/$CFG->admin/index.php");
21
        }
22
23
24
25
    }

    if (empty($USER->id)) {
        $loginstring = "<font size=2><a href=\"$CFG->wwwroot/login/index.php\">".get_string("login")."</a></font>";
26
    } else {
27
        $loginstring = "<font size=1>".user_login_string($site)."</font>";
martin's avatar
martin committed
28
    }
29

30
31
32
33
34
    if (empty($CFG->langmenu)) {
        $langmenu = "";
    } else {
        $currlang = current_language();
        $langs = get_list_of_languages();
35
        $langmenu = popup_form ("$CFG->wwwroot/index.php?lang=", $langs, "chooselang", $currlang, "", "", "", true);
36
    }
37

moodler's avatar
moodler committed
38
    print_header(strip_tags($site->fullname), "$site->fullname", "home", "",
39
                 "<meta name=\"description\" content=\"".s(strip_tags($site->summary))."\">",
40
                 true, "", "$loginstring$langmenu");
martin's avatar
martin committed
41

42
43
44
45
46
47
    $editing = isediting($site->id);

    $courseformat = COURSE_FORMAT_SITE;

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

49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
    $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
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
    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...
                    if(block_method_result($recblock->name, 'applicable_formats') & $courseformat) {
                        // Add it to the missing blocks
                        $missingblocks[] = $recblock->id;
                    }
                }
            }
        }
moodler's avatar
moodler committed
99
    }
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
    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
    if(!isset($SESSION->blockcache->width->{$site->id}) || $editing) {
        // 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
115

116
117
118
119
120
121
122
123
124
        // 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;
    }
    else {
        $preferred_width_left = $SESSION->blockcache->width->{$site->id}->left;
        $preferred_width_right = $SESSION->blockcache->width->{$site->id}->right;
    }
moodler's avatar
moodler committed
125

martin's avatar
martin committed
126
127
?>

128

129
130
<table width="100%" border="0" cellspacing="5" cellpadding="5">
  <tr>
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
  <?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;">';
    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");
                }
                $headertext = "<table border=0 width=100% cellpadding=0 cellspacing=0 class=headingblockcontent><tr>
                               <td>$newsforum->name</td>
                               <td align=right><font size=1>
                               <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)) {
            block_print_blocks_admin($site->id, $missingblocks);
        }
        echo '</td>';
    }
?>
208

209
210
  </tr>
</table>
martin's avatar
martin committed
211

212
<?PHP print_footer('home');     // Please do not modify this line ?>
martin's avatar
martin committed
213