/**
     * Display the request new status page to administrator for new users.
     */
    public function request_status()
    {
        /*
         * That may happen if a user visit that url again.
         */
        if (!Shibboleth::session()->is_logged_in()) {
            Shibboleth::redirect();
        }
        $user = Shibboleth::session()->user();
        if ($user['status'] == Shibboleth::TEACHER_STATUS) {
            //Maximum user right is reached.
            Shibboleth::redirect();
        }
        $form = ShibbolethStatusRequestForm::instance();
        if ($form->cancelled()) {
            Shibboleth::redirect();
        }
        if ($reason = $form->get_reason()) {
            $subject = get_lang('request_status');
            $status = $form->get_status();
            $status = Shibboleth::format_status($status);
            $message = <<<EOT
New status: {$status}

Reason:
{$reason}
EOT;
            $success = Shibboleth::email_admin($subject, $message);
            if ($success) {
                $request_submitted = get_lang('request_submitted');
                Shibboleth::display()->message_page($request_submitted);
            } else {
                $request_failed = get_lang('request_failed');
                Shibboleth::display()->error_page($request_failed);
            }
        }
        $title = get_lang('request_status');
        Display::display_header($title);
        echo $form->display();
        Display::display_footer();
    }
    function display()
    {
        if ($this->is_submitted() && $this->get_reason() == '') {
            $reason_is_mandatory = get_lang('ReasonIsMandatory');
            Display::display_error_message($reason_is_mandatory);
        }
        $status_request_message = get_lang('StatusRequestMessage');
        $label_new_status = get_lang('NewStatus');
        $label_reason = get_lang('Reason');
        $label_ok = get_lang('Ok');
        $label_cancel = get_lang('Cancel');
        $user = Shibboleth::session()->user();
        $items = array();
        if ($user['status'] == Shibboleth::UNKNOWN_STATUS) {
            $items[Shibboleth::STUDENT_STATUS] = get_lang('Student');
        }
        $items[Shibboleth::TEACHER_STATUS] = get_lang('Teacher');
        $status_options = '';
        foreach ($items as $key => $value) {
            $status_options .= "<option value=\"{$key}\">{$value}</option>";
        }
        return <<<EOT
            <div id="askAccountText">
                <p>{$status_request_message}</p>
            </div>
            <form method="post" action="request.php" id="status_request_form">
    
                <input type="hidden" name="formPosted" value="true"/>
    
            <label for="status">{$label_new_status}:</label>
            <select name="status">
                    {$status_options}
            </select>
            <label for="reason">{$label_reason}:</label>
            <textarea name="reason" style="min-width:400px; min-height:100px;"></textarea>
            <p><input name="submit" type="submit" value="{$label_ok}" style="margin-right:10px;"/><input name="cancel" type="submit" value="{$label_cancel}" /></p>
            </form>
EOT;
    }
    /**
     * Sends an email to the Chamilo and Shibboleth administrators in the name
     * of the logged-in user.
     *
     */
    public static function email_admin($subject, $message)
    {
        $user = Shibboleth::session()->user();
        $firstname = $user['firstname'];
        $lastname = $user['lastname'];
        $email = $user['email'];
        $status = $user['status'];
        $status = self::format_status($status);
        $signagure = <<<EOT

_________________________ 
{$firstname} {$lastname} 
{$email} 
{$status}
EOT;
        $message .= $signagure;
        $header = "From: {$email} \n";
        $shibb_admin_email = Shibboleth::config()->admnistrator_email;
        if ($shibb_admin_email) {
            $header .= "Cc: {$shibb_admin_email}";
        }
        $administrator_email = get_setting('emailAdministrator');
        $result = mail($administrator_email, $subject, $message);
        return (bool) $result;
    }