websiteWebsite
codingteam CodingTeam
A free forge, lightweight and extensible.

 

Browse the code

Differences between 147 and 148 on /trunk/inc.
Number of edited files: 53 (19 added, 17 deleted and 17 modified)
Author: xbright
Log message: * Added a draft for notification (via mail or jabber)
* Moved all modules classes to a models/ directory
* Added fortune in jabber module
Date: 2008-05-11 23:14:10

Added file(s) Deleted file(s) Modified file(s)

 

Old New Code
55 55
        // Import configuration
56 56
        $xml = simplexml_load_file($basedir.'/inc/codingteam.cfg');
57 57
        $this->db_type = $xml->db->type;
58  
        $this->db_path = $xml->db->path;
59 58
        $this->db_hostname = $xml->db->hostname;
60 59
        $this->db_database = $xml->db->database;
61 60
        $this->db_username = $xml->db->username;
149 148

                                        
150 149
        // Class: Database layer
151 150
        require($basedir.'/inc/classes/db.php');
152  
        $ct_db = new Database($this->db_type, $this->db_path, $this->db_hostname, $this->db_database, 
153  
                              $this->db_username, $this->db_password, $error);
  151
        $ct_db = new Database($this->db_type, $this->db_hostname, $this->db_database, $this->db_username,
  152
                              $this->db_password, $error);
154 153

                                        
155 154
        // Class: Session
156 155
        require($basedir.'/inc/classes/session.php');
157 156

                                        

 

Old New Code
32 32
 */
33 33
class Database
34 34
{
35  
    private $type, $path, $hostname, $database, $username, $password, $error;
  35
    private $type, $hostname, $database, $username, $password, $error;
36 36

                                        
37  
    function __construct($type, $path, $hostname, $database, $username, $password, $error)
  37
    function __construct($type, $hostname, $database, $username, $password, $error)
38 38
    {
39 39
        $this->error = $error;
40 40

                                        
41 41

                                        

 

Old New Code
384 384

                                        
385 385
        // If a > 0 the page cannot be stored in the cache
386 386
        $a = 0;
387  
        $nocache_keywords = array('register', 'logout', 'deleteadmin', 'password', 'delete', 'admin', 'new', 'add', 'edit', 'answer', 'search', 'join');
  387
        $nocache_keywords = array('register', 'logout', 'deleteadmin', 'password', 'delete', 'admin', 'new', 'add', 'edit', 'answer', 'search', 'join', 'vote');
388 388
        foreach ($nocache_keywords as $key)
389 389
            if (in_array($key, $this->page))
390 390
                $a ++;
391 391

                                        

 

Old New Code
50 50
        return count($this->db->select('users', FALSE));
51 51
    }
52 52

                                        
  53

                                    
  54
    /**
  55
     * Add an user
  56
     *
  57
     * @param $nickname
  58
     *   Nickname of the user.
  59
     * @param $password
  60
     *   Password of the user.
  61
     * @param $surname
  62
     *   Surname of the user.
  63
     * @param $name
  64
     *   Name of the user.
  65
     * @param $mail
  66
     *   Mail of the user.
  67
     * @param $jabberid
  68
     *   Jabber ID of the user.
  69
     * @param $website
  70
     *   Website URL of the user.
  71
     * @param $avatar
  72
     *   Avatar of the user.
  73
     * @param $level
  74
     *   Level of the user.
  75
     * @param $hash
  76
     *   Unique hash of the user.
  77
     * @param $lang
  78
     *   Speaking-language of the user.
  79
     * @param $notif
  80
     *   'jabber', 'mail' or 'none' for notification
  81
     * @return
  82
     *   The identifier of the new member.
  83
     */
53 84
    function addUser($nickname, $password, $surname, $name, $mail, $jabberid, $website, $avatar,
54  
    $level, $hash, $lang)
  85
                     $level, $hash, $lang)
55 86
    {
56 87
        return $this->db->insert('users', array('nickname' => $nickname,
57 88
                                                'password' => sha1($password),
64 95
                                                'avatar' => $avatar,
65 96
                                                'level' => $level,
66 97
                                                'keyid' => $hash,
67  
                                                'lang' => $lang
  98
                                                'lang' => $lang,
  99
                                                'notif' => $notif
68 100
                                               ));
69 101
    }
70 102

                                        
  103

                                    
  104
    /**
  105
     * Load an user
  106
     *
  107
     * @param $value
  108
     *   One value that can identify the user (id, nickname or hash).
  109
     * @param $where
  110
     *   Database field that corresponds with value.
  111
     * @return
  112
     *   A boolean (TRUE if the user is loaded).
  113
     */
71 114
    function load($id, $where)
72 115
    {
73 116
        if (isset($this->loaded))
89 132
                $this->avatar = $user['avatar'];
90 133
                $this->level = $user['level'];
91 134
                $this->lang = $user['lang'];
  135
                $this->notif = $user['notif'];
92 136

                                        
93 137
                $this->password = $user['password'];
94 138
                $this->keyid = $user['keyid'];
268 312
        $this->updateField('keyid', $keyid);
269 313
        $this->keyid = $keyid;
270 314
    }
  315

                                    
  316
    function getNotif()
  317
    {
  318
        if ($this->loaded)
  319
            return $this->notif;
  320
    }
  321

                                    
  322
    function setNotif($notif)
  323
    {
  324
        $this->updateField('notif', $notif);
  325
        $this->notif = $notif;
  326
    }
271 327
}
272 328
?>
273 329

                                        

 

Old New Code
106 106
 * and return the class instance.
107 107
 *
108 108
 * @param $id
109  
 *   Database id of the user.
  109
 *   Database identifier of the user.
110 110
 * @param $db
111 111
 *   The instance of the database class.
112 112
 * @param $loadby (optional)
113  
 *   Database field to load from.
  113
 *   Database field to load from (empty if identifier).
114 114
 * @return
115 115
 *   An instance of User class.
116 116
 */
160 160
        $grep = explode('.', $class);
161 161
        $module = $grep[0];
162 162
        $class = $grep[1];
163  
        $file = $basedir.'/inc/modules/'.$module.'/'.$class.'.php';
  163
        $file = $basedir.'/inc/modules/'.$module.'/models/'.$class.'.php';
164 164
    }
165 165

                                        
166 166
    if (!file_exists($file))
167 167

                                        

 

Old New Code
1842 1842

                                        
1843 1843

                                        
1844 1844

                                        
1845  
class MakeXML extends Jabber
  1845
class MakeXML extends JabberPHP
1846 1846
{
1847 1847
	var $nodes;
1848 1848

                                        
1849 1849

                                        

 

Old New Code
55 55
        $page = getStaticPage($this->ct_db, 'about');
56 56

                                        
57 57
        if ($page)
58  
            $this->maincontent = '<h3>'.$page['title'].'</h3><br />'.$page['text'];
  58
            $this->maincontent = '<h1>'.$page['title'].'</h1><br />'.$page['text'];
59 59
        else
60 60
            $this->maincontent = _('No document.');
61 61

                                        
62 62

                                        

 

Old New Code
55 55
        $page = getStaticPage($this->ct_db, 'tou');
56 56

                                        
57 57
        if ($page)
58  
            $this->maincontent = '<h3>'.$page['title'].'</h3><br />'.$page['text'];
  58
            $this->maincontent = '<h1>'.$page['title'].'</h1><br />'.$page['text'];
59 59
        else
60 60
            $this->maincontent = _('No document.');
61 61

                                        
62 62

                                        

 

Old New Code
46 46
            <li '.( ($this->page[2] == 'default') ? 'class="current" style="background-image: url(\'public/images/icons/apps/im-jabber.png\');"' : '' ).'>
47 47
            <a href="jabber/default/nbuser:desc">'._('Chat rooms list').'</a></li>
48 48

                                        
49  
            <li '.( ($this->page[2] == 'fortunes') ? 'class="current" style="background-image: url(\'public/images/icons/stock/emoticons/stock_smiley-25.png\');"' : '' ).'>
50  
            <a href="jabber/fortunes">'._('Fortunes').'</a></li>
  49
            <li '.( ($this->page[2] == 'fortunes') ? 'class="current" style="background-image: url(\'public/images/icons/stock/image/stock_draw-callouts.png\');"' : '' ).'>
  50
            <a href="jabber/fortunes">'._('Fortunes').'</a>
  51
            <ul class="submenu">
  52
              <li><a href="jabber/fortunes">'._('Latest fortunes').'</a></li>
  53
              <li><a href="jabber/fortunes/top">'._('Top').'</a></li>
  54
              <li><a href="jabber/fortunes/add"><strong>'._('Add a fortune').'</strong></a></li>
  55
            </ul></li>
51 56

                                        
52 57
            </ul><div style="margin-bottom: 3.0em;">&nbsp;</div>';
53 58
    }
54 59

                                        

 

Old New Code
35 35
        $this->maincontent = '';
36 36

                                        
37 37
        // Meta tags
38  
        $this->metatags = array('title'       => _('Jabber'),
  38
        $this->metatags = array('title'       => _('Chat rooms list - Jabber'),
39 39
                                'feed'         => '',
40 40
                                'description' => '',
41 41
                                'keywords'    => ''
89 89
        $cfg = getClass('config', $this->ct_db);
90 90
        $mucserver = $cfg->get('jabber', 'muc');
91 91

                                        
92  
        $this->maincontent .= '<h1>'._('Jabber').'</h1>
  92
        $this->maincontent .= '<h1>'._('Chat rooms list').'</h1>
93 93
        <p>'._("This is the list of all the Jabber rooms of every projects hosted on the forge. You can join them even if you don't have a Jabber account.").'</p>
94 94
        <table style="width: 100%;margin-top: 15px;">
95 95
        <thead><tr>
96 96

                                        

 

Old New Code
36 36

                                        
37 37
        // Meta tags
38 38
        $this->metatags = array('title'       => _('Fortunes - Jabber'),
39  
                                'feed'         => '',
40 39
                                'description' => '',
41 40
                                'keywords'    => ''
42 41
                               );
43 42

                                        
44  
        // Load the Jabber class
45  
        $this->jabber = getClass('jabber.jabber', $this->ct_db);
  43
        // Add feed
  44
        if (empty($this->page[3])|| (!in_array($this->page[3], array('show', 'add')) && is_numeric($this->page[3])))
  45
            $this->metatags['feed'] = 'jabber/fortunes';
  46

                                    
  47
        // Fortunes class
  48
        $this->fortunes = getClass('jabber.fortunes', $this->ct_db);
  49

                                    
  50
        // Vote for a fortune
  51
        if ($this->page[3] == 'vote' && is_numeric($this->page[4]) && in_array($this->page[5], array('good', 'bad')))
  52
        {
  53
            if ($this->fortunes->load($this->page[4]) && !isset($_COOKIE['ct-fortune-vote'.$this->page[4]]))
  54
            {
  55
                setcookie('ct-fortune-vote'.$this->page[4], $this->page[5], time() + 24 * 60 * 60, '/');  
  56
                $votes = $this->fortunes->getVote();
  57

                                    
  58
                if ($this->page[5] == 'good')
  59
                    $this->fortunes->setVote($votes + 1);
  60
                elseif ($this->page[5] == 'bad')
  61
                    $this->fortunes->setVote($votes - 1);
  62
            }
  63
            else
  64
                $this->error->displayError(_('Fortune not found or vote already counted for today.'), 0);
  65

                                    
  66
            deleteCacheVersion('/jabber/fortunes', TRUE);
  67

                                    
  68
            global $baseurl;
  69
            Header('Location: '.$baseurl.'jabber/fortunes/show/'.$this->page[4]);
  70
        }
  71
        // Delete a fortune
  72
        elseif ($this->page[3] == 'delete' && is_numeric($this->page[4]))
  73
            if ($this->ct_session->isLogged())
  74
                if (is_level($_SESSION['id'], 'administrator', $this->ct_db) || is_affiliation($_SESSION['id'], $this->id, $this->ct_db))
  75
                {
  76
                    $this->fortunes->remove($this->page[4]);
  77

                                    
  78
                    deleteCacheVersion('/jabber/fortunes', TRUE);
  79

                                    
  80
                    global $baseurl;
  81
                    Header('Location: '.$baseurl.'jabber/fortunes');
  82
                }
46 83
    }
47 84

                                        
48 85
    function showFeed()
49 86
    {
  87
        global $baseurl;
  88
        $feed_array['title'] = _('Fortunes');
  89
        $feed_array['link'] = $baseurl.'jabber/fortunes';
  90
        $feed_array['description'] = _('Latest fortunes.');
  91

                                    
  92
        $list = $this->fortunes->getLatestFortunes(0, 5);
  93

                                    
  94
        if ($list[1])
  95
        {
  96
            for ($i=0; $i<count($list[1]); $i++)
  97
            {
  98
                if (!empty($list[1][$i]['unregistered_nick']))
  99
                    $nick = htmlspecialchars($list[1][$i]['unregistered_nick']);
  100
                else
  101
                {
  102
                    $user = getUser($list[1][$i]['registered_id'], $this->ct_db);
  103

                                    
  104
                    $nick = htmlspecialchars($user->getNickname());
  105
                }
  106

                                    
  107
                $feed_array['threads'][$i]['title'] = $list[1][$i]['id'];
  108
                $feed_array['threads'][$i]['pubDate'] = $list[1][$i]['datetime'];
  109
                $feed_array['threads'][$i]['guid'] = $baseurl.'jabber/fortunes/show/'.$list[1][$i]['id'];
  110
                $feed_array['threads'][$i]['link'] = $baseurl.'jabber/fortunes/show/'.$list[1][$i]['id'];
  111
                $feed_array['threads'][$i]['dc:creator'] = $nick;
  112
                $feed_array['threads'][$i]['description'] = $this->fortunes->pretty_fortune($list[1][$i]['text']);
  113
            }
  114
        }
  115

                                    
  116
        return $feed_array;
50 117
    }
51 118

                                        
52 119
    function treatForms()
53 120
    {
  121
        // Start error handler
  122
        $this->form_error = 0;
  123

                                    
  124
        // Clean POST values
  125
        foreach ($_POST as $key => $value)
  126
            if (!is_scalar($value))
  127
                exit('Error.');
  128

                                    
  129
        if ((count($_POST) == 1 || count($_POST) == 4) && !empty($_POST['text']))
  130
        {
  131
            $text = $this->ct_db->cleanentry($_POST['text'], FALSE);
  132

                                    
  133
            if ($this->ct_session->isLogged())
  134
            {
  135
                $unregistered_nick = '';
  136
                $registered_id = $_SESSION['id'];
  137
            }
  138
            else
  139
            {
  140
                $unregistered_nick = $this->ct_db->cleanentry($_POST['nickname'], TRUE);
  141

                                    
  142
                // No special chars in the nickname
  143
                if (!ereg("^[0-9A-Za-z_-]+$", $unregistered_nick))
  144
                    $this->form_error = _('No special characters in nickname (Authorized characters are 0-9, A-Z and a-z).');
  145

                                    
  146
                // Captcha
  147
                $captcha = $this->ct_db->cleanentry($_POST[$_SESSION['captcha']], TRUE);
  148
                $captcha_ = $this->ct_db->cleanentry($_POST['captcha_'], TRUE);
  149

                                    
  150
                // Check captcha
  151
                if (!ereg("^([0-9a-z]{40})$" , $captcha_))
  152
                    exit('Error.');
  153
                if (sha1($captcha + $_SESSION['alea']) != $captcha_)
  154
                    $this->form_error = _('Please verify the captcha.');
  155

                                    
  156
                $registered_id = '';
  157
            }
  158

                                    
  159
            if (!$this->form_error)
  160
            {
  161
                $fortune_id = $this->fortunes->add(array('text' => $text,
  162
                                                         'unregistered_nick' => $unregistered_nick,
  163
                                                         'registered_id' => $registered_id
  164
                                                        ));
  165

                                    
  166
                deleteCacheVersion('/jabber/fortunes', TRUE);
  167

                                    
  168
                global $baseurl;
  169
                Header('Location: '.$baseurl.'jabber/fortunes/show/'.$fortune_id);
  170
            }
  171
        }
54 172
    }
55 173

                                        
56 174
    function showPage()
58 176
        $this->maincontent .= '<h1>'._('Fortunes').'</h1>
59 177
        <a href="jabber/fortunes/add">'._('Add a new fortune').'</a>';
60 178

                                        
  179
        if ((empty($this->page[3]) || $this->page[3] == 'top') || (!in_array($this->page[3], array('show', 'add')) && is_numeric($this->page[3])))
  180
        {
  181
            if (isset($this->page[3]) && $this->page[3] != 'top')
  182
            {
  183
                $page = $this->page[3];
  184
                $page --;
  185
            }
  186
            elseif (isset($this->page[4]) && $this->page[3] == 'top')
  187
            {
  188
                $page = $this->page[4];
  189
                $page --;
  190
            }
61 191

                                        
  192
            $max = 10;
  193
            if(!$page)
  194
            {
  195
                $start = 0;
  196
                $page = 0;
  197
            }
  198
            else
  199
                $start = $page * $max;
  200

                                    
  201
            if ($this->page[3] == 'top')
  202
                $fortunes_list = $this->fortunes->getTopFortunes($start, $max);
  203
            else
  204
            {
  205
                $fortunes_list = $this->fortunes->getLatestFortunes($start, $max);
  206

                                    
  207
                $this->maincontent .= '<div class="feed" style="background-image: url(\'public/images/feed.png\');">
  208
                '.sprintf(
  209
                _('Feed subscription: %s or %s.'), '<a href="rss/jabber/fortunes">'._('RSS').'</a>',
  210
                '<a href="atom/jabber/fortunes">'._('Atom').'</a>').'
  211
                </div>';
  212
            }
  213

                                    
  214
            $this->maincontent .= '<h2>'.sprintf(_('Browsing %s fortunes'), $fortunes_list[0]).'</h2>';
  215

                                    
  216
            foreach ($fortunes_list[1] as $fortune)
  217
            {
  218
                $this->maincontent .= '<div class="fortune">
  219
                <div class="vote">
  220
                  <a href="jabber/fortunes/vote/'.$fortune['id'].'/bad"><img src="public/images/icons/actions/list-remove.png" alt="-" style="width: 8px;" /></a>
  221
                  '.$fortune['vote'].'
  222
                  <a href="jabber/fortunes/vote/'.$fortune['id'].'/good"><img src="public/images/icons/actions/list-add.png" alt="+" style="width: 8px;" /></a>
  223
                </div>
  224

                                    
  225
                <h1><a href="jabber/fortunes/show/'.$fortune['id'].'">'._('Show this fortune').'</a></h1>
  226

                                    
  227
                <p>
  228
                '.$this->fortunes->pretty_fortune($fortune['text']).'
  229
                </p>';
  230

                                    
  231
                if ($this->ct_session->isLogged())
  232
                    if (is_level($_SESSION['id'], 'administrator', $this->ct_db) || is_affiliation($_SESSION['id'], $this->id, $this->ct_db))
  233
                        $this->maincontent .= '<ul style="margin-top: 5px;"><li><a href="jabber/fortunes/delete/'.$fortune['id'].'">'._('Delete this fortune').'</a></li></ul>';
  234

                                    
  235
                $this->maincontent .= '</div>'; 
  236

                                    
  237
            }
  238

                                    
  239
            $this->maincontent .= '<table style="width: 100%;"><tfoot>
  240
            <tr>
  241
            <td style="width: 80%;">';
  242
            $i = 0;
  243

                                    
  244
            if($fortunes_list[0] > $max)
  245
            {
  246
                while($i < ($fortunes_list[0] / $max))
  247
                {
  248
                    if($i != $page)
  249
                        $this->maincontent .= '&nbsp;<a href="jabber/fortunes/'.( ($this->page[3] == 'top') ? 'top/' : '' ).($i + 1).'">'.($i + 1).'</a>';
  250
                    else
  251
                        $this->maincontent .= '&nbsp;<b>'.($i + 1).'</b>';
  252

                                    
  253
                    $i++;
  254
                }
  255
            }
  256

                                    
  257
            if ($i > ($page + 1))
  258
                $total = $max * ($page + 1);
  259
            else
  260
                $total = $fortunes_list[0];
  261

                                    
  262
            if ($fortunes_list[0] == 0)
  263
                $write = $start;
  264
            else
  265
                $write = ($start + 1);
  266
            
  267
            $this->maincontent .= '</td>
  268
            <td style="text-align: right;">'.sprintf(_('%s - %s of %s'), $write, $total, $fortunes_list[0]).'</td>
  269
            </tr>
  270
            </tfoot>
  271
            </table>';
  272
        }
  273
        elseif ($this->page[3] == 'show')
  274
        {
  275
            if (is_numeric($this->page[4]) && $this->fortunes->load($this->page[4]))
  276
            {
  277
                $this->maincontent .= '<h2>'.sprintf(_('Showing fortune #%s'), $this->page[4]).'</h2>';
  278

                                    
  279
                $this->maincontent .= '<div class="fortune">
  280
                <div class="vote">
  281
                  <a href="jabber/fortunes/vote/'.$this->fortunes->getId().'/bad"><img src="public/images/icons/actions/list-remove.png" alt="-" style="width: 8px;" /></a>
  282
                  '.$this->fortunes->getVote().'
  283
                  <a href="jabber/fortunes/vote/'.$this->fortunes->getId().'/good"><img src="public/images/icons/actions/list-add.png" alt="+" style="width: 8px;" /></a>
  284
                </div>
  285

                                    
  286
                <h1><a href="jabber/fortunes/show/'.$this->fortunes->getId().'">'._('Permanent link').'</a></h1>
  287

                                    
  288
                <p>
  289
                '.$this->fortunes->pretty_fortune($this->fortunes->getText()).'
  290
                </p>';
  291

                                    
  292
                if ($this->ct_session->isLogged())
  293
                    if (is_level($_SESSION['id'], 'administrator', $this->ct_db) || is_affiliation($_SESSION['id'], $this->id, $this->ct_db))
  294
                        $this->maincontent .= '<ul style="margin-top: 5px;"><li><a href="jabber/fortunes/delete/'.$this->fortunes->getId().'">'._('Delete this fortune').'</a></li></ul>';
  295

                                    
  296
                $this->maincontent .= '</div>'; 
  297

                                    
  298
            }
  299
            else
  300
                exit('Error.');
  301
        }
  302
        elseif ($this->page[3] == 'add')
  303
        {
  304
            $this->maincontent .= '<h2>'._('Add a fortune').'</h2>';
  305

                                    
  306
            if (is_string($this->form_error))
  307
                $this->maincontent .= '<div class="box error">'.$this->form_error.'</div>';
  308

                                    
  309
            $this->maincontent .= '<form action="'.getURLByTags($this->page).'" method="post">
  310
            <p>
  311
            <strong>'._('Fortune:').'</strong><br />
  312
            <textarea name="text" cols="100" rows="10" style="width: 98%;"></textarea>';
  313

                                    
  314
            if (!$this->ct_session->isLogged())
  315
            {
  316
                $captcha = generateCaptcha();
  317

                                    
  318
                $this->maincontent .= '<div style="margin: 20px;width: 280px;border-left: 1px #ccc solid;padding-left: 15px;">
  319
                <strong>'._('Captcha security:').'</strong><br />
  320
                '._('In order to check you are not a robot, please answer to that simple question:').'<br />
  321
                <div class="justify">'.$captcha[0].' + '.$captcha[1].'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  322
                <input type="text" style="width:40px;" maxlength="255" name="'.$_SESSION['captcha'].'" value="" />
  323
                    <input type="text" name="captcha_" value="'.$captcha[2].'" class="captcha" /></div><br />
  324
                <strong>'._('Nickname:').'</strong><br />
  325
                <input type="text" style="width: 98%;" maxlength="255" name="nickname" value="';
  326
                if (!empty($this->form_nickname))
  327
                    echo htmlspecialchars($this->form_nickname);
  328
                $this->maincontent .= '" /></div>';
  329
            }
  330
            else
  331
                $this->maincontent .= '<br /><br />';
  332

                                    
  333
            $this->maincontent .= '<input type="submit" class="submit" value="'._('Quote it!').'" />
  334
            </p>
  335
            </form>';
  336
        }
  337
        else
  338
            exit('Error.');
  339

                                    
62 340
        return $this->maincontent;
63 341
    }
64 342
}
65 343

                                        

 

Old New Code
268 268

                                        
269 269
        $this->maincontent .= '</select><br /><br />
270 270
        <strong>'._('Code:').'</strong><br />
271  
        <textarea name="code" cols="100" rows="20" style="width: 95%;">';
  271
        <textarea name="code" cols="100" rows="20" style="width: 98%;">';
272 272
        
273 273
        if (!empty($this->form_code))
274 274
            $this->maincontent .= htmlspecialchars($this->form_code);
275 275

                                        

 

Old New Code
536 536
                $this->maincontent .= '</ul>
537 537
                </div>';
538 538
            }
539  
            $this->maincontent .= '<div class="feed" style="background-image: url(\'public/images/feed.png\');">
540  
            '.sprintf(
541  
            _('Feed subscription: %s or %s.'), '<a href="rss/project/'.$this->dbname.'/doc/log/'.$this->page_name.'">'._('RSS').'</a>',
542  
            '<a href="atom/project/'.$this->dbname.'/doc/log/'.$this->page_name.'">'._('Atom').'</a>').'
543  
            </div>
  539
            $this->maincontent .= '</div>';
544 540

                                        
545  
            </div>';
546  

                                    
547 541
            if (!$this->project_doc->isLatest())
548 542
                $this->maincontent .= '<div style="background: #f0f0f0;border: 1px #8e8e8e solid;width: 60%;margin: 10px;padding: 10px;">
549 543
                '.sprintf(_('Warning: The page you are currently viewing is not the last revision. To view the current version, %s.'), '<a href="project/'.$this->dbname.'/doc/'.$this->page_name.'">'._('click here').'</a>').'
550 544
                </div>';
551 545

                                        
552  
            $this->maincontent .= $output['content'].'
  546
            $this->;maincontent .= $output['content'];
553 547

                                        
  548
            if (!$this->project_doc->isLatest())
  549
                $this->maincontent .= '<br />
  550
                <textarea cols="100" rows="20" style="margin-top: 20px;width: 98%;">'.htmlspecialchars($this->project_doc->getText()).'</textarea>';
  551

                                    
  552
            $this->maincontent .= '<div style="margin-top: 10px;border-top: 1px #ccc solid;">&nbsp;</div>
  553
            <div class="feed" style="background-image: url(\'public/images/feed.png\');margin-bottom: 10px;">
  554
            '.sprintf(
  555
            _('This page feed: %s or %s.'), '<a href="rss/project/'.$this->dbname.'/doc/log/'.$this->page_name.'">'._('RSS').'</a>',
  556
            '<a href="atom/project/'.$this->dbname.'/doc/log/'.$this->page_name.'">'._('Atom').'</a>').'
  557
            </div>
  558

                                    
  559
            <div class="feed" style="background-image: url(\'public/images/feed.png\');">
  560
            '.sprintf(
  561
            _('Global feed: %s or %s.'), '<a href="rss/project/'.$this->dbname.'/doc">'._('RSS').'</a>',
  562
            '<a href="atom/project/'.$this->dbname.'/doc">'._('Atom').'</a>').'
  563
            </div>
554 564
            ';
555 565
        }
556 566

                                        
557 567

                                        

 

Old New Code
80 80
                                'description' => '',
81 81
                                'keywords'    => ''
82 82
                               );
83  

                                    
84  
        // Get a timeline
85  
        $this->timeline = $this->project_timeline->getTimeline($this->id);
86  

                                    
87  
        // Translation :)
88  
        $this->types = array('download' => _('downloads'),
89  
                             'bugs'     => _('bugs'),
90  
                             'news'     => _('news'),
91  
                             'doc'      => _('documentation')
92  
                            );
93 83
    }
94 84

                                        
95 85
    function showFeed()
96 86
    {
97 87
        global $baseurl;
98 88

                                        
  89
        // Get a timeline
  90
        $timeline = $this->project_timeline->getTimeline($this->id, TRUE);
  91

                                    
99 92
        $feed_array['title'] = sprintf(_('%s timeline'), $this->name);
100 93
        $feed_array['link'] = 'project/'.$this->dbname.'/timeline';
101 94
        $feed_array['description'] = sprintf(_('Latest events for %s.'), $this->name);
102 95

                                        
103  
        foreach ($this->timeline as $date_)
  96
        foreach ($timeline as $date_)
104 97
        {
105 98
            $date = $date_[0];
106 99

                                        
144 137
        '<a href="atom/project/'.$this->dbname.'/timeline">'._('Atom').'</a>').'
145 138
        </div>';
146 139

                                        
147  
        foreach ($this->timeline as $date)
  140
        // Translation :)
  141
        $types = array('download' => _('downloads'),
  142
                       'bugs'     => _('bugs'),
  143
                       'news'     => _('news'),
  144
                       'doc'      => _('documentation')
  145
                      );
  146

                                    
  147
        // Get a timeline
  148
        $timeline = $this->project_timeline->getTimeline($this->id);
  149

                                    
  150
        foreach ($timeline as $date)
148 151
        {
149 152
            $this->maincontent .= '<h2>'.i18nDate($date[0], $this->lang).'</h2>
150 153
            <ul class="timeline">'; 
164 167
                    <em>'.$item['time'].'</em>
165 168
                    '.sprintf(_('%s by %s in %s'), '<a href="'.htmlspecialchars($item['link']).'" style="font-weight: bold;color: #000;">'.htmlspecialchars($item['title']).'</a>',
166 169
                                                   $nick,
167  
                                                   '<a href="/project/'.$this->dbname.'/'.$item['type'].'">'.$this->types[$item['type']].'</a>').
  170
                                                   '<a href="/project/'.$this->dbname.'/'.$item['type'].'">'.$types[$item['type']].'</a>').
168 171
                    '<br /><span style="color: #8e8e8e;font-style: italic;">'.htmlspecialchars($item['text']).'</span>
169 172
                    </li>';
170 173
                }
171 174

                                        

 

Old New Code
58 58
        $this->jabberid = $this->user->getJid();
59 59
        $this->website = $this->user->getUrl();
60 60
        $this->lang = $this->user->getLang();
  61
        $this->notif = $this->user->getNotif();
61 62

                                        
62 63
        $this->config = getClass('config', $this->ct_db);
63 64
    }
84 85
            $this->form_name = $this->ct_db->cleanentry($_POST['name'], TRUE);
85 86
            $this->form_surname = $this->ct_db->cleanentry($_POST['surname'], TRUE);
86 87
            $this->form_lang = $this->ct_db->cleanentry($_POST['lang'], TRUE);
  88
            $this->form_notif = $this->ct_db->cleanentry($_POST['notif'], TRUE);
87 89

                                        
  90
            // Check if notif is correct
  91
            if (!in_array($this->form_notif, array('jabber', 'mail', 'none')))
  92
                exit('Error.');
  93

                                    
88 94
            // Check if lang prefs is correct
89 95
            if (!in_array($this->form_lang, $this->langlist))
90 96
                exit('Error.');
155 161
                $this->user->setJid($this->form_jabberid);
156 162
                $this->user->setUrl($this->form_website);
157 163
                $this->user->setLang($this->form_lang);
  164
                $this->user->setNotif($this->form_notif);
158 165
                
159 166
                if ($this->form_avatar != '!nochange!')
160 167
                    $this->user->setAvatar($this->form_avatar);
211 218
        elseif (!empty($this->form_website))
212 219
            $this->maincontent .= htmlspecialchars($this->form_website);
213 220
        $this->maincontent .= '" />
  221
            <br /><br /><strong>'._('Notification:').'</strong><br />
  222
            <select name="notif" style="width:250px;">';
  223

                                    
  224
        $notifs = array('jabber' => _('Send via Jabber'),
  225
                        'mail' => _('Send via mail'),
  226
                        'none' => _('Do not send')
  227
                       );
  228

                                    
  229
        if (!empty($this->form_notif))
  230
            $_notif = $this->form_notif;
  231
        elseif (!empty($this->notif))
  232
            $_notif = $this->notif;
  233

                                    
  234
        foreach ($notifs as $key => $value)
  235
            $this->maincontent .= '<option value='.$key.' '.( ($key == $_notif) ?
  236
                                  'selected="selected"' :
  237
                                  '' ).'>'.$value.'</option>';
  238

                                    
  239
        $this->maincontent .= '</select>
214 240
            </p></div>
215 241
            <div style="position: relative;width: 250px;"><h3>'._('Personnal information').'</h3><p>
216 242
            <strong>'._('Name:').'</strong><br />
236 262

                                        
237 263
        require($basedir.'/inc/data/i18n.php');
238 264
        foreach ($this->langlist as $key => $value)
239  
            if ($value == $lg)
  265
            if (mb_substr($value, 0, 2) == $lg)
240 266
                $this->maincontent .= '<option value="'.$value.'" selected="selected">'.$i18n[$value].'</option>';
241 267
            else
242 268
                $this->maincontent .= '<option value="'.$value.'">'.$i18n[$value].'</option>';
243 269

                                        

 

Old New Code
84 84
            if (!$this->form_error)
85 85
                $this->form_step = 1;
86 86
        }
87  
        elseif (count($_POST) == 10)
  87
        elseif (count($_POST) == 11)
88 88
        {
89 89
            $this->form_step = 1;        
90 90
            
97 97
            $this->form_name = $this->ct_db->cleanentry($_POST['name'], TRUE);
98 98
            $this->form_surname = $this->ct_db->cleanentry($_POST['surname'], TRUE);
99 99
            $this->form_lang = $this->ct_db->cleanentry($_POST['lang'], TRUE);
  100
            $this->form_notif = $this->ct_db->cleanentry($_POST['notif'], TRUE);
100 101

                                        
  102
            // Check if notif is correct
  103
            if (!in_array($this->form_notif, array('jabber', 'mail', 'none')))
  104
                exit('Error.');
  105

                                    
101 106
            // Check if lang prefs is correct
102 107
            if (!in_array($this->form_lang, $this->langlist))
103 108
                exit('Error.');
259 264
            if (!empty($this->form_website))
260 265
                $this->maincontent .= htmlspecialchars($this->form_website);
261 266
            $this->maincontent .= '" />
  267
            <br /><br /><strong>'._('Notification:').'</strong><br />
  268
            <select name="notif" style="width:250px;">';
  269

                                    
  270
            $notifs = array('jabber' => _('Send via Jabber'),
  271
                            'mail' => _('Send via mail'),
  272
                            'none' => _('Do not send')
  273
                           );
  274

                                    
  275
            foreach ($notifs as $key => $value)
  276
                $this->maincontent .= '<option value='.$key.' '.( ($key == $this->form_notif) ?
  277
                                      'selected="selected"' :
  278
                                      '' ).'>'.$value.'</option>';
  279

                                    
  280
            $this->maincontent .= '</select>
262 281
            </p></div>
263 282
            <div style="position: relative;width: 250px;"><h3>'._('Account information').'</h3><p><strong>'._('Nickname:').'</strong><br />
264 283
                <input type="text" style="width:250px;" maxlength="30" name="nickname" class="required-input" value="';
265 284

                                        

 

Old New Code
579 579
#content .fstree .file {
580 580
  background: transparent url('../../public/images/icons/places/file.png') center left no-repeat;
581 581
}
582  
 
583 582

                                        
  583
#content .fortune {
  584
  padding-left: 20px;
  585
  padding-bottom: 10px;
  586
  margin-left: 10px;
  587
  margin-bottom: 20px;
  588
  border-left: 1px #ccc solid;
  589
  border-bottom: 1px #ccc solid;  
  590
}
  591

                                    
  592
#content .fortune h1 {
  593
  font-size: 1.2em;
  594
}
  595

                                    
  596
#content .fortune h1 a {
  597
  letter-spacing: 0.1em;
  598
  font-variant: small-caps;
  599
  color: #ccc; 
  600
}
  601

                                    
  602
#content .fortune .vote {
  603
  padding-top: 5px;
  604
  margin-right: 10px;
  605
  float: right;
  606
}
  607

                                    
  608

                                    
584 609
/* FOOTER */
585 610
#footer {
586 611
  margin-top: 10px;
587 612