You can subscribe to this list here.
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(58) |
Sep
(44) |
Oct
(7) |
Nov
(4) |
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(3) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(15) |
Aug
(55) |
Sep
(48) |
Oct
(56) |
Nov
(14) |
Dec
|
From: <al...@us...> - 2008-10-20 13:33:04
|
Revision: 735 http://sciret.svn.sourceforge.net/sciret/?rev=735&view=rev Author: alpeb Date: 2008-10-20 13:32:58 +0000 (Mon, 20 Oct 2008) Log Message: ----------- ignore netbeans project folder Property Changed: ---------------- trunk/ Property changes on: trunk ___________________________________________________________________ Modified: svn:ignore - config.ini.php log.txt + config.ini.php log.txt nbproject This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-10-20 13:31:53
|
Revision: 734 http://sciret.svn.sourceforge.net/sciret/?rev=734&view=rev Author: alpeb Date: 2008-10-20 13:31:41 +0000 (Mon, 20 Oct 2008) Log Message: ----------- added ability to browse expired articles in the main view Modified Paths: -------------- trunk/classes/Library.php trunk/models/Article.php trunk/templates/MainView.tpl trunk/views/MainView.php Modified: trunk/classes/Library.php =================================================================== --- trunk/classes/Library.php 2008-10-17 23:59:05 UTC (rev 733) +++ trunk/classes/Library.php 2008-10-20 13:31:41 UTC (rev 734) @@ -64,6 +64,14 @@ } } + if (!in_array('viewexpired', array_keys($vars))) { + if (isset($_GET['viewexpired'])) { + $vars['viewexpired'] = $_GET['viewexpired']; + } else { + $vars['viewexpired'] = 0; + } + } + if (!in_array('tableSort', array_keys($vars)) && isset($_GET['tableSort'])) { $vars['tableSort'] = $_GET['tableSort']; } Modified: trunk/models/Article.php =================================================================== --- trunk/models/Article.php 2008-10-17 23:59:05 UTC (rev 733) +++ trunk/models/Article.php 2008-10-20 13:31:41 UTC (rev 734) @@ -218,6 +218,15 @@ } } + public function isExpired() + { + if ($this->expDate == '0000-00-00') { + return false; + } + + return ($this->expDate <= date('Y-m-d')); + } + function setExpDate($expDate) { $this->expDate = $expDate; Modified: trunk/templates/MainView.tpl =================================================================== --- trunk/templates/MainView.tpl 2008-10-17 23:59:05 UTC (rev 733) +++ trunk/templates/MainView.tpl 2008-10-20 13:31:41 UTC (rev 734) @@ -64,9 +64,7 @@ <div class="title_content" style="position:relative"> <span> {navigationTitle} - <!-- BEGIN browsingDraftsUnpublished_block --> - [l](Showing drafts and unpublished too)[/l] - <!-- END browsingDraftsUnpublished_block --> + {showing} <a href="javascript:void(0)" onclick="addFavorite('location')"><img id="favoriteStarImg" src="images/star.png" alt="[l]Add location to favorites[/l]" title="[l]Add location to favorites[/l]" style="display:{favoriteLocationStarImgDisplay}" /><img id="unFavoriteStarImg" src="images/star_crossed.png" alt="[l]Remove location from favorites[/l]" title="[l]Remove location from favorites[/l]" style="display:{unFavoriteLocationStarImgDisplay}" /><img id="favoriteProgressImg" src="images/progress.gif" style="display:none" /></a> </span> <span style="position:absolute; right:0; top:7px"> @@ -90,6 +88,14 @@ <br /> <a href="{hideDraftsUnpublishedLink}" style="font-weight:bold; font-size:10px">[l]Hide drafts and unpublished articles[/l]</a> <!-- END hideDraftsUnpublishedLink_block --> + <!-- BEGIN viewExpiredLink_block --> + <br /> + <a href="{viewExpiredLink}" style="font-weight:bold; font-size:10px">[l]View expired articles[/l]</a> + <!-- END viewExpiredLink_block --> + <!-- BEGIN hideExpiredLink_block --> + <br /> + <a href="{hideExpiredLink}" style="font-weight:bold; font-size:10px">[l]Hide expired articles[/l]</a> + <!-- END hideExpiredLink_block --> </p> <p class="view_right">[l]Sort by:[/l] <span class="button_gray"><a href="{sortByDateLink}">[l]Date[/l]</a>{sortByDateArrow}</span> Modified: trunk/views/MainView.php =================================================================== --- trunk/views/MainView.php 2008-10-17 23:59:05 UTC (rev 733) +++ trunk/views/MainView.php 2008-10-20 13:31:41 UTC (rev 734) @@ -48,6 +48,14 @@ $_GET['viewall'] = 0; } + if (!$this->user->isAnonymous() + && isset($_GET['viewexpired']) && $_GET['viewexpired'] == 1) + { + $_GET['viewexpired'] = 1; + } else { + $_GET['viewexpired'] = 0; + } + $this->tpl->set_var('checked_all', (!isset($_GET['set']) || $_GET['set'] == 'all')? 'checked="true"' : ''); $this->tpl->set_var('checked_articles', (isset($_GET['set']) && $_GET['set'] == 'articles')? 'checked="true"' : ''); $this->tpl->set_var('checked_bookmarks', (isset($_GET['set']) && $_GET['set'] == 'bookmarks')? 'checked="true"' : ''); @@ -66,8 +74,9 @@ $this->tpl->set_block('main', 'viewBookmarksLink_block', 'viewBookmarksLink'); $this->tpl->set_block('main', 'viewDraftsUnpublishedLink_block', 'viewDraftsUnpublishedLink'); $this->tpl->set_block('main', 'hideDraftsUnpublishedLink_block', 'hideDraftsUnpublishedLink'); + $this->tpl->set_block('main', 'viewExpiredLink_block', 'viewExpiredLink'); + $this->tpl->set_block('main', 'hideExpiredLink_block', 'hideExpiredLink'); $this->tpl->set_block('main', 'requestCat_block', 'requestCat'); - $this->tpl->set_block('main', 'browsingDraftsUnpublished_block', 'browsingDraftsUnpublished'); $this->tpl->set_block('articles_block', 'status_block', 'status'); $this->tpl->set_block('articles_block', 'question_block', 'question'); @@ -84,6 +93,8 @@ 'viewBookmarksLink' => Library::getLink(array('view' => 'MainView', 'set' => 'bookmarks')), 'viewDraftsUnpublishedLink' => Library::getLink(array('view' => 'MainView', 'viewall' => '1')), 'hideDraftsUnpublishedLink' => Library::getLink(array('view' => 'MainView', 'viewall' => '0')), + 'viewExpiredLink' => Library::getLink(array('view' => 'MainView', 'viewexpired' => '1')), + 'hideExpiredLink' => Library::getLink(array('view' => 'MainView', 'viewexpired' => '0')), 'sortByDateLink' => Library::getLink(array('view' => 'MainView', 'sort' => 'created_'.($order == 'created' && $direction == 'desc'? 'asc' : 'desc'))), 'sortByViewsLink' => Library::getLink(array('view' => 'MainView', 'sort' => 'views_'.($order == 'views' && $direction == 'desc'? 'asc' : 'desc'))), 'rssLink' => Library::getLink(array('view' => 'Rss', 'catId' => $catId, 'items' => 10)), @@ -137,10 +148,10 @@ $this->tpl->parse('viewBookmarksLink', 'viewBookmarksLink_block'); } + $showing = array(); if ($_GET['viewall']) { - $this->tpl->parse('browsingDraftsUnpublished', 'browsingDraftsUnpublished_block'); - } else { - $this->tpl->set_var('browsingDraftsUnpublished', ''); + $showing[] = $this->user->lang('drafts'); + $showing[] = $this->user->lang('unpublished'); } if (!$this->user->isAnonymous()) { @@ -158,7 +169,31 @@ )); } + if ($_GET['viewexpired']) { + $showing[] = $this->user->lang('expired'); + } + if (!$this->user->isAnonymous()) { + if (isset($_GET['viewexpired']) && $_GET['viewexpired'] == 1) { + $this->tpl->parse('hideExpiredLink', 'hideExpiredLink_block'); + $this->tpl->set_var('viewExpiredLink', ''); + } else { + $this->tpl->parse('viewExpiredLink', 'viewExpiredLink_block'); + $this->tpl->set_var('hideExpiredLink', ''); + } + } else { + $this->tpl->set_var(array( + 'viewExpiredLink' => '', + 'hideExpiredLink' => '', + )); + } + + if ($showing) { + $showing = implode(', ', $showing); + $this->tpl->set_var('showing', ' - ' . $this->user->lang('Showing %s', $showing)); + } + + // ** CATEGORIES ** $articleGateway = new ArticleGateway; $categoryGateway = new CategoryGateway; @@ -200,7 +235,7 @@ $this->user->getPreference('articlesPerPage'), isset($_GET['set'])? $_GET['set'] : 'all', isset($_GET['sort'])? $_GET['sort'] : false, - false, + $_GET['viewexpired'], $_GET['viewall']); $this->tpl->set_var('numArts', $articles->getNumItems()); $firstIteration = true; @@ -238,6 +273,10 @@ if ($article->isDraft()) { $status[] = $this->user->lang('draft'); } + if ($article->isExpired()) { + $status[] = $this->user->lang('expired'); + } + if ($status) { $status = implode(', ', $status); $this->tpl->set_var('status', $status); @@ -263,19 +302,19 @@ } $this->tpl->set_var('paginationLinks', $this->getPaginationLinks( 'MainView', $articles->getNumItems(), - isset($_GET['offset'])? (int)$_GET['offset'] : 0, - false, - false, - false, - false, - '', - '', - '', - '', - 0, - '', - 'anywhere', - 'created', + isset($_GET['offset'])? (int)$_GET['offset'] : 0, + false, + false, + false, + false, + '', + '', + '', + '', + 0, + '', + 'anywhere', + 'created', 'desc', $catId)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-10-17 23:59:12
|
Revision: 733 http://sciret.svn.sourceforge.net/sciret/?rev=733&view=rev Author: alpeb Date: 2008-10-17 23:59:05 +0000 (Fri, 17 Oct 2008) Log Message: ----------- added ability to see draft and unpublished articles in the main view. First step before removing the Manage Items section Modified Paths: -------------- trunk/classes/Library.php trunk/style.css trunk/templates/MainView.tpl trunk/views/MainView.php Modified: trunk/classes/Library.php =================================================================== --- trunk/classes/Library.php 2008-10-17 22:58:08 UTC (rev 732) +++ trunk/classes/Library.php 2008-10-17 23:59:05 UTC (rev 733) @@ -56,6 +56,14 @@ } } + if (!in_array('viewall', array_keys($vars))) { + if (isset($_GET['viewall'])) { + $vars['viewall'] = $_GET['viewall']; + } else { + $vars['viewall'] = 0; + } + } + if (!in_array('tableSort', array_keys($vars)) && isset($_GET['tableSort'])) { $vars['tableSort'] = $_GET['tableSort']; } Modified: trunk/style.css =================================================================== --- trunk/style.css 2008-10-17 22:58:08 UTC (rev 732) +++ trunk/style.css 2008-10-17 23:59:05 UTC (rev 733) @@ -350,9 +350,13 @@ font-size: 0.9em; } +.itemStatus { + color: red; + font-weight: bold; + font-size: 0.9em; +} - /* title content */ a.button_menu { Modified: trunk/templates/MainView.tpl =================================================================== --- trunk/templates/MainView.tpl 2008-10-17 22:58:08 UTC (rev 732) +++ trunk/templates/MainView.tpl 2008-10-17 23:59:05 UTC (rev 733) @@ -64,6 +64,9 @@ <div class="title_content" style="position:relative"> <span> {navigationTitle} + <!-- BEGIN browsingDraftsUnpublished_block --> + [l](Showing drafts and unpublished too)[/l] + <!-- END browsingDraftsUnpublished_block --> <a href="javascript:void(0)" onclick="addFavorite('location')"><img id="favoriteStarImg" src="images/star.png" alt="[l]Add location to favorites[/l]" title="[l]Add location to favorites[/l]" style="display:{favoriteLocationStarImgDisplay}" /><img id="unFavoriteStarImg" src="images/star_crossed.png" alt="[l]Remove location from favorites[/l]" title="[l]Remove location from favorites[/l]" style="display:{unFavoriteLocationStarImgDisplay}" /><img id="favoriteProgressImg" src="images/progress.gif" style="display:none" /></a> </span> <span style="position:absolute; right:0; top:7px"> @@ -79,6 +82,14 @@ <!-- BEGIN viewBookmarksLink_block --> <a href="{viewBookmarksLink}" style="font-weight:bold; font-size:10px">[l]Bookmarks only[/l]</a> <!-- END viewBookmarksLink_block --> + <!-- BEGIN viewDraftsUnpublishedLink_block --> + <br /> + <a href="{viewDraftsUnpublishedLink}" style="font-weight:bold; font-size:10px">[l]View drafts and unpublished articles[/l]</a> + <!-- END viewDraftsUnpublishedLink_block --> + <!-- BEGIN hideDraftsUnpublishedLink_block --> + <br /> + <a href="{hideDraftsUnpublishedLink}" style="font-weight:bold; font-size:10px">[l]Hide drafts and unpublished articles[/l]</a> + <!-- END hideDraftsUnpublishedLink_block --> </p> <p class="view_right">[l]Sort by:[/l] <span class="button_gray"><a href="{sortByDateLink}">[l]Date[/l]</a>{sortByDateArrow}</span> @@ -92,6 +103,9 @@ <i>({art_num}) </i> <img src="images/{articleImage}" /> <a href="{art_link}">{art_title}</a> {bookmark_edit} + <!-- BEGIN status_block --> + <span class="itemStatus">({status})</span> + <!-- END status_block --> <!-- BEGIN question_block --> ({questionStr}) <!-- END question_block --> Modified: trunk/views/MainView.php =================================================================== --- trunk/views/MainView.php 2008-10-17 22:58:08 UTC (rev 732) +++ trunk/views/MainView.php 2008-10-17 23:59:05 UTC (rev 733) @@ -40,6 +40,14 @@ } } + if (!$this->user->isAnonymous() + && isset($_GET['viewall']) && $_GET['viewall'] == 1) + { + $_GET['viewall'] = 1; + } else { + $_GET['viewall'] = 0; + } + $this->tpl->set_var('checked_all', (!isset($_GET['set']) || $_GET['set'] == 'all')? 'checked="true"' : ''); $this->tpl->set_var('checked_articles', (isset($_GET['set']) && $_GET['set'] == 'articles')? 'checked="true"' : ''); $this->tpl->set_var('checked_bookmarks', (isset($_GET['set']) && $_GET['set'] == 'bookmarks')? 'checked="true"' : ''); @@ -56,7 +64,11 @@ $this->tpl->set_block('main', 'viewAllLink_block', 'viewAllLink'); $this->tpl->set_block('main', 'viewArticlesLink_block', 'viewArticlesLink'); $this->tpl->set_block('main', 'viewBookmarksLink_block', 'viewBookmarksLink'); + $this->tpl->set_block('main', 'viewDraftsUnpublishedLink_block', 'viewDraftsUnpublishedLink'); + $this->tpl->set_block('main', 'hideDraftsUnpublishedLink_block', 'hideDraftsUnpublishedLink'); $this->tpl->set_block('main', 'requestCat_block', 'requestCat'); + $this->tpl->set_block('main', 'browsingDraftsUnpublished_block', 'browsingDraftsUnpublished'); + $this->tpl->set_block('articles_block', 'status_block', 'status'); $this->tpl->set_block('articles_block', 'question_block', 'question'); $this->tpl->set_block('unansweredQuestionsItem_block', 'answerLink_block', 'answerLink'); @@ -70,6 +82,8 @@ 'viewAllLink' => Library::getLink(array('view' => 'MainView', 'set' => 'all')), 'viewArticlesLink' => Library::getLink(array('view' => 'MainView', 'set' => 'articles')), 'viewBookmarksLink' => Library::getLink(array('view' => 'MainView', 'set' => 'bookmarks')), + 'viewDraftsUnpublishedLink' => Library::getLink(array('view' => 'MainView', 'viewall' => '1')), + 'hideDraftsUnpublishedLink' => Library::getLink(array('view' => 'MainView', 'viewall' => '0')), 'sortByDateLink' => Library::getLink(array('view' => 'MainView', 'sort' => 'created_'.($order == 'created' && $direction == 'desc'? 'asc' : 'desc'))), 'sortByViewsLink' => Library::getLink(array('view' => 'MainView', 'sort' => 'views_'.($order == 'views' && $direction == 'desc'? 'asc' : 'desc'))), 'rssLink' => Library::getLink(array('view' => 'Rss', 'catId' => $catId, 'items' => 10)), @@ -123,7 +137,28 @@ $this->tpl->parse('viewBookmarksLink', 'viewBookmarksLink_block'); } + if ($_GET['viewall']) { + $this->tpl->parse('browsingDraftsUnpublished', 'browsingDraftsUnpublished_block'); + } else { + $this->tpl->set_var('browsingDraftsUnpublished', ''); + } + + if (!$this->user->isAnonymous()) { + if (isset($_GET['viewall']) && $_GET['viewall'] == 1) { + $this->tpl->parse('hideDraftsUnpublishedLink', 'hideDraftsUnpublishedLink_block'); + $this->tpl->set_var('viewDraftsUnpublishedLink', ''); + } else { + $this->tpl->parse('viewDraftsUnpublishedLink', 'viewDraftsUnpublishedLink_block'); + $this->tpl->set_var('hideDraftsUnpublishedLink', ''); + } + } else { + $this->tpl->set_var(array( + 'viewDraftsUnpublishedLink' => '', + 'hideDraftsUnpublishedLink' => '', + )); + } + // ** CATEGORIES ** $articleGateway = new ArticleGateway; $categoryGateway = new CategoryGateway; @@ -159,12 +194,14 @@ $articles = $articleGateway->getArticles( $catId, $this->user->getPreference('navigationType') == 'catAndSubCats', false, + $_GET['viewall'], false, - false, isset($_GET['offset'])? (int)$_GET['offset'] : 0, $this->user->getPreference('articlesPerPage'), isset($_GET['set'])? $_GET['set'] : 'all', - isset($_GET['sort'])? $_GET['sort'] : false); + isset($_GET['sort'])? $_GET['sort'] : false, + false, + $_GET['viewall']); $this->tpl->set_var('numArts', $articles->getNumItems()); $firstIteration = true; while ($article = $articles->fetch()) { @@ -194,6 +231,21 @@ $this->tpl->set_var('question', ''); } + $status = array(); + if (!$article->isPublished()) { + $status[] = $this->user->lang('not published'); + } + if ($article->isDraft()) { + $status[] = $this->user->lang('draft'); + } + if ($status) { + $status = implode(', ', $status); + $this->tpl->set_var('status', $status); + $this->tpl->parse('status', 'status_block'); + } else { + $this->tpl->set_var('status', ''); + } + if ($article->getCategoryId() == 0) { $this->tpl->set_var('art_category', ''); } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-10-17 22:58:11
|
Revision: 732 http://sciret.svn.sourceforge.net/sciret/?rev=732&view=rev Author: alpeb Date: 2008-10-17 22:58:08 +0000 (Fri, 17 Oct 2008) Log Message: ----------- changed logout button from green to red Modified Paths: -------------- trunk/templates/header.tpl Modified: trunk/templates/header.tpl =================================================================== --- trunk/templates/header.tpl 2008-10-17 20:18:46 UTC (rev 731) +++ trunk/templates/header.tpl 2008-10-17 22:58:08 UTC (rev 732) @@ -27,7 +27,7 @@ <span class="button_green"><a href="index.php?view=Register">[l]Register[/l]</a></span> <!-- END registerLink_block --> <!-- BEGIN logoutLink_block --> - <span class="button_green"><a href="index.php?action=Logout">[l]Logout[/l]</a></span> + <span class="button_red"><a href="index.php?action=Logout">[l]Logout[/l]</a></span> <!-- END logoutLink_block --> </p> <!-- BEGIN questionButtons_block --> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-10-17 20:18:48
|
Revision: 731 http://sciret.svn.sourceforge.net/sciret/?rev=731&view=rev Author: alpeb Date: 2008-10-17 20:18:46 +0000 (Fri, 17 Oct 2008) Log Message: ----------- Added ability to disable the Questions functionalities (we'll do that when KB is used with the monkeys) Modified Paths: -------------- trunk/actions/AddQuestion.php trunk/actions/DeleteQuestion.php trunk/actions/PublishQuestion.php trunk/actions/SavePreferences.php trunk/models/Configuration.php trunk/templates/EditPreferences.tpl trunk/templates/header.tpl trunk/views/AddQuestion.php trunk/views/EditPreferences.php trunk/views/MainView.php trunk/views/ManageQuestions.php trunk/views/View.php Modified: trunk/actions/AddQuestion.php =================================================================== --- trunk/actions/AddQuestion.php 2008-10-17 17:17:21 UTC (rev 730) +++ trunk/actions/AddQuestion.php 2008-10-17 20:18:46 UTC (rev 731) @@ -15,6 +15,10 @@ class AddQuestion extends Action { function dispatch() { + if (!$this->configuration->getConfigValue('questionsEnabled')) { + die('The questions functionalities have been disabled'); + } + if ($_POST['username'] == '') { $_SESSION['message'] = $this->user->lang('You must enter your name'); Library::redirect(Library::getLink(array('view' => 'AddQuestion'))); Modified: trunk/actions/DeleteQuestion.php =================================================================== --- trunk/actions/DeleteQuestion.php 2008-10-17 17:17:21 UTC (rev 730) +++ trunk/actions/DeleteQuestion.php 2008-10-17 20:18:46 UTC (rev 731) @@ -15,6 +15,10 @@ class DeleteQuestion extends Action { function dispatch() { + if (!$this->configuration->getConfigValue('questionsEnabled')) { + die('The questions functionalities have been disabled'); + } + $questionId = isset($_GET['id'])? (int)$_GET['id'] : 0; $questionGateway = new QuestionGateway; Modified: trunk/actions/PublishQuestion.php =================================================================== --- trunk/actions/PublishQuestion.php 2008-10-17 17:17:21 UTC (rev 730) +++ trunk/actions/PublishQuestion.php 2008-10-17 20:18:46 UTC (rev 731) @@ -15,6 +15,10 @@ class PublishQuestion extends Action { function dispatch() { + if (!$this->configuration->getConfigValue('questionsEnabled')) { + die('The questions functionalities have been disabled'); + } + $qId = isset($_GET['id'])? (int)$_GET['id'] : 0; $questionGateway = new QuestionGateway; Modified: trunk/actions/SavePreferences.php =================================================================== --- trunk/actions/SavePreferences.php 2008-10-17 17:17:21 UTC (rev 730) +++ trunk/actions/SavePreferences.php 2008-10-17 20:18:46 UTC (rev 731) @@ -37,6 +37,7 @@ if (($this->user->role & User::ROLE_ADMIN) == User::ROLE_ADMIN) { $this->configuration->setConfigValue('publishKB', $_POST['publishKB'] == '1'? '1' : '0'); $this->configuration->setConfigValue('anonymousRegistration', $_POST['anonymousRegistration'] == '1'? '1' : '0'); + $this->configuration->setConfigValue('questionsEnabled', $_POST['questionsEnabled'] == '1'? '1' : '0'); $this->configuration->setConfigValue('publishArticlesAuto', $_POST['publishArticlesAuto'] == '1'? '1' : '0'); $this->configuration->setConfigValue('publishBookmarksAuto', $_POST['publishBookmarksAuto'] == '1'? '1' : '0'); $this->configuration->setConfigValue('publishCommentsAuto', $_POST['publishCommentsAuto'] == '1'? '1' : '0'); Modified: trunk/models/Configuration.php =================================================================== --- trunk/models/Configuration.php 2008-10-17 17:17:21 UTC (rev 730) +++ trunk/models/Configuration.php 2008-10-17 20:18:46 UTC (rev 731) @@ -15,6 +15,7 @@ // var name => array(defaultValue, isHidden) 'publishKB' => 1, 'anonymousRegistration' => 0, + 'questionsEnabled' => 1, 'publishArticlesAuto' => 1, 'publishBookmarksAuto' => 1, 'publishCommentsAuto' => 1, Modified: trunk/templates/EditPreferences.tpl =================================================================== --- trunk/templates/EditPreferences.tpl 2008-10-17 17:17:21 UTC (rev 730) +++ trunk/templates/EditPreferences.tpl 2008-10-17 20:18:46 UTC (rev 731) @@ -85,6 +85,15 @@ </select> </td> </tr> + <tr> + <td class="form_left">[l]Enable the Questions functionalities[/l]:</td> + <td> + <select name="questionsEnabled"> + <option value="1" {questionsEnabled_yes_selected}>[l]Yes[/l]</option> + <option value="0" {questionsEnabled_no_selected}>[l]No[/l]</option> + </select> + </td> + </tr> <tr class="row_off"> <td class="form_left">[l]Publish articles automatically[/l]:</td> <td> Modified: trunk/templates/header.tpl =================================================================== --- trunk/templates/header.tpl 2008-10-17 17:17:21 UTC (rev 730) +++ trunk/templates/header.tpl 2008-10-17 20:18:46 UTC (rev 731) @@ -30,12 +30,14 @@ <span class="button_green"><a href="index.php?action=Logout">[l]Logout[/l]</a></span> <!-- END logoutLink_block --> </p> + <!-- BEGIN questionButtons_block --> <p> <span class="button_light"><a href="{addQuestionHref}">[l]Submit Question[/l]</a></span> <!-- BEGIN manageQuestionsLink_block --> <span class="button_light"><a href="{manageQuestionsHref}">[l]Manage Questions[/l]</a></span> <!-- END manageQuestionsLink_block --> </p> + <!-- END questionButtons_block --> </div> </div><!--end head--> Modified: trunk/views/AddQuestion.php =================================================================== --- trunk/views/AddQuestion.php 2008-10-17 17:17:21 UTC (rev 730) +++ trunk/views/AddQuestion.php 2008-10-17 20:18:46 UTC (rev 731) @@ -15,6 +15,9 @@ class AddQuestion extends view { function dispatch() { + if (!$this->configuration->getConfigValue('questionsEnabled')) { + die('The questions functionalities have been disabled'); + } $this->tpl->set_file('addQuestion', 'AddQuestion.tpl'); $this->tpl->set_block('addQuestion', 'categories_block', 'categories'); Modified: trunk/views/EditPreferences.php =================================================================== --- trunk/views/EditPreferences.php 2008-10-17 17:17:21 UTC (rev 730) +++ trunk/views/EditPreferences.php 2008-10-17 20:18:46 UTC (rev 731) @@ -40,6 +40,8 @@ 'publishKB_no_selected' => $this->configuration->getConfigValue('publishKB') == '0'? 'selected="true"' : '', 'anonymousRegistration_yes_selected' => $this->configuration->getConfigValue('anonymousRegistration') == '1'? 'selected="true"' : '', 'anonymousRegistration_no_selected' => $this->configuration->getConfigValue('anonymousRegistration') == '0'? 'selected="true"' : '', + 'questionsEnabled_yes_selected' => $this->configuration->getConfigValue('questionsEnabled') == '1'? 'selected="true"' : '', + 'questionsEnabled_no_selected' => $this->configuration->getConfigValue('questionsEnabled') == '0'? 'selected="true"' : '', 'publishArticlesAuto_yes_selected' => $this->configuration->getConfigValue('publishArticlesAuto') == '1'? 'selected="true" ': '', 'publishArticlesAuto_no_selected' => $this->configuration->getConfigValue('publishArticlesAuto') == '0'? 'selected="true" ': '', 'publishBookmarksAuto_yes_selected' => $this->configuration->getConfigValue('publishBookmarksAuto') == '1'? 'selected="true" ': '', Modified: trunk/views/MainView.php =================================================================== --- trunk/views/MainView.php 2008-10-17 17:17:21 UTC (rev 730) +++ trunk/views/MainView.php 2008-10-17 20:18:46 UTC (rev 731) @@ -278,37 +278,39 @@ } // ** UNANSWERED QUESTIONS LIST ** - $questionGateway = new QuestionGateway; - $questions = $questionGateway->getQuestions($catId, true); - $firstIteration = true; - while ($question = $questions->fetch()) { - unset($this->tPath); - if ($question->getCategoryId() > 0) { - $path = $this->_getCategoryPath($question->getCategoryId(), 'MainView', false); - $this->tpl->set_var('questionCategory', $this->user->lang('in %s', $path)); - } else { - $this->tpl->set_var('questionCategory', ''); + if ($this->configuration->getConfigValue('questionsEnabled')) { + $questionGateway = new QuestionGateway; + $questions = $questionGateway->getQuestions($catId, true); + $firstIteration = true; + while ($question = $questions->fetch()) { + unset($this->tPath); + if ($question->getCategoryId() > 0) { + $path = $this->_getCategoryPath($question->getCategoryId(), 'MainView', false); + $this->tpl->set_var('questionCategory', $this->user->lang('in %s', $path)); + } else { + $this->tpl->set_var('questionCategory', ''); + } + $this->tpl->set_var(array( + 'answerLink' => Library::getLink(array('view' => 'EditArticle', 'qId' => $question->getId())), + 'questionSummary' => $question->getContents(), + 'questionUserName' => $question->getUserName(), + )); + + if (!$this->user->isAnonymous()) { + $this->tpl->parse('answerLink', 'answerLink_block'); + } else { + $this->tpl->set_var('answerLink', ''); + } + + $this->tpl->parse('unansweredQuestionsItem', 'unansweredQuestionsItem_block', !$firstIteration); + $firstIteration = false; } - $this->tpl->set_var(array( - 'answerLink' => Library::getLink(array('view' => 'EditArticle', 'qId' => $question->getId())), - 'questionSummary' => $question->getContents(), - 'questionUserName' => $question->getUserName(), - )); - - if (!$this->user->isAnonymous()) { - $this->tpl->parse('answerLink', 'answerLink_block'); + if ($firstIteration) { + $this->tpl->set_var('unansweredQuestions', ''); } else { - $this->tpl->set_var('answerLink', ''); + $this->tpl->parse('unansweredQuestions', 'unansweredQuestions_block'); } - - $this->tpl->parse('unansweredQuestionsItem', 'unansweredQuestionsItem_block', !$firstIteration); - $firstIteration = false; } - if ($firstIteration) { - $this->tpl->set_var('unansweredQuestions', ''); - } else { - $this->tpl->parse('unansweredQuestions', 'unansweredQuestions_block'); - } $this->tpl->pparse('out', 'main'); } Modified: trunk/views/ManageQuestions.php =================================================================== --- trunk/views/ManageQuestions.php 2008-10-17 17:17:21 UTC (rev 730) +++ trunk/views/ManageQuestions.php 2008-10-17 20:18:46 UTC (rev 731) @@ -16,6 +16,10 @@ class ManageQuestions extends View { function dispatch() { + if (!$this->configuration->getConfigValue('questionsEnabled')) { + die('The questions functionalities have been disabled'); + } + $catId = isset($_GET['catId'])? (int)$_GET['catId'] : 0; $this->tpl->set_file('manageQuestions', 'ManageQuestions.tpl'); Modified: trunk/views/View.php =================================================================== --- trunk/views/View.php 2008-10-17 17:17:21 UTC (rev 730) +++ trunk/views/View.php 2008-10-17 20:18:46 UTC (rev 731) @@ -73,7 +73,8 @@ $this->tpl->set_block('header', 'loginLink_block', 'loginLink'); $this->tpl->set_block('header', 'registerLink_block', 'registerLink'); $this->tpl->set_block('header', 'welcome_block', 'welcome'); - $this->tpl->set_block('header', 'manageQuestionsLink_block', 'manageQuestionsLink'); + $this->tpl->set_block('header', 'questionButtons_block', 'questionButtons'); + $this->tpl->set_block('questionButtons_block', 'manageQuestionsLink_block', 'manageQuestionsLink'); if ($this->user->isAnonymous()) { $this->tpl->set_var('welcome', ''); @@ -89,6 +90,12 @@ $this->tpl->parse('manageQuestionsLink', 'manageQuestionsLink_block'); } + if ($this->configuration->getConfigValue('questionsEnabled')) { + $this->tpl->parse('questionButtons', 'questionButtons_block'); + } else { + $this->tpl->set_var('questionButtons', ''); + } + if ($this->user->isAnonymous() && $this->configuration->getConfigValue('anonymousRegistration')) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-10-17 17:17:26
|
Revision: 730 http://sciret.svn.sourceforge.net/sciret/?rev=730&view=rev Author: alpeb Date: 2008-10-17 17:17:21 +0000 (Fri, 17 Oct 2008) Log Message: ----------- show different title in template, depending on whether the item is being edited or added Modified Paths: -------------- trunk/templates/EditArticle.tpl trunk/templates/EditBookmark.tpl trunk/templates/EditUser.tpl trunk/views/EditArticle.php trunk/views/EditBookmark.php trunk/views/EditUser.php Modified: trunk/templates/EditArticle.tpl =================================================================== --- trunk/templates/EditArticle.tpl 2008-10-17 17:16:32 UTC (rev 729) +++ trunk/templates/EditArticle.tpl 2008-10-17 17:17:21 UTC (rev 730) @@ -17,7 +17,14 @@ <!-- Source file for Rich Text Editor--> <script src="javascript/yui/build/editor/editor-beta-min.js"></script> -<h1>Add Article</h1> +<h1> + <!-- BEGIN addArticleTitle_block --> + [l]Add Article[/l] + <!-- END addArticleTitle_block --> + <!-- BEGIN editArticleTitle_block --> + [l]Edit Article[/l] + <!-- END editArticleTitle_block --> +</h1> <form name="saveArticleForm" method="POST" action="{formAction}"> <input type="hidden" name="draft" value="0" /> Modified: trunk/templates/EditBookmark.tpl =================================================================== --- trunk/templates/EditBookmark.tpl 2008-10-17 17:16:32 UTC (rev 729) +++ trunk/templates/EditBookmark.tpl 2008-10-17 17:17:21 UTC (rev 730) @@ -9,7 +9,14 @@ */ --> -<h1>Add Bookmark</h1> +<h1> + <!-- BEGIN editBookmarkTitle_block --> + [l]Edit Bookmark[/l] + <!-- END editBookmarkTitle_block --> + <!-- BEGIN addBookmarkTitle_block --> + [l]Add Bookmark[/l] + <!-- END addBookmarkTitle_block --> +</h1> <form name="saveArticleForm" method="POST" action="{formAction}"> <input type="hidden" name="draft" value="0" /> Modified: trunk/templates/EditUser.tpl =================================================================== --- trunk/templates/EditUser.tpl 2008-10-17 17:16:32 UTC (rev 729) +++ trunk/templates/EditUser.tpl 2008-10-17 17:17:21 UTC (rev 730) @@ -9,7 +9,14 @@ */ --> -<h1>[l]Edit {userName}[l]</h1> +<h1> + <!-- BEGIN editUserTitle_block --> + [l]Edit {userName}[/l] + <!-- END editUserTitle_block --> + <!-- BEGIN addUserTitle_block --> + [l]New User[/l] + <!-- END addUserTitle_block --> +</h1> <form method="post" action="{formAction}"> <input type="hidden" name="userId" value="{userId}" /> Modified: trunk/views/EditArticle.php =================================================================== --- trunk/views/EditArticle.php 2008-10-17 17:16:32 UTC (rev 729) +++ trunk/views/EditArticle.php 2008-10-17 17:17:21 UTC (rev 730) @@ -20,6 +20,8 @@ $selectedCategory = 0; $this->tpl->set_file('edit_article', 'EditArticle.tpl'); + $this->tpl->set_block('edit_article', 'addArticleTitle_block', 'addArticleTitle'); + $this->tpl->set_block('edit_article', 'editArticleTitle_block', 'editArticleTitle'); $this->tpl->set_block('edit_article', 'answer_question_block', 'answer_question'); $this->tpl->set_block('edit_article', 'article_id_block', 'article_id'); $this->tpl->set_block('edit_article', 'usage_block', 'usage_id'); @@ -64,6 +66,8 @@ $this->tpl->set_var('removeExpDateLinkDisplay', ''); } + $this->tpl->parse('editArticleTitle', 'editArticleTitle_block'); + $this->tpl->set_var('addArticleTitle', ''); $this->tpl->parse('article_id', 'article_id_block'); if ($this->user->isAdmin()) { @@ -102,6 +106,9 @@ $this->tpl->set_var('publicationNotice', $this->user->lang('Your article won\'t be available publicly until it is explicitly set as "Published"')); } + $this->tpl->parse('addArticleTitle', 'addArticleTitle_block'); + $this->tpl->set_var('editArticleTitle', ''); + $this->tpl->set_var('usage_id', ''); } $this->tpl->parse('saveAsDraftButton', 'saveAsDraftButton_block'); Modified: trunk/views/EditBookmark.php =================================================================== --- trunk/views/EditBookmark.php 2008-10-17 17:16:32 UTC (rev 729) +++ trunk/views/EditBookmark.php 2008-10-17 17:17:21 UTC (rev 730) @@ -19,6 +19,8 @@ $selectedCategory = 0; $this->tpl->set_file('edit_bookmark', 'EditBookmark.tpl'); + $this->tpl->set_block('edit_bookmark', 'editBookmarkTitle_block', 'editBookmarkTitle'); + $this->tpl->set_block('edit_bookmark', 'addBookmarkTitle_block', 'addBookmarkTitle'); $this->tpl->set_block('edit_bookmark', 'bookmark_id_block', 'bookmark_id'); $this->tpl->set_block('edit_bookmark', 'categories_block', 'categories'); $this->tpl->set_block('edit_bookmark', 'saveAsDraftButton_block', 'saveAsDraftButton'); @@ -50,6 +52,8 @@ $this->tpl->set_var('removeExpDateLinkDisplay', ''); } + $this->tpl->parse('editBookmarkTitle', 'editBookmarkTitle_block'); + $this->tpl->set_var('addBookmarkTitle', ''); $this->tpl->parse('bookmark_id', 'bookmark_id_block'); $selectedCategory = $article->getCategoryId(); } else { @@ -66,6 +70,8 @@ } else { $this->tpl->set_var('publicationNotice', $this->user->lang('Your bookmark won\'t be available publicly until it is explicitly set as "Published"')); } + $this->tpl->parse('addBookmarkTitle', 'addBookmarkTitle_block'); + $this->tpl->set_var('editBookmarkTitle', ''); $this->tpl->parse('saveAsDraftButton', 'saveAsDraftButton_block'); } Modified: trunk/views/EditUser.php =================================================================== --- trunk/views/EditUser.php 2008-10-17 17:16:32 UTC (rev 729) +++ trunk/views/EditUser.php 2008-10-17 17:17:21 UTC (rev 730) @@ -24,6 +24,8 @@ $userId = isset($_GET['userId'])? (int)$_GET['userId'] : 0; $this->tpl->set_file('addUser', 'EditUser.tpl'); + $this->tpl->set_block('addUser', 'editUserTitle_block', 'editUserTitle'); + $this->tpl->set_block('addUser', 'addUserTitle_block', 'addUserTitle'); $this->tpl->set_block('addUser', 'adminAccess_block', 'adminAccess'); $this->tpl->set_var('formAction', Library::getLink(array('action' => 'EditUser'))); @@ -40,6 +42,9 @@ 'password2' => '', 'checkedAdminAccess' => $user->isAdmin()? 'checked="true" ' : '', )); + + $this->tpl->parse('editUserTitle', 'editUserTitle_block'); + $this->tpl->set_var('addUserTitle', ''); } else { $this->tpl->set_var(array( 'userId' => 0, @@ -51,6 +56,9 @@ 'password2' => isset($_SESSION['formFields']['password'])? $_SESSION['formFields']['password'] : '', 'checkedAdminAccess' => (isset($_SESSION['formFields']['checkedAdminAccess']) && $_SESSION['formFields']['checkedAdminAccess'])? 'checked="true"' : '', )); + + $this->tpl->parse('addUserTitle', 'addUserTitle_block'); + $this->tpl->set_var('editUserTitle', ''); } if ($this->user->isAdmin()) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-10-17 17:16:33
|
Revision: 729 http://sciret.svn.sourceforge.net/sciret/?rev=729&view=rev Author: alpeb Date: 2008-10-17 17:16:32 +0000 (Fri, 17 Oct 2008) Log Message: ----------- fixed closing language tag Modified Paths: -------------- trunk/templates/AddQuestion.tpl trunk/templates/EditCategories.tpl trunk/templates/ManageArticles.tpl trunk/templates/ManageQuestions.tpl Modified: trunk/templates/AddQuestion.tpl =================================================================== --- trunk/templates/AddQuestion.tpl 2008-10-17 17:15:27 UTC (rev 728) +++ trunk/templates/AddQuestion.tpl 2008-10-17 17:16:32 UTC (rev 729) @@ -10,7 +10,7 @@ --> -<h1>[l]Submit Questions[l]</h1> +<h1>[l]Submit Question[/l]</h1> <form method=POST action="{formAction}"> <table width="100%" cellpadding="5" cellspacing="0" border="0"> Modified: trunk/templates/EditCategories.tpl =================================================================== --- trunk/templates/EditCategories.tpl 2008-10-17 17:15:27 UTC (rev 728) +++ trunk/templates/EditCategories.tpl 2008-10-17 17:16:32 UTC (rev 729) @@ -18,7 +18,7 @@ } </script> -<h1>[l]Manage Categories[l]</h1> +<h1>[l]Manage Categories[/l]</h1> <table cellpadding="3" cellspacing="2" border="0" class="table1"> <tr> @@ -59,4 +59,4 @@ </table> <div class="toolbar"> <input type="button" value="[l]Add Category[/l]" onclick="location.href = '{addCatRedirect}'" /> - </div> \ No newline at end of file + </div> Modified: trunk/templates/ManageArticles.tpl =================================================================== --- trunk/templates/ManageArticles.tpl 2008-10-17 17:15:27 UTC (rev 728) +++ trunk/templates/ManageArticles.tpl 2008-10-17 17:16:32 UTC (rev 729) @@ -11,7 +11,7 @@ <!-- BEGIN filterUnpublished_block --> -<h1>[l]Manage Articles[l]</h1> +<h1>[l]Manage Articles[/l]</h1> <table width="100%" cellpadding="3" cellspacing="2" style=''> <tr> Modified: trunk/templates/ManageQuestions.tpl =================================================================== --- trunk/templates/ManageQuestions.tpl 2008-10-17 17:15:27 UTC (rev 728) +++ trunk/templates/ManageQuestions.tpl 2008-10-17 17:16:32 UTC (rev 729) @@ -18,7 +18,7 @@ } </script> -<h1>[l]Manage Questions[l]</h1> +<h1>[l]Manage Questions[/l]</h1> <div class="filterbar"> <b>[l]Category[/l]:</b> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-10-17 17:15:30
|
Revision: 728 http://sciret.svn.sourceforge.net/sciret/?rev=728&view=rev Author: alpeb Date: 2008-10-17 17:15:27 +0000 (Fri, 17 Oct 2008) Log Message: ----------- re-added bottom-padding for the todo's dropdown, because otherwise the 'add new' button will be hidden (happens to me with FF/Ubuntu) Modified Paths: -------------- trunk/style.css Modified: trunk/style.css =================================================================== --- trunk/style.css 2008-10-17 07:42:08 UTC (rev 727) +++ trunk/style.css 2008-10-17 17:15:27 UTC (rev 728) @@ -699,6 +699,7 @@ #todo { vertical-align: middle; + padding-bottom: 5px; } /* end panel_right */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pan...@us...> - 2008-10-17 07:42:29
|
Revision: 727 http://sciret.svn.sourceforge.net/sciret/?rev=727&view=rev Author: pankrupski Date: 2008-10-17 07:42:08 +0000 (Fri, 17 Oct 2008) Log Message: ----------- forms part1 Modified Paths: -------------- trunk/images/bg_menu.gif trunk/style.css trunk/templates/AddQuestion.tpl trunk/templates/AdvancedSearch.tpl trunk/templates/EditArticle.tpl trunk/templates/EditBookmark.tpl trunk/templates/EditCategories.tpl trunk/templates/EditCategory.tpl trunk/templates/EditPreferences.tpl trunk/templates/EditUser.tpl trunk/templates/Login.tpl trunk/templates/MainView.tpl trunk/templates/ManageArticles.tpl trunk/templates/ManageQuestions.tpl trunk/templates/ManageUsers.tpl trunk/templates/TodosDropdown.tpl Modified: trunk/images/bg_menu.gif =================================================================== (Binary files differ) Modified: trunk/style.css =================================================================== --- trunk/style.css 2008-10-15 19:41:55 UTC (rev 726) +++ trunk/style.css 2008-10-17 07:42:08 UTC (rev 727) @@ -1,3 +1,8 @@ +/* @override + http://localhost:8888/sciret/style.css + http://mac/~pawel/muusk/rep/themes/New/style.css +*/ + /* * * @copyright Copyright (C) 2005-2008 Keyboard Monkeys Ltd. http://www.kb-m.com * * @license http://www.fsf.org/copyleft/lgpl.html GNU Lesser General Public License @@ -228,21 +233,25 @@ margin-right: 17px; margin-left: 30px; height: 35px; - font-size: 1.2em; + font-size: 1.5em; } #menu a { background-color: #fff; - color: #181818; + color: #3e5164; font-weight: bold; font-size: 0.7em; - margin-right: 3px; + margin-right: 2px; padding: 10px 10px 5px; + border-bottom: 1px solid #acbccd; + border-right: 1px solid #acbccd; + border-left: 1px solid #acbccd; + background-image: url(images/bg_menu_a.gif); } #menu a:hover { height: 135px; - border-bottom: 5px solid #dfe61c; + text-decoration: none; } @@ -397,10 +406,31 @@ #content_left { width: 620px; float: left; + display: block; margin: 20px 20px 20px 30px; - display: block; } +#categoriesTable { + width: 610px; + height: 200px; + margin-bottom: 20px; + background: url('images/bg_categoriesTable.gif') no-repeat; +} + +.art_category { + color: #5b5b5b; + font-size: 11px; + margin-top: 5px; + text-transform: uppercase; + letter-spacing: 2px; + font-weight: bold; + margin-bottom: 20px; +} + +.art_category a { + font-weight: bold; +} + table.categoriesTable { border: 1px solid #cbeaf4; margin-bottom: 20px; @@ -424,7 +454,26 @@ margin-bottom: 40px; } +/* forms */ +form#login { + margin-top: 20px; +} + +form#login input { + margin-top: 10px; +} + +form#login #submit { + margin-top: 10px; + margin-left: 195px; +} + +.form_left { + text-align: right; + font-weight: bold; +} + /* panel_right */ #panel_right { @@ -648,6 +697,10 @@ margin: 5px; } +#todo { + vertical-align: middle; +} + /* end panel_right */ @@ -673,7 +726,6 @@ padding-right:5px; padding-bottom: 0; padding-left: 10px; - margin-top: 1px; } .button_panel a:hover { @@ -727,6 +779,85 @@ background-position: bottom left; } +/* button input */ + +.button_input { + margin-top: 20px; +} + +.button_input a { + background: transparent url('images/button_panel_a.gif') no-repeat scroll top right; + color: #004a00; + display: block; + height: 25px; + text-decoration: none; + margin-right: 0; + margin-left: 5px; + padding-right: 2px; + font-size: 1em; +} + +.button_input a span { + background: transparent url('images/button_panel_span.gif') no-repeat; + display: block; + float: right; + line-height: 25px; + padding-right:5px; + padding-bottom: 0; + padding-left: 10px; + +} + +.button_input a:hover { + background-position: bottom right; + color: #004a00; + outline: none; + text-decoration: none; +} + +.button_input a:hover span { + background-position: bottom left; +} + +/* button submit */ + +.button_input { + margin-top: 20px; +} + +.button_submit a { + background: transparent url('images/button_panel_a.gif') no-repeat scroll top right; + color: #004a00; + display: block; + height: 25px; + text-decoration: none; + margin-right: 0; + margin-left: 5px; + padding-right: 2px; + font-size: 1em; +} + +.button_submit span { + background: transparent url('images/button_panel_span.gif') no-repeat; + display: block; + float: right; + line-height: 25px; + padding-right:5px; + padding-bottom: 0; + padding-left: 10px; +} + +.td_submit { + padding-top: 10px; + text-align: right; +} + +.td_submit span { + color: #4d4d4d; + font-style: italic; + margin-right: 10px; +} + /* end buttons */ /* table */ @@ -747,21 +878,25 @@ border-style: none; } -table th { +table th, .th_h { letter-spacing: 1px; text-align: left; padding: 4px 4px 4px 8px; background: url(images/bg_table_head.jpg) no-repeat; - border: 1px solid #81a1c6; + border-top: 1px solid #81a1c6; + border-right: 1px solid #81a1c6; + border-bottom: 1px solid #81a1c6; } +.th_h { + border-left: 1px solid #81a1c6; +} + .specth { border-left: 1px solid #81a1c6; } td { - border-right: 1px solid #c7c7c7; - border-bottom: 1px solid #c7c7c7; background: #fff; padding: 4px 4px 4px 8px; color: #292929; @@ -771,6 +906,37 @@ border-left: 1px solid #c7c7c7; } +.td_h2 { + font-weight: bold; + +} + +/* table1 */ + +.filterbar { + margin-bottom: 10px; + margin-top: 10px; +} + +.toolbar { + margin-top: 20px; + text-align: right; +} + +.table1 td { + background-color: #fff; + border-right: 1px solid #e1e1e1; + border-bottom: 1px solid #e1e1e1; +} + +.table1 td.td_h { + border-left: 1px solid #e1e1e1; +} + +.table1 tr.row_off td { + background-color: #f2f3f7; +} + /* foot */ #pagination { Modified: trunk/templates/AddQuestion.tpl =================================================================== --- trunk/templates/AddQuestion.tpl 2008-10-15 19:41:55 UTC (rev 726) +++ trunk/templates/AddQuestion.tpl 2008-10-17 07:42:08 UTC (rev 727) @@ -9,7 +9,9 @@ */ --> -<div align="center" style='border:1px solid black;'> + +<h1>[l]Submit Questions[l]</h1> + <form method=POST action="{formAction}"> <table width="100%" cellpadding="5" cellspacing="0" border="0"> <tr class="th"> @@ -21,7 +23,7 @@ <td width="20%" style="text-align:right">[l]Your Name[/l]:</td><td><input type=text name="username" value="{username}" size="30"></td> </tr> <tr> - <td valign="top" style="text-align:right">[l]Question[/l]:</td><td><textarea name="contents" style="width:90%; height:30px"></textarea></td> + <td valign="top" style="text-align:right">[l]Question[/l]:</td><td><textarea name="contents" style="width:100%; height:30px"></textarea></td> </tr> <tr> <td style="text-align:right">[l]Select Category[/l]:</td> @@ -36,12 +38,12 @@ </tr> <tr> <td></td> - <td style="text-align:left"> + <td class="td_submit"> + <span>{publish}</span> <input type=submit name="submit" value="[l]Submit[/l]" /> - <b>{publish}</b> </td> </tr> </table> </form> -</div> + Modified: trunk/templates/AdvancedSearch.tpl =================================================================== --- trunk/templates/AdvancedSearch.tpl 2008-10-15 19:41:55 UTC (rev 726) +++ trunk/templates/AdvancedSearch.tpl 2008-10-17 07:42:08 UTC (rev 727) @@ -7,36 +7,36 @@ * @package Sciret * @packager Keyboard Monkeys */ ---> +--> + +<h1>[l]Advanced Search[/l]</h1> + <form method="GET" action="{formAction}"> <input type="hidden" name="view" value="SearchResults" /> <input type="hidden" name="advancedSearch" value="1" /> <table> - <tr class=th> - <th colspan=2 >[l]Advanced Search[/l]</th> - </tr> <tr class="row_off"> <td colspan="2"> <table> <tr> - <td valign="top" width=50>[l]Find Results[/l]</td> + <td class="td_h2">[l]Find Results[/l]</td> <td> <table> <tr> - <td style="text-align:right">[l]Including these words*[/l]:</td> + <td class="form_left">[l]Including these words*[/l]:</td> <td><input type="text" size=50 name="allWords"></td> </tr> <tr> - <td style="text-align:right">[l]Including the exact phrase[/l]:</td> + <td class="form_left">[l]Including the exact phrase[/l]:</td> <td><input type="text" size=50 name="phrase"></td> </tr> <tr> - <td style="text-align:right">[l]With at least one of these words*[/l]:</td> + <td class="form_left">[l]With at least one of these words*[/l]:</td> <td><input type="text" size=50 name="oneWord"></td> </tr> <tr> - <td style="text-align:right">[l]Without these words*[/l]:</td> + <td class="form_left">[l]Without these words*[/l]:</td> <td><input type="text" size=50 name="excludeWords"></td> </tr> </table> @@ -46,7 +46,7 @@ </td> </tr> <tr class="row_on"> - <td width=150 style="text-align:right">[l]Search in[/l]:</td> + <td class="form_left">[l]Search in[/l]:</td> <td> <select name="target"> <option value="all">[l]Articles and Bookmarks[/l]</option> @@ -56,7 +56,7 @@ </td> </tr> <tr class="row_off"> - <td width=150 style="text-align:right">[l]Search in category[/l]:</td> + <td class="form_left">[l]Search in category[/l]:</td> <td> <select name="category"> <option value="0">[l]All[/l]</option> @@ -68,7 +68,7 @@ </td> </tr> <tr class="row_on"> - <td style="text-align:right">[l]Publication date[/l]:</td> + <td class="form_left">[l]Publication date[/l]:</td> <td> <select name="publicationDate"> <option value="0" selected>[l]anytime[/l]</option> @@ -79,7 +79,7 @@ </td> </tr> <tr class="row_off"> - <td style="text-align:right">[l]Occurrences[/l]:</td> + <td class="form_left">[l]Occurrences[/l]:</td> <td> <select name="ocurrences"> <option value="anywhere" selected>[l]Anywhere in the article/bookmark[/l]</option> @@ -89,7 +89,7 @@ </td> </tr> <tr class="row_on"> - <td style="text-align:right">[l]Order results by[/l]:</td> + <td class="form_left">[l]Order results by[/l]:</td> <td> <select name="order"> <option value="created" selected>[l]Creation date[/l]</option> @@ -110,8 +110,8 @@ </td> </tr> <tr> - <td colspan=2 align=center style="padding: 10px 0 10px 0"> - <input type="submit" name="adv_search" value="[l]Search[/l]"> + <td colspan=2 class="td_submit"> + <input type="submit" name="adv_search" value="[l]Search[/l]"> </td> </tr> </table> Modified: trunk/templates/EditArticle.tpl =================================================================== --- trunk/templates/EditArticle.tpl 2008-10-15 19:41:55 UTC (rev 726) +++ trunk/templates/EditArticle.tpl 2008-10-17 07:42:08 UTC (rev 727) @@ -16,10 +16,12 @@ <script type="text/javascript" src="javascript/yui/build/menu/menu-min.js"></script> <!-- Source file for Rich Text Editor--> <script src="javascript/yui/build/editor/editor-beta-min.js"></script> + +<h1>Add Article</h1> <form name="saveArticleForm" method="POST" action="{formAction}"> <input type="hidden" name="draft" value="0" /> - <table width="100%" border="0" cellspacing="1" cellpadding="3" border="1" style='border:1px solid black'> + <table width="100%" border="0" cellspacing="1" cellpadding="3"> <!-- BEGIN answer_question_block --> <tr class="th"> <td colspan=2><b>{header}</b></td> @@ -107,14 +109,14 @@ </td> </tr> <tr> - <td colspan="2"> + <td colspan="2" class="td_submit"> + <span>{publicationNotice}</span> <input type="submit" value="[l]Save[/l]" onclick="return validateForm(form);" /> - <b>{publicationNotice}</b> </td> </tr> <!-- BEGIN saveAsDraftButton_block --> <tr> - <td colspan="2"> + <td colspan="2" class="td_submit"> <input type="button" value="[l]Save as Draft[/l]" onclick="saveDraft(form);" /> </td> </tr> Modified: trunk/templates/EditBookmark.tpl =================================================================== --- trunk/templates/EditBookmark.tpl 2008-10-15 19:41:55 UTC (rev 726) +++ trunk/templates/EditBookmark.tpl 2008-10-17 07:42:08 UTC (rev 727) @@ -8,10 +8,12 @@ * @packager Keyboard Monkeys */ --> + +<h1>Add Bookmark</h1> <form name="saveArticleForm" method="POST" action="{formAction}"> <input type="hidden" name="draft" value="0" /> - <table width="100%" border="0" cellspacing="1" cellpadding="3" border="1" style='border:1px solid black'> + <table width="100%" border="0" cellspacing="1" cellpadding="3"> <!-- BEGIN bookmark_id_block --> <tr class="th"> <input type="hidden" name="bookmarkId" value="{bookmarkId}" /> @@ -78,14 +80,14 @@ </td> </tr> <tr> - <td colspan="2"> + <td colspan="2" class="td_submit"> + <span>{publicationNotice}</span> <input type="submit" value="[l]Save[/l]" /> - <b>{publicationNotice}</b> </td> </tr> <!-- BEGIN saveAsDraftButton_block --> <tr> - <td colspan="2"> + <td colspan="2" class="td_submit"> <input type="button" value="[l]Save as Draft[/l]" onclick="saveDraft(form);" /> </td> </tr> Modified: trunk/templates/EditCategories.tpl =================================================================== --- trunk/templates/EditCategories.tpl 2008-10-15 19:41:55 UTC (rev 726) +++ trunk/templates/EditCategories.tpl 2008-10-17 07:42:08 UTC (rev 727) @@ -16,17 +16,20 @@ } location.href = '{deleteCatRedirect}&catId='+catId; } -</script> -<table cellpadding="3" cellspacing="2" border="0" style="margin:5px auto"> +</script> + +<h1>[l]Manage Categories[l]</h1> + +<table cellpadding="3" cellspacing="2" border="0" class="table1"> <tr> - <th>[l]Name[/l]</th> + <th class="th_h">[l]Name[/l]</th> <th>[l]Description[/l]</th> <th>[l]Icon[/l]</th> <th></th> </tr> <!-- BEGIN categories_block --> <tr class="{rowClass}"> - <td> + <td class="td_h"> <!-- BEGIN boldCategory_block --> {indent}<b>{catLabel}</b> <!-- END boldCategory_block --> @@ -53,9 +56,7 @@ </td> </tr> <!-- END categories_block --> - <tr> - <td colspan="5"> - <input type="button" value="[l]Add Category[/l]" onclick="location.href = '{addCatRedirect}'" /> - </td> - </tr> -</table> +</table> + <div class="toolbar"> + <input type="button" value="[l]Add Category[/l]" onclick="location.href = '{addCatRedirect}'" /> + </div> \ No newline at end of file Modified: trunk/templates/EditCategory.tpl =================================================================== --- trunk/templates/EditCategory.tpl 2008-10-15 19:41:55 UTC (rev 726) +++ trunk/templates/EditCategory.tpl 2008-10-17 07:42:08 UTC (rev 727) @@ -16,12 +16,12 @@ return true; } </script> + +<h1>[l]Edit/Add Category[/l]</h1> + <form method="post" action="{formAction}"> <input type="hidden" name="catId" value="{catId}" /> <table cellpadding="3" cellspacing="2" border="0" style="margin:5px auto"> - <tr class=th> - <td colspan=2 align=center><b>[l]Edit/Add Category[/l]</b></td> - </tr> <tr class="row_off"> <td>[l]Parent Category[/l]:</td> <td> Modified: trunk/templates/EditPreferences.tpl =================================================================== --- trunk/templates/EditPreferences.tpl 2008-10-15 19:41:55 UTC (rev 726) +++ trunk/templates/EditPreferences.tpl 2008-10-17 07:42:08 UTC (rev 727) @@ -9,10 +9,12 @@ */ --> +<h1>Preferences</h1> + <form name="preferencesForm" method="post" action="{formAction}"> - <table cellpadding="3" cellspacing="2" border="0" style="margin:5px auto; border:1px solid black"> + <table cellpadding="3" cellspacing="2" border="0" > <tr class="row_on"> - <td style="text-align:right; font-weight:bold">[l]Always start browsing[/l]:</td> + <td class="form_left">[l]Always start browsing[/l]:</td> <td> <select name="startBrowsing"> <option value="all" {startBrowsing_all}>[l]Articles and Bookmarks[/l]</option> @@ -22,7 +24,7 @@ </td> </tr> <tr class="row_off"> - <td style="text-align:right; font-weight:bold">[l]Number of articles per page[/l]:</td> + <td class="form_left">[l]Number of articles per page[/l]:</td> <td> <select name="articlesPerPage"> <option {articlesPerPage_10}>10</option> @@ -34,7 +36,7 @@ </td> </tr> <tr class="row_on"> - <td style="text-align:right; font-weight:bold">[l]Date format[/l]:</td> + <td class="form_left">[l]Date format[/l]:</td> <td> <select name="dateFormat"> <option value="Month Day, Year" {dateFormat_1}>[l]Month Day, Year[/l]</option> @@ -46,7 +48,7 @@ </td> </tr> <tr class="row_off"> - <td style="text-align:right; font-weight:bold">[l]Language[/l]:</td> + <td class="form_left">[l]Language[/l]:</td> <td> <select name="language"> <!-- BEGIN languages_block --> @@ -56,7 +58,7 @@ </td> </tr> <tr class="row_on"> - <td style="text-align:right; font-weight:bold">[l]Show articles from[/l]:</td> + <td class="form_left">[l]Show articles from[/l]:</td> <td> <select name="navigationType"> <option value="catAndSubCats" {catAndSubCats_selected}>[l]Current category and subcategories[/l]</option> @@ -66,7 +68,7 @@ </tr> <!-- BEGIN adminPreferences_block --> <tr class="row_off"> - <td style="text-align:right; font-weight:bold">[l]Make knowledge base public[/l]:</td> + <td class="form_left">[l]Make knowledge base public[/l]:</td> <td> <select name="publishKB"> <option value="1" {publishKB_yes_selected}>[l]Yes[/l]</option> @@ -75,7 +77,7 @@ </td> </tr> <tr class="row_on"> - <td style="text-align:right; font-weight:bold">[l]Let users open an account[/l]:</td> + <td class="form_left">[l]Let users open an account[/l]:</td> <td> <select name="anonymousRegistration"> <option value="1" {anonymousRegistration_yes_selected}>[l]Yes[/l]</option> @@ -84,7 +86,7 @@ </td> </tr> <tr class="row_off"> - <td style="text-align:right; font-weight:bold">[l]Publish articles automatically[/l]:</td> + <td class="form_left">[l]Publish articles automatically[/l]:</td> <td> <select name="publishArticlesAuto"> <option value="1" {publishArticlesAuto_yes_selected}>[l]Yes[/l]</option> @@ -93,7 +95,7 @@ </td> </tr> <tr class="row_on"> - <td style="text-align:right; font-weight:bold">[l]Publish bookmarks automatically[/l]:</td> + <td class="form_left">[l]Publish bookmarks automatically[/l]:</td> <td> <select name="publishBookmarksAuto"> <option value="1" {publishBookmarksAuto_yes_selected}>[l]Yes[/l]</option> @@ -102,7 +104,7 @@ </td> </tr> <tr class="row_off"> - <td style="text-align:right; font-weight:bold">[l]Publish comments automatically[/l]:</td> + <td class="form_left">[l]Publish comments automatically[/l]:</td> <td> <select name="publishCommentsAuto"> <option value="1" {publishCommentsAuto_yes_selected}>[l]Yes[/l]</option> @@ -111,7 +113,7 @@ </td> </tr> <tr class="row_on"> - <td style="text-align:right; font-weight:bold">[l]Publish questions automatically[/l]:</td> + <td class="form_left">[l]Publish questions automatically[/l]:</td> <td> <select name="publishQuestionsAuto"> <option value="1" {publishQuestionsAuto_yes_selected}>[l]Yes[/l]</option> @@ -120,7 +122,7 @@ </td> </tr> <tr class="row_off"> - <td style="text-align:right; font-weight:bold">[l]Internal article by default[/l]:</td> + <td class="form_left">[l]Internal article by default[/l]:</td> <td> <select name="internalByDefault"> <option value="1" {internalByDefault_yes_selected}>[l]Yes[/l]</option> @@ -129,7 +131,7 @@ </td> </tr> <tr class="row_on"> - <td style="text-align:right; font-weight:bold">[l]Allow comments and ratings[/l]:</td> + <td class="form_left">[l]Allow comments and ratings[/l]:</td> <td> <select name="allowCommentsRatings"> <option value="1" {allowCommentsRatings_yes_selected}>[l]Yes[/l]</option> @@ -138,7 +140,7 @@ </td> </tr> <tr class="row_off"> - <td style="text-align:right; font-weight:bold"> + <td class="form_left"> [l]Enable the following spam filtering services[/l]: </td> <td> @@ -148,7 +150,7 @@ </td> </tr> <tr id="trAkismetKey" class="row_off" style="display:none"> - <td style="text-align:right; font-weight:bold"> + <td class="form_left"> [l]Enter your Akismet API key[/l]:<br /> [l](You can get a free key <a href="http://akismet.com/personal/">here</a>)[/l] </td> @@ -157,7 +159,7 @@ </td> </tr> <tr id="trTypePadAntiSpamKey" class="row_off" style="display:none"> - <td style="text-align:right; font-weight:bold"> + <td class="form_left"> [l]Enter your TypePad AntiSpam API key[/l]:<br /> [l](You can get a free key <a href="http://antispam.typepad.com/info/get-api-key.html">here</a>)[/l] </td> @@ -166,7 +168,7 @@ </td> </tr> <tr class="row_on"> - <td style="text-align:right; font-weight:bold">[l]Only admin and author can modify an article[/l]:</td> + <td class="form_left">[l]Only admin and author can modify an article[/l]:</td> <td> <select name="restrictEditDelete"> <option value="1" {restrictEditDelete_yes_selected}>[l]Yes[/l]</option> @@ -175,37 +177,37 @@ </td> </tr> <tr class="row_off"> - <td style="text-align:right; font-weight:bold">[l]Days before password expires[/l]:</td> + <td class="form_left">[l]Days before password expires[/l]:</td> <td> <input type="text" name="passwordExpirationDays" value="{passwordExpirationDays}" size="2" /> </td> </tr> <tr class="row_on"> - <td style="text-align:right; font-weight:bold">[l]Send mail from (name)[/l]:</td> + <td class="form_left">[l]Send mail from (name)[/l]:</td> <td> <input type="text" name="mailFromName" value="{mailFromName}"/> </td> </tr> <tr class="row_off"> - <td style="text-align:right; font-weight:bold">[l]Send mail from (email)[/l]:</td> + <td class="form_left">[l]Send mail from (email)[/l]:</td> <td> <input type="text" name="mailFromMail" value="{mailFromMail}"/> </td> </tr> <tr class="row_on"> - <td style="text-align:right; font-weight:bold">[l]Send article reports to (email)[/l]:</td> + <td class="form_left">[l]Send article reports to (email)[/l]:</td> <td> <input type="text" name="mailArticleReports" value="{mailArticleReports}"/> </td> </tr> <tr class="row_off"> - <td style="text-align:right; font-weight:bold">[l]Send category creation request to (email)[/l]:</td> + <td class="form_left">[l]Send category creation request to (email)[/l]:</td> <td> <input type="text" name="mailCategoryRequest" value="{mailCategoryRequest}"/> </td> </tr> <tr class="row_on"> - <td style="text-align:right; font-weight:bold">[l]Send mail using[/l]:</td> + <td class="form_left">[l]Send mail using[/l]:</td> <td> <select name="mailTransport" onchange="SCIRET.preferences.toggleSMTPSettings(value);"> <option value="sendmail" {sendMailUsing_sendmail_selected}>Sendmail</option> @@ -215,7 +217,7 @@ </tr> <tr class="row_off" id="smtp_options" {showSMTPOptions}> <td colspan="2"> - <p style="text-align:center; font-weight:bold">[l]SMTP settings[/l]:</p> + <p class="form_left">[l]SMTP settings[/l]:</p> <ul> <li>[l]SMTP server[/l]: <input type="text" name="smtpServer" value="{smtpServer}"/></li> <li>[l]SMTP user[/l]: <input type="text" name="smtpUser" value="{smtpUser}"/></li> @@ -225,7 +227,7 @@ </td> </tr> <tr class="row_on"> - <td style="text-align:right; font-weight:bold"> + <td class="form_left"> [l]Check uploaded files for viruses[/l]:<br /> [l](You need to have <a href="http://www.clamav.net">ClamAV</a> in your system)[/l] </td> @@ -238,7 +240,7 @@ </tr> <!-- END adminPreferences_block --> <tr> - <td colspan="2"><input type="submit" value="[l]Save[/l]" /></td> + <td colspan="2" class="td_submit"><input type="submit" value="[l]Save[/l]" /></td> </tr> </table> </form> Modified: trunk/templates/EditUser.tpl =================================================================== --- trunk/templates/EditUser.tpl 2008-10-15 19:41:55 UTC (rev 726) +++ trunk/templates/EditUser.tpl 2008-10-17 07:42:08 UTC (rev 727) @@ -9,9 +9,11 @@ */ --> +<h1>[l]Edit {userName}[l]</h1> + <form method="post" action="{formAction}"> <input type="hidden" name="userId" value="{userId}" /> - <table style="border:1px solid black; margin:5px auto"> + <table> <tr class=th> <td colspan=2 align=center><b>[l]User Data[/l]</b></td> </tr> Modified: trunk/templates/Login.tpl =================================================================== --- trunk/templates/Login.tpl 2008-10-15 19:41:55 UTC (rev 726) +++ trunk/templates/Login.tpl 2008-10-17 07:42:08 UTC (rev 727) @@ -7,22 +7,23 @@ * @package Sciret * @packager Keyboard Monkeys */ ---> +--> -<form method="post" action="index.php?action=Login" style="text-align:center" > - <table cellpadding="10" cellspacing="0" border="0" style="margin: 20px auto; border:1px solid blue"> - <tr> - <td>[l]Username[/l]:</td> - <td><input type="text" name="username" /></td> - </tr> - <tr> - <td>[l]Password[/l]:</td> - <td><input type="password" name="password" /></td> - </tr> - <tr> - <td colspan="2" style="text-align:right"><input type="submit" value="[l]Login[/l]" /></td> - </tr> - </table> +<h1>Login</h1> + +<form method="post" action="index.php?action=Login" id="login" > + <table> + <tr> + <td class="form_left">[l]Username[/l]:</td> + <td><input type="text" name="username" /></td> + </tr> + <tr> + <td class="form_left">[l]Password[/l]:</td> + <td><input type="password" name="password" /></td> + </tr> + </table> + <p id="submit"><input type="submit" value="[l]Login[/l]" /></p> + <!-- BEGIN register_block --> <div> You don't have an account? Modified: trunk/templates/MainView.tpl =================================================================== --- trunk/templates/MainView.tpl 2008-10-15 19:41:55 UTC (rev 726) +++ trunk/templates/MainView.tpl 2008-10-17 07:42:08 UTC (rev 727) @@ -7,7 +7,8 @@ * @package Sciret * @packager Keyboard Monkeys */ ---> +--> + <script type="text/javascript"> YAHOO.util.Event.onDOMReady(function() { var mainViewTabs = new YAHOO.widget.TabView("mainViewTabs"); @@ -24,7 +25,7 @@ </ul> <div class="yui-content"> <div> - <table class="categoriesTable"> + <table id="categoriesTable"> <tr> <td>{path}</td> </tr> @@ -35,7 +36,13 @@ </table> </td> </tr> + </table> + + </td> + </tr> +</table> + [l]Total Number of Categories:[/l] {numCats}<br /> <!-- BEGIN totalNumArts_block --> @@ -50,6 +57,7 @@ <a href="{requestCatLink}">[l]Request the creation of a category[/l]</a> </div> <!-- END requestCat_block --> + </div> <div> <div class="title_view"> @@ -78,6 +86,7 @@ </p> </div><!--end title_view--> + <!-- BEGIN articles_block --> <h2> <i>({art_num}) </i> Modified: trunk/templates/ManageArticles.tpl =================================================================== --- trunk/templates/ManageArticles.tpl 2008-10-15 19:41:55 UTC (rev 726) +++ trunk/templates/ManageArticles.tpl 2008-10-17 07:42:08 UTC (rev 727) @@ -10,6 +10,9 @@ --> <!-- BEGIN filterUnpublished_block --> + +<h1>[l]Manage Articles[l]</h1> + <table width="100%" cellpadding="3" cellspacing="2" style=''> <tr> <td> @@ -28,9 +31,9 @@ </tr> </table> <!-- END filterUnpublished_block --> -<table width="100%" cellpadding="3" cellspacing="2" style='border:1px solid black;'> +<table width="100%" cellpadding="3" cellspacing="2" class="table1"> <tr> - <th> + <th class="th_h"> <a href="{headerSortLink}&tableSort=title_{directionTitle}">[l]Title[/l]</a> {sortByTitleArrow} </th> @@ -54,7 +57,7 @@ </tr> <!-- BEGIN articleRow_block --> <tr class="{rowClass}"> - <td> + <td class="td_h"> <img src="images/{articleImage}" /> <a href="{articleLink}" {articleLinkTarget}>{articleTitle}</a> </td> Modified: trunk/templates/ManageQuestions.tpl =================================================================== --- trunk/templates/ManageQuestions.tpl 2008-10-15 19:41:55 UTC (rev 726) +++ trunk/templates/ManageQuestions.tpl 2008-10-17 07:42:08 UTC (rev 727) @@ -16,8 +16,11 @@ location.href = '{filterLink}&catId=' + category + '&published=' + published; } -</script> -<div style="text-align:left"> +</script> + +<h1>[l]Manage Questions[l]</h1> + +<div class="filterbar"> <b>[l]Category[/l]:</b> <select id="category" name="category" onchange="changeFilter()" > <option value="0">[l]All[/l]</option> @@ -31,9 +34,9 @@ <option value="published" {publishedSelected}>[l]Published[/l]</option> </select> </div> -<table cellpadding="3" cellspacing="2" border="0" style="margin:5px auto"> +<table cellpadding="3" cellspacing="2" class="table1"> <tr> - <th>[l]Category[/l]</th> + <th class="th_h">[l]Category[/l]</th> <th>[l]Poster[/l]</th> <th>[l]Creation Date[/l]</th> <th>[l]Published[/l]</th> @@ -42,7 +45,7 @@ </tr> <!-- BEGIN questions_block --> <tr class="{rowClass}"> - <td>{category}</td> + <td class="td_h">{category}</td> <td>{poster}</td> <td>{creationDate}</td> <td style="text-align:center">{published}</td> Modified: trunk/templates/ManageUsers.tpl =================================================================== --- trunk/templates/ManageUsers.tpl 2008-10-15 19:41:55 UTC (rev 726) +++ trunk/templates/ManageUsers.tpl 2008-10-17 07:42:08 UTC (rev 727) @@ -17,10 +17,13 @@ location.href = '{deleteUserLink}&userId='+userId; } -</script> -<table cellpadding="3" cellspacing="2" border="0" style="margin:5px auto"> +</script> + +<h1>Manage Users</h1> + +<table cellpadding="3" cellspacing="2" class="table1"> <tr> - <th>[l]Name[/l]</th> + <th class="th_h">[l]Name[/l]</th> <th>[l]UserName[/l]</th> <th>[l]E-mail[/l]</th> <th>[l]Admin rights[/l]</th> @@ -28,7 +31,7 @@ </tr> <!-- BEGIN usersBlock --> <tr class="{rowClass}"> - <td>{name}</td> + <td class="td_h">{name}</td> <td>{userName}</td> <td>{email}</td> <td style="text-align:center">{adminRights}</td> @@ -40,9 +43,7 @@ </td> </tr> <!-- END usersBlock --> - <tr> - <td colspan="5"> - <input type="button" value="[l]Add User[/l]" onclick="location.href='{AddUserLink}'" /> - </td> - </tr> </table> + <div class="toolbar"> + <input type="button" value="[l]Add User[/l]" onclick="location.href='{AddUserLink}'" /> + </div> Modified: trunk/templates/TodosDropdown.tpl =================================================================== --- trunk/templates/TodosDropdown.tpl 2008-10-15 19:41:55 UTC (rev 726) +++ trunk/templates/TodosDropdown.tpl 2008-10-17 07:42:08 UTC (rev 727) @@ -9,7 +9,7 @@ */ --> -<div style="padding-bottom:5px"> +<div id="todo"> <!-- BEGIN todosList_block --> <ul> <!-- BEGIN todoItem_block --> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-10-15 19:41:59
|
Revision: 726 http://sciret.svn.sourceforge.net/sciret/?rev=726&view=rev Author: alpeb Date: 2008-10-15 19:41:55 +0000 (Wed, 15 Oct 2008) Log Message: ----------- added some temporary hacks to share user obj in session with other apps Modified Paths: -------------- trunk/index.php trunk/models/User.php Modified: trunk/index.php =================================================================== --- trunk/index.php 2008-10-15 18:57:19 UTC (rev 725) +++ trunk/index.php 2008-10-15 19:41:55 UTC (rev 726) @@ -109,10 +109,17 @@ $users = new Users(); $user = $auth->getStorage()->read(); $user->init(); - if ($user->app == 'monkeys') { + + /** + * This is to juggle between this apps user obj and the other apps user objs. + * @todo: remove this when LDAP support is implemented + */ + if ($user->app != 'sciret') { $publicId = $user->publicId; $user = $users->getRowInstance($publicId); $user->app = 'sciret'; + $user->publicId = $publicId; + $user->init(); $auth->getStorage()->write($user); } Modified: trunk/models/User.php =================================================================== --- trunk/models/User.php 2008-10-15 18:57:19 UTC (rev 725) +++ trunk/models/User.php 2008-10-15 19:41:55 UTC (rev 726) @@ -35,12 +35,19 @@ $this->publicId = $this->id; } - if ($this->preferences) { - // this has to go here because when the object has been fetched from the DB, - // when init() is called it already has the fields filled in. - // It has to go under __set() below too, because when the object is initialized through - // createRow(), then when init() is called the fields haven't been initialized yet :/ - $this->_initPreferencesArr($this->preferences); + /** + * Might throw an exception when using user object comming from another app + * @todo: remove this when LDAP support is implemented + */ + try { + if ($this->preferences) { + // this has to go here because when the object has been fetched from the DB, + // when init() is called it already has the fields filled in. + // It has to go under __set() below too, because when the object is initialized through + // createRow(), then when init() is called the fields haven't been initialized yet :/ + $this->_initPreferencesArr($this->preferences); + } + } catch (Zend_Db_Table_Row_Exception $e) { } } @@ -77,6 +84,11 @@ return parent::__set($name, $value); } + public function __sleep() + { + return array_merge(array('app', 'publicId'), parent::__sleep()); + } + public function save() { $this->preferences = serialize($this->_preferencesArr); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-10-15 18:57:38
|
Revision: 725 http://sciret.svn.sourceforge.net/sciret/?rev=725&view=rev Author: alpeb Date: 2008-10-15 18:57:19 +0000 (Wed, 15 Oct 2008) Log Message: ----------- implemented REST API Modified Paths: -------------- trunk/flowMap.php trunk/models/ArticleGateway.php Added Paths: ----------- trunk/models/RestApi.php trunk/views/Api.php Modified: trunk/flowMap.php =================================================================== --- trunk/flowMap.php 2008-10-15 18:25:37 UTC (rev 724) +++ trunk/flowMap.php 2008-10-15 18:57:19 UTC (rev 725) @@ -46,6 +46,7 @@ 'Upgrade' => array(User::ROLE_ANONYMOUS, true, true, true, false), 'UpgradeOk' => array(User::ROLE_ANONYMOUS, true, true, true, false), 'ReportArticle' => array(User::ROLE_ANONYMOUS, true, true, true, false), + 'Api' => array(User::ROLE_ANONYMOUS, true, false, false, true), ); // ClassName => array(minimumRole, loadConfiguration, allowOnlyIfPublicKB(for User::ROLE_ANONYMOUS)?) Modified: trunk/models/ArticleGateway.php =================================================================== --- trunk/models/ArticleGateway.php 2008-10-15 18:25:37 UTC (rev 724) +++ trunk/models/ArticleGateway.php 2008-10-15 18:57:19 UTC (rev 725) @@ -329,13 +329,13 @@ return new ArticleIterator($resultSet, $totalNumItems); } - public function getArticlesForUser($user) + public function getArticlesForUser($userId) { $query = 'SELECT art_id, is_bookmark, q_id, title, url, expires, question, SUBSTRING(content, 1, '.EXCERPT_LENGTH.') AS excerpt, cat_id, published, draft, user_id, views, created, modified, modified_user_id, votes_1, votes_2, votes_3, votes_4, votes_5 ' . 'FROM articles ' . 'WHERE user_id=? ' . 'ORDER BY created DESC'; - $result = DB::getInstance()->query($query, $user->id); + $result = DB::getInstance()->query($query, $userId); $resultSet = $result->fetchAll(Zend_Db::FETCH_ASSOC); $query2 = 'SELECT FOUND_ROWS()'; @@ -374,6 +374,31 @@ return $result->rowCount(); } + + public function isUserRegularContributor($userId) + { + $articlesIt = self::getArticlesForUser($userId); + $articlesPerMonth = array( + 0 => 0, // current month + 1 => 0, // last month + 2 => 0, // 2 months ago + ); + $secsPerMonth = 30*24*60*60; + while ($article = $articlesIt->fetch()) { + $date = strtotime($article->getCreationDate()); + $monthsAgo = floor((time() - $date) / $secsPerMonth); + if ($monthsAgo > 2) { + break; + } + $articlesPerMonth[$monthsAgo]++; + } + + if ($articlesPerMonth[0] > 1 && $articlesPerMonth[1] > 1 && $articlesPerMonth[2] > 1) { + return true; + } else { + return false; + } + } } ?> Added: trunk/models/RestApi.php =================================================================== --- trunk/models/RestApi.php (rev 0) +++ trunk/models/RestApi.php 2008-10-15 18:57:19 UTC (rev 725) @@ -0,0 +1,37 @@ +<?php + +class RestApi +{ + public function getLatestArticles() + { + // use html_entity_decode(strip_tags()) for text nodes instead + // of just htmlspecialchars() because XML only accepts a few HTML entities + $xml ="<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; + $xml .= "<articles>\n"; + $articles = ArticleGateway::getArticles(0, true, 'latest'); + while ($article = $articles->fetch()) { + $xml .= " <article>\n" + . " <id>".$article->getId()."</id>\n" + . " <title>" + .html_entity_decode(strip_tags($article->getTitle()), ENT_NOQUOTES, 'UTF-8') + ."</title>\n" + . " <author>" + .html_entity_decode(strip_tags($article->getUser()->getFullName()), ENT_NOQUOTES, 'UTF-8') + ."</author>\n" + . " <date>".$article->getFormatedCreationDate()."</date>\n" + . " <excerpt>" + .html_entity_decode(strip_tags($article->getExcerpt()), ENT_NOQUOTES, 'UTF-8') + ."</excerpt>\n" + . " </article>\n"; + } + $xml .= "</articles>\n"; + $xml = simplexml_load_string($xml); + + return $xml; + } + + public function isUserRegularContributor($userId) + { + return ArticleGateway::isUserRegularContributor($userId); + } +} Added: trunk/views/Api.php =================================================================== --- trunk/views/Api.php (rev 0) +++ trunk/views/Api.php 2008-10-15 18:57:19 UTC (rev 725) @@ -0,0 +1,22 @@ +<?php + +/* +* @copyright Copyright (C) 2005-2008 Keyboard Monkeys Ltd http://www.kb-m.com +* @license http://www.fsf.org/copyleft/lgpl.html GNU Lesser General Public License +* @author Alejandro Pedraza +* @since Sciret 1.0 +* @package Sciret +* @packager Keyboard Monkeys +*/ + +require_once 'views/View.php'; + +class Api extends View +{ + function dispatch() + { + $server = new Zend_Rest_Server(); + $server->setClass('RestApi'); + $server->handle(); + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-10-15 18:25:45
|
Revision: 724 http://sciret.svn.sourceforge.net/sciret/?rev=724&view=rev Author: alpeb Date: 2008-10-15 18:25:37 +0000 (Wed, 15 Oct 2008) Log Message: ----------- ignore files here Property Changed: ---------------- trunk/uploads/files/ Property changes on: trunk/uploads/files ___________________________________________________________________ Added: svn:ignore + * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-10-06 18:34:21
|
Revision: 721 http://sciret.svn.sourceforge.net/sciret/?rev=721&view=rev Author: alpeb Date: 2008-10-06 17:10:58 +0000 (Mon, 06 Oct 2008) Log Message: ----------- fixed library: let use effects on table rows Modified Paths: -------------- trunk/javascript/effects-min.js trunk/javascript/effects.js Modified: trunk/javascript/effects-min.js =================================================================== --- trunk/javascript/effects-min.js 2008-10-01 23:04:13 UTC (rev 720) +++ trunk/javascript/effects-min.js 2008-10-06 17:10:58 UTC (rev 721) @@ -6,7 +6,7 @@ */ YAHOO.widget.Effects=function(){return{version:'0.8'}}();YAHOO.widget.Effects.Hide=function(inElm){this.element=YAHOO.util.Dom.get(inElm);YAHOO.util.Dom.setStyle(this.element,'display','none');YAHOO.util.Dom.setStyle(this.element,'visibility','hidden');} YAHOO.widget.Effects.Hide.prototype.toString=function(){return'Effect Hide ['+this.element.id+']';} -YAHOO.widget.Effects.Show=function(inElm){this.element=YAHOO.util.Dom.get(inElm);YAHOO.util.Dom.setStyle(this.element,'display','block');YAHOO.util.Dom.setStyle(this.element,'visibility','visible');} +YAHOO.widget.Effects.Show = function(inElm) {this.element = YAHOO.util.Dom.get(inElm);if (this.element.nodeName == "TR" && !document.all) {YAHOO.util.Dom.setStyle(this.element, 'display', 'table-row');}else{YAHOO.util.Dom.setStyle(this.element, 'display', 'block');};YAHOO.util.Dom.setStyle(this.element, 'visibility', 'visible');} YAHOO.widget.Effects.Show.prototype.toString=function(){return'Effect Show ['+this.element.id+']';} YAHOO.widget.Effects.Fade=function(inElm,opts){this.element=YAHOO.util.Dom.get(inElm);var attributes={opacity:{from:1,to:0}};this.onEffectComplete=new YAHOO.util.CustomEvent('oneffectcomplete',this);var ease=((opts&&opts.ease)?opts.ease:YAHOO.util.Easing.easeOut);var secs=((opts&&opts.seconds)?opts.seconds:1);var delay=((opts&&opts.delay)?opts.delay:false);this.effect=new YAHOO.util.Anim(this.element,attributes,secs,ease);this.effect.onComplete.subscribe(function(){YAHOO.widget.Effects.Hide(this.element);this.onEffectComplete.fire();},this,true);if(!delay){this.effect.animate();}} YAHOO.widget.Effects.Fade.prototype.animate=function(){this.effect.animate();} Modified: trunk/javascript/effects.js =================================================================== --- trunk/javascript/effects.js 2008-10-01 23:04:13 UTC (rev 720) +++ trunk/javascript/effects.js 2008-10-06 17:10:58 UTC (rev 721) @@ -50,7 +50,12 @@ YAHOO.widget.Effects.Show = function(inElm) { this.element = YAHOO.util.Dom.get(inElm); - YAHOO.util.Dom.setStyle(this.element, 'display', 'block'); + // MONKEYS FIX + if (this.element.nodeName == "TR" && !document.all) { + YAHOO.util.Dom.setStyle(this.element, 'display', 'table-row'); + } else { + YAHOO.util.Dom.setStyle(this.element, 'display', 'block'); + } YAHOO.util.Dom.setStyle(this.element, 'visibility', 'visible'); } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-10-06 17:14:10
|
Revision: 723 http://sciret.svn.sourceforge.net/sciret/?rev=723&view=rev Author: alpeb Date: 2008-10-06 17:13:07 +0000 (Mon, 06 Oct 2008) Log Message: ----------- added ability for the admin to choose whether to use Askimet, TypePad Antispam, or Bad-Behavior Modified Paths: -------------- trunk/actions/AddCommentAndRating.php trunk/actions/SavePreferences.php trunk/javascript/general.js trunk/models/AntiSpam.php trunk/templates/EditPreferences.tpl trunk/views/EditPreferences.php Modified: trunk/actions/AddCommentAndRating.php =================================================================== --- trunk/actions/AddCommentAndRating.php 2008-10-06 17:11:43 UTC (rev 722) +++ trunk/actions/AddCommentAndRating.php 2008-10-06 17:13:07 UTC (rev 723) @@ -11,9 +11,15 @@ require 'actions/Action.php'; -class AddCommentAndRating extends Action { +class AddCommentAndRating extends Action +{ - function dispatch() { + function dispatch() + { + if ($this->configuration->getConfigValue('badBehaviorEnabled')) { + require 'libs/bad-behavior/bad-behavior-generic.php'; + } + $artId = isset($_GET['artId'])? (int)$_GET['artId'] : 0; if ($_POST['comment_box'] != '' && $_POST['commentUserName'] == '') { exit; @@ -22,30 +28,17 @@ $message = ''; if ($_POST['comment_box'] != '') { - $antiSpam = new AntiSpam($this->configuration); - try { - $data = array( - 'user_ip' => $_SERVER['REMOTE_ADDR'], - 'user_agent' => $_SERVER['HTTP_USER_AGENT'], - 'referer' => isset($_SERVER['HTTP_REFERER'])? $_SERVER['HTTP_REFERER'] : '', - 'permalink' => Library::getBaseURL() . "/view=ViewArticle&id=$artId", - 'comment_type' => 'comment', - 'comment_author' => $_POST['commentUserName'], - 'comment_content' => $_POST['comment_box'], - ); - if ($antiSpam->isSpam($data)) { - $message = $this->user->lang('Comment detected as spam. ** DISCARDED **'); - Library::redirect(Library::getLink(array( - 'view' => 'ViewComments', - 'artId' => $artId, - 'commentsMessage' => urlencode($message) - ))); - } - } catch (Exception $e) { - // TypePad AntiSpam API Key is wrong, so nothing to do in this case :( + if ($this->configuration->getConfigValue('akismetEnabled')) { + $antiSpam = new AntiSpam($this->configuration, AntiSpam::TYPE_AKISMET); + $this->_checkForSpam($antiSpam, $artId); } + if ($this->configuration->getConfigValue('typePadAntiSpamEnabled')) { + $antiSpam = new AntiSpam($this->configuration, AntiSpam::TYPE_TYPEPAD); + $this->_checkForSpam($antiSpam, $artId); + } + $comment = new Comment; $comment->setUserName($_POST['commentUserName']); $comment->setEntered(date('Y-m-d h:i:s')); @@ -73,6 +66,30 @@ Library::redirect(Library::getLink(array('view' => 'ViewComments', 'artId' => $artId, 'commentsMessage' => urlencode($message)))); } + + private function _checkForSpam($antiSpam, $artId) + { + $data = array( + 'user_ip' => $_SERVER['REMOTE_ADDR'], + 'user_agent' => $_SERVER['HTTP_USER_AGENT'], + 'referer' => isset($_SERVER['HTTP_REFERER'])? $_SERVER['HTTP_REFERER'] : '', + 'permalink' => Library::getBaseURL() . "/view=ViewArticle&id=$artId", + 'comment_type' => 'comment', + 'comment_author' => $_POST['commentUserName'], + 'comment_content' => $_POST['comment_box'], + ); + + try { + if ($antiSpam->isSpam($data)) { + $message = $this->user->lang('Comment detected as spam. ** DISCARDED **'); + Library::redirect(Library::getLink(array( + 'view' => 'ViewComments', + 'artId' => $artId, + 'commentsMessage' => urlencode($message) + ))); + } + } catch (Exception $e) { + // TypePad AntiSpam API Key is wrong, so nothing to do in this case :( + } + } } - -?> Modified: trunk/actions/SavePreferences.php =================================================================== --- trunk/actions/SavePreferences.php 2008-10-06 17:11:43 UTC (rev 722) +++ trunk/actions/SavePreferences.php 2008-10-06 17:13:07 UTC (rev 723) @@ -55,6 +55,10 @@ $this->configuration->setConfigValue('smtpPassword', $_POST['smtpPassword']); $this->configuration->setConfigValue('smtpPort', $_POST['smtpPort']); $this->configuration->setConfigValue('useClamAV', $_POST['useClamAV']); + $this->configuration->setConfigValue('akismetEnabled', isset($_POST['akismetEnabled'])); + $this->configuration->setConfigValue('typePadAntiSpamEnabled', isset($_POST['typePadAntiSpamEnabled'])); + $this->configuration->setConfigValue('badBehaviorEnabled', isset($_POST['badBehaviorEnabled'])); + $this->configuration->setConfigValue('akismetKey', $_POST['akismetKey']); $this->configuration->setConfigValue('typePadAntiSpamKey', $_POST['typePadAntiSpamKey']); if ($_POST['useClamAV'] == '1') { @@ -66,14 +70,24 @@ } } - if ($_POST['typePadAntiSpamKey'] != '') { - $antiSpam = new AntiSpam($this->configuration); + if (isset($_POST['typePadAntiSpamEnabled'])) { + $antiSpam = new AntiSpam($this->configuration, AntiSpam::TYPE_TYPEPAD); if (!$antiSpam->verifyKey()) { $errors[] = $this->user->lang('Your TypePad AntiSpam key is wrong. Please verify.'); + $this->configuration->setConfigValue('typePadAntiSpamEnabled', false); $this->configuration->setConfigValue('typePadAntiSpamKey', ''); } } + if (isset($_POST['akismetEnabled'])) { + $antiSpam = new AntiSpam($this->configuration, AntiSpam::TYPE_AKISMET); + if (!$antiSpam->verifyKey()) { + $errors[] = $this->user->lang('Your Akismet key is wrong. Please verify.'); + $this->configuration->setConfigValue('akismetEnabled', false); + $this->configuration->setConfigValue('akismetKey', ''); + } + } + $this->configuration->save(); } Modified: trunk/javascript/general.js =================================================================== --- trunk/javascript/general.js 2008-10-06 17:11:43 UTC (rev 722) +++ trunk/javascript/general.js 2008-10-06 17:13:07 UTC (rev 723) @@ -58,6 +58,22 @@ replaceContent: function(responseObj, elId) { $(elId).innerHTML = responseObj.responseText; SCIRET.utils.evalScripts(elId); + }, + + show: function(elId, useEffects) { + if (useEffects) { + new YAHOO.widget.Effects.Appear(elId, {seconds: 0.5}); + } else { + $(elId).style.display = ""; + } + }, + + hide: function(elId, useEffects) { + if (useEffects) { + new YAHOO.widget.Effects.Fade(elId, {seconds: 0.5}); + } else { + $(elId).style.display = "none"; + } } }; }(); @@ -290,14 +306,31 @@ } } -function toggleSMTPSettings(smtp) -{ - if (smtp == 'smtp') { - new YAHOO.widget.Effects.Appear('smtp_options', {seconds: 0.5}); - } else { - new YAHOO.widget.Effects.Fade('smtp_options', {seconds: 0.5}); +SCIRET.preferences = function() { + return { + toggleKeyFields: function(useEffects) { + if (document.preferencesForm.akismetEnabled.checked) { + SCIRET.utils.show("trAkismetKey", useEffects); + } else { + SCIRET.utils.hide("trAkismetKey", useEffects); + } + + if (document.preferencesForm.typePadAntiSpamEnabled.checked) { + SCIRET.utils.show("trTypePadAntiSpamKey", useEffects); + } else { + SCIRET.utils.hide("trTypePadAntiSpamKey", useEffects); + } + }, + + toggleSMTPSettings: function(smtp) { + if (smtp == 'smtp') { + SCIRET.utils.show('smtp_options', true); + } else { + SCIRET.utils.hide('smtp_options', true); + } + } } -} +}(); // ********************************************************* // ** CALENDAR FUNCTIONS ** Modified: trunk/models/AntiSpam.php =================================================================== --- trunk/models/AntiSpam.php 2008-10-06 17:11:43 UTC (rev 722) +++ trunk/models/AntiSpam.php 2008-10-06 17:13:07 UTC (rev 723) @@ -11,25 +11,42 @@ class AntiSpam extends Zend_Service_Akismet { - const API_URL = 'api.antispam.typepad.com'; + const TYPE_AKISMET = 1; + const TYPE_TYPEPAD = 2; + const TYPEPAD_API_URL = 'api.antispam.typepad.com'; + private $_config; + private $_type; - public function __construct($config) + public function __construct($config, $type) { $this->_config = $config; + $this->_type = $type; - parent::__construct($config->getConfigValue('typePadAntiSpamKey'), - Library::getBaseURL()); + switch ($type) { + case self::TYPE_AKISMET: + parent::__construct($config->getConfigValue('akismetKey'), + Library::getBaseURL()); + break; + case self::TYPE_TYPEPAD: + parent::__construct($config->getConfigValue('typePadAntiSpamKey'), + Library::getBaseURL()); + break; + default: + throw new Exception('Wrong spam service type'); + } } protected function _post($host, $path, array $params) { - $caller = $this->_getCallerMethod(); - if (strtolower($caller) == 'verifykey') { - $host = self::API_URL; - } else { - $host = $this->getApiKey() . '.' . self::API_URL; + if ($this->_type == self::TYPE_TYPEPAD) { + $caller = $this->_getCallerMethod(); + if (strtolower($caller) == 'verifykey') { + $host = self::TYPEPAD_API_URL; + } else { + $host = $this->getApiKey() . '.' . self::TYPEPAD_API_URL; + } } return parent::_post($host, $path, $params); Modified: trunk/templates/EditPreferences.tpl =================================================================== --- trunk/templates/EditPreferences.tpl 2008-10-06 17:11:43 UTC (rev 722) +++ trunk/templates/EditPreferences.tpl 2008-10-06 17:13:07 UTC (rev 723) @@ -9,7 +9,7 @@ */ --> -<form method="post" action="{formAction}"> +<form name="preferencesForm" method="post" action="{formAction}"> <table cellpadding="3" cellspacing="2" border="0" style="margin:5px auto; border:1px solid black"> <tr class="row_on"> <td style="text-align:right; font-weight:bold">[l]Always start browsing[/l]:</td> @@ -139,7 +139,26 @@ </tr> <tr class="row_off"> <td style="text-align:right; font-weight:bold"> - [l]Enter your TypePad AntiSpam API key to be able to discard spam comments[/l]:<br /> + [l]Enable the following spam filtering services[/l]: + </td> + <td> + <input type="checkbox" name="akismetEnabled" {akismetEnabled} onclick="SCIRET.preferences.toggleKeyFields(true)" />Akismet<br /> + <input type="checkbox" name="typePadAntiSpamEnabled" {typePadAntiSpamEnabled} onclick="SCIRET.preferences.toggleKeyFields(true)" />TypePad AntiSpam<br /> + <input type="checkbox" name="badBehaviorEnabled" {badBehaviorEnabled} onclick="SCIRET.preferences.toggleKeyFields(true)" />Bad-Behavior + </td> + </tr> + <tr id="trAkismetKey" class="row_off" style="display:none"> + <td style="text-align:right; font-weight:bold"> + [l]Enter your Akismet API key[/l]:<br /> + [l](You can get a free key <a href="http://akismet.com/personal/">here</a>)[/l] + </td> + <td> + <input type="text" name="akismetKey" value="{akismetKey}"/> + </td> + </tr> + <tr id="trTypePadAntiSpamKey" class="row_off" style="display:none"> + <td style="text-align:right; font-weight:bold"> + [l]Enter your TypePad AntiSpam API key[/l]:<br /> [l](You can get a free key <a href="http://antispam.typepad.com/info/get-api-key.html">here</a>)[/l] </td> <td> @@ -188,7 +207,7 @@ <tr class="row_on"> <td style="text-align:right; font-weight:bold">[l]Send mail using[/l]:</td> <td> - <select name="mailTransport" onchange="javascript:toggleSMTPSettings(value);"> + <select name="mailTransport" onchange="SCIRET.preferences.toggleSMTPSettings(value);"> <option value="sendmail" {sendMailUsing_sendmail_selected}>Sendmail</option> <option value="smtp" {sendMailUsing_smtp_selected}>SMTP</option> </select> @@ -223,3 +242,6 @@ </tr> </table> </form> +<script> + SCIRET.preferences.toggleKeyFields(false); +</script> Modified: trunk/views/EditPreferences.php =================================================================== --- trunk/views/EditPreferences.php 2008-10-06 17:11:43 UTC (rev 722) +++ trunk/views/EditPreferences.php 2008-10-06 17:13:07 UTC (rev 723) @@ -68,6 +68,10 @@ 'smtpPort' => $this->configuration->getConfigValue('smtpPort'), 'useClamAV_yes_selected' => $this->configuration->getConfigValue('useClamAV') == '1'? 'selected="true"' : '', 'useClamAV_no_selected' => $this->configuration->getConfigValue('useClamAV') == '0'? 'selected="true"' : '', + 'akismetEnabled' => $this->configuration->getConfigValue('akismetEnabled') == '1'? 'checked="true"' : '', + 'typePadAntiSpamEnabled' => $this->configuration->getConfigValue('typePadAntiSpamEnabled') == '1'? 'checked="true"' : '', + 'badBehaviorEnabled' => $this->configuration->getConfigValue('badBehaviorEnabled') == '1'? 'checked="true"' : '', + 'akismetKey' => $this->configuration->getConfigValue('akismetKey'), 'typePadAntiSpamKey' => $this->configuration->getConfigValue('typePadAntiSpamKey'), )); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-10-06 17:12:45
|
Revision: 722 http://sciret.svn.sourceforge.net/sciret/?rev=722&view=rev Author: alpeb Date: 2008-10-06 17:11:43 +0000 (Mon, 06 Oct 2008) Log Message: ----------- added bad-behavior antispam lib Added Paths: ----------- trunk/libs/bad-behavior/ trunk/libs/bad-behavior/COPYING trunk/libs/bad-behavior/README.txt trunk/libs/bad-behavior/bad-behavior/ trunk/libs/bad-behavior/bad-behavior/banned.inc.php trunk/libs/bad-behavior/bad-behavior/blackhole.inc.php trunk/libs/bad-behavior/bad-behavior/blacklist.inc.php trunk/libs/bad-behavior/bad-behavior/common_tests.inc.php trunk/libs/bad-behavior/bad-behavior/core.inc.php trunk/libs/bad-behavior/bad-behavior/functions.inc.php trunk/libs/bad-behavior/bad-behavior/google.inc.php trunk/libs/bad-behavior/bad-behavior/housekeeping.inc.php trunk/libs/bad-behavior/bad-behavior/index.html trunk/libs/bad-behavior/bad-behavior/konqueror.inc.php trunk/libs/bad-behavior/bad-behavior/lynx.inc.php trunk/libs/bad-behavior/bad-behavior/movabletype.inc.php trunk/libs/bad-behavior/bad-behavior/mozilla.inc.php trunk/libs/bad-behavior/bad-behavior/msie.inc.php trunk/libs/bad-behavior/bad-behavior/msnbot.inc.php trunk/libs/bad-behavior/bad-behavior/opera.inc.php trunk/libs/bad-behavior/bad-behavior/post.inc.php trunk/libs/bad-behavior/bad-behavior/responses.inc.php trunk/libs/bad-behavior/bad-behavior/safari.inc.php trunk/libs/bad-behavior/bad-behavior/screener.inc.php trunk/libs/bad-behavior/bad-behavior/trackback.inc.php trunk/libs/bad-behavior/bad-behavior/version.inc.php trunk/libs/bad-behavior/bad-behavior/whitelist.inc.php trunk/libs/bad-behavior/bad-behavior-generic.php trunk/libs/bad-behavior/bad-behavior-lifetype.php trunk/libs/bad-behavior/bad-behavior-mediawiki.php trunk/libs/bad-behavior/bad-behavior-wordpress-admin.php trunk/libs/bad-behavior/bad-behavior-wordpress.php trunk/libs/bad-behavior/index.html Added: trunk/libs/bad-behavior/COPYING =================================================================== --- trunk/libs/bad-behavior/COPYING (rev 0) +++ trunk/libs/bad-behavior/COPYING 2008-10-06 17:11:43 UTC (rev 722) @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. Added: trunk/libs/bad-behavior/README.txt =================================================================== --- trunk/libs/bad-behavior/README.txt (rev 0) +++ trunk/libs/bad-behavior/README.txt 2008-10-06 17:11:43 UTC (rev 722) @@ -0,0 +1,102 @@ +=== Bad Behavior === +Tags: comment,trackback,referrer,spam,robot,antispam +Contributors: error, MarkJaquith, Firas, skeltoac +Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=error%40ioerror%2eus&item_name=Bad%20Behavior%20%28From%20WordPress%20Page%29&no_shipping=1&cn=Comments%20about%20Bad%20Behavior&tax=0¤cy_code=USD&bn=PP%2dDonationsBF&charset=UTF%2d8 +Requires at least: 1.2 +Tested up to: 2.7 +Stable tag: 2.0.24 + +Welcome to a whole new way of keeping your blog, forum, guestbook, wiki or +content management system free of link spam. Bad Behavior is a PHP-based +solution for blocking link spam and the robots which deliver it. + +Bad Behavior complements other link spam solutions by acting as a gatekeeper, +preventing spammers from ever delivering their junk, and in many cases, from +ever reading your site in the first place. This keeps your site's load down, +makes your site logs cleaner, and can help prevent denial of service +conditions caused by spammers. + +Bad Behavior also transcends other link spam solutions by working in a +completely different, unique way. Instead of merely looking at the content of +potential spam, Bad Behavior analyzes the delivery method as well as the +software the spammer is using. In this way, Bad Behavior can stop spam attacks +even when nobody has ever seen the particular spam before. + +Bad Behavior is designed to work alongside existing spam prevention services +to increase their effectiveness and efficiency. Whenever possible, you should +run it in combination with a more traditional spam prevention service. + +Bad Behavior works on, or can be adapted to, virtually any PHP-based Web +software package. Bad Behavior is available natively for WordPress, MediaWiki, +Drupal, ExpressionEngine, and LifeType, and people have successfully made it +work with Movable Type, phpBB, and many other packages. + +Installing and configuring Bad Behavior on most platforms is simple and takes +only a few minutes. In most cases, no configuration at all is needed. Simply +turn it on and stop worrying about spam! + +The core of Bad Behavior is free software released under the GNU General +Public License. (On some non-free platforms, special license terms exist for +Bad Behavior's platform connector.) + +== Installation == + +*Warning*: If you are upgrading from a 1.x.x version of Bad Behavior, +you must remove it from your system entirely, and delete all of its +database tables, before installing Bad Behavior 2.0.x. You do not need +to remove a 2.0.x version of Bad Behavior before upgrading to this +release. + +Bad Behavior has been designed to install on each host software in the +manner most appropriate to each platform. It's usually sufficient to +follow the generic instructions for installing any plugin or extension +for your host software. + +On MediaWiki, it is necessary to add a second line to LocalSettings.php +when installing the extension. Your LocalSettings.php should include +the following: + +` include_once( 'includes/DatabaseFunctions.php' ); + include( './extensions/Bad-Behavior/bad-behavior-mediawiki.php' ); + +For complete documentation and installation instructions, please visit +http://www.bad-behavior.ioerror.us/ + +== Release Notes == + += Bad Behavior 2.0 Known Issues = + +* Bad Behavior may be unable to protect cached pages on MediaWiki. + +* When upgrading from version 2.0.19 or prior on MediaWiki and WordPress, +you must remove the old version of Bad Behavior from your system manually +before manually installing the new version. Other platforms are not +affected by this issue. + +* The basic functionality of Bad Behavior on WordPress requires version 1.2 +or later. The management page for WordPress, which allows browsing Bad +Behavior's logs, requires version 2.1 or later. Users of older versions should +use phpMyAdmin to browse Bad Behavior's logs, or upgrade WordPress. + +* On WordPress when using WordPress Advanced Cache (WP-Cache) or WP-Super +Cache, Bad Behavior requires a patch to WP-Cache or WP-Super Cache in order to +protect Cached pages. Bad Behavior cannot protect Super Cached pages. + + Edit the wp-content/plugins/wp-cache/wp-cache-phase1.php or +wp-content/plugins/wp-super-cache/wp-cache-phase1.php file and find the +following two lines at around line 34 (line 56 in WP-Super Cache): + +` if (! ($meta = unserialize(@file_get_contents($meta_pathname))) ) + return;` + + Immediately after this, insert the following line: + +` require_once( ABSPATH . 'wp-content/plugins/Bad-Behavior/bad-behavior-generic.php');` + + Then visit your site. Everything should work normally, but spammers will +not be able to access your cached pages either. + +* When using Bad Behavior in conjunction with Spam Karma 2, you may see PHP +warnings when Spam Karma 2 displays its internally generated CAPTCHA. This +is a design problem in Spam Karma 2. Contact the author of Spam Karma 2 for +a fix. Added: trunk/libs/bad-behavior/bad-behavior/banned.inc.php =================================================================== --- trunk/libs/bad-behavior/bad-behavior/banned.inc.php (rev 0) +++ trunk/libs/bad-behavior/bad-behavior/banned.inc.php 2008-10-06 17:11:43 UTC (rev 722) @@ -0,0 +1,49 @@ +<?php if (!defined('BB2_CORE')) die('I said no cheating!'); + +// Functions called when a request has been denied +// This part can be gawd-awful slow, doesn't matter :) + +require_once(BB2_CORE . "/responses.inc.php"); + +function bb2_display_denial($settings, $key, $previous_key = false) +{ + if (!$previous_key) $previous_key = $key; + if ($key == "e87553e1") { + // FIXME: lookup the real key + } + // Create support key + $ip = explode(".", $_SERVER['REMOTE_ADDR']); + $ip_hex = ""; + foreach ($ip as $octet) { + $ip_hex .= str_pad(dechex($octet), 2, 0, STR_PAD_LEFT); + } + $support_key = implode("-", str_split("$ip_hex$key", 4)); + + // Get response data + $response = bb2_get_response($previous_key); + header("HTTP/1.1 " . $response['response'] . " Bad Behavior"); + header("Status: " . $response['response'] . " Bad Behavior"); +?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title>HTTP Error <?php echo $response['response']; ?></title> +</head> +<body> +<h1>Error <?php echo $response['response']; ?></h1> +<p>We're sorry, but we could not fulfill your request for +<?php echo htmlspecialchars($_SERVER['REQUEST_URI']) ?> on this server.</p> +<p><?php echo $response['explanation']; ?></p> +<p>Your technical support key is: <strong><?php echo $support_key; ?></strong></p> +<p>You can use this key to <a href="http://www.ioerror.us/bb2-support-key?key=<?php echo $support_key; ?>">fix this problem yourself</a>.</p> +<p>If you are unable to fix the problem yourself, please contact <a href="mailto:<?php echo htmlspecialchars(str_replace("@", "+nospam@nospam.", bb2_email())); ?>"><?php echo htmlspecialchars(str_replace("@", " at ", bb2_email())); ?></a> and be sure to provide the technical support key shown above.</p> +<?php +} + +function bb2_log_denial($settings, $package, $key, $previous_key=false) +{ + if (!$settings['logging']) return; + bb2_db_query(bb2_insert($settings, $package, $key)); +} + +?> Added: trunk/libs/bad-behavior/bad-behavior/blackhole.inc.php =================================================================== --- trunk/libs/bad-behavior/bad-behavior/blackhole.inc.php (rev 0) +++ trunk/libs/bad-behavior/bad-behavior/blackhole.inc.php 2008-10-06 17:11:43 UTC (rev 722) @@ -0,0 +1,51 @@ +<?php if (!defined('BB2_CORE')) die('I said no cheating!'); + +// Look up address on various blackhole lists. +// These cannot be used for GET requests under any circumstances! +function bb2_blackhole($package) { + // Only conservative lists + $bb2_blackhole_lists = array( + "sbl-xbl.spamhaus.org", // All around nasties +// "dnsbl.sorbs.net", // Old useless data. +// "list.dsbl.org", // Old useless data. +// "dnsbl.ioerror.us", // Bad Behavior Blackhole + ); + + // Things that shouldn't be blocked, from aggregate lists + $bb2_blackhole_exceptions = array( + "sbl-xbl.spamhaus.org" => array("127.0.0.4"), // CBL is problematic + "dnsbl.sorbs.net" => array("127.0.0.10",), // Dynamic IPs only + "list.dsbl.org" => array(), + "dnsbl.ioerror.us" => array(), + ); + + // Check the blackhole lists + $ip = $package['ip']; + $find = implode('.', array_reverse(explode('.', $ip))); + foreach ($bb2_blackhole_lists as $dnsbl) { + $result = gethostbynamel($find . "." . $dnsbl . "."); + if (!empty($result)) { + // Got a match and it isn't on the exception list + $result = @array_diff($result, $bb2_blackhole_exceptions[$dnsbl]); + if (!empty($result)) { + return '136673cd'; + } + } + } + return false; +} + +function bb2_httpbl($settings, $package) { + if (!$settings['httpbl_key']) return false; + + $find = implode('.', array_reverse(explode('.', $package['ip']))); + $result = gethostbynamel($settings['httpbl_key'].".${find}.dnsbl.httpbl.org."); + if (!empty($result)) { + $ip = explode('.', $result[0]); + if ($ip[0] == 127 && ($ip[3] & 7) && $ip[2] >= $settings['httpbl_threat'] && $ip[1] >= $settings['httpbl_maxage']) { + return '2b021b1f'; + } + } + return false; +} +?> Added: trunk/libs/bad-behavior/bad-behavior/blacklist.inc.php =================================================================== --- trunk/libs/bad-behavior/bad-behavior/blacklist.inc.php (rev 0) +++ trunk/libs/bad-behavior/bad-behavior/blacklist.inc.php 2008-10-06 17:11:43 UTC (rev 722) @@ -0,0 +1,122 @@ +<?php if (!defined('BB2_CORE')) die('I said no cheating!'); + +function bb2_blacklist($package) { + + // Blacklisted user agents + // These user agent strings occur at the beginning of the line. + $bb2_spambots_0 = array( + "<sc", // XSS exploit attempts + "8484 Boston Project", // video poker/porn spam + "adwords", // referrer spam + "autoemailspider", // spam harvester + "blogsearchbot-martin", // from honeypot + "CherryPicker", // spam harvester + "core-project/", // FrontPage extension exploits + "Diamond", // delivers spyware/adware + "Digger", // spam harvester + "ecollector", // spam harvester + "EmailCollector", // spam harvester + "Email Siphon", // spam harvester + "EmailSiphon", // spam harvester + "grub crawler", // misc comment/email spam + "HttpProxy", // misc comment/email spam + "Internet Explorer", // XMLRPC exploits seen + "ISC Systems iRc", // spam harvester + "Jakarta Commons", // custommised spambots + "Java 1.", // definitely a spammer + "Java/1.", // definitely a spammer + "libwww-perl", // spambot scripts + "LWP", // spambot scripts + "Microsoft URL", // spam harvester + "Missigua", // spam harvester + "MJ12bot/v1.0.8", // malicious botnet + "Movable Type", // customised spambots + "Mozilla ", // malicious software + "Mozilla/4.0(", // from honeypot + "Mozilla/4.0+(", // suspicious harvester + "MSIE", // malicious software + "NutchCVS", // unidentified robots + "Nutscrape/", // misc comment spam + "OmniExplorer", // spam harvester + "psycheclone", // spam harvester + "PussyCat ", // misc comment spam + "PycURL", // misc comment spam +// "Shockwave Flash", // spam harvester +// WP 2.5 now has Flash; FIXME + "Super Happy Fun ", // spam harvester + "TrackBack/", // trackback spam + "user", // suspicious harvester + "User Agent: ", // spam harvester + "User-Agent: ", // spam harvester + "Winnie Poh", // Automated Coppermine hacks + "Wordpress", // malicious software + "\"", // malicious software + ); + + // These user agent strings occur anywhere within the line. + $bb2_spambots = array( + "\r", // A really dumb bot + "; Widows ", // misc comment/email spam + "a href=", // referrer spam + "Bad Behavior Test", // Add this to your user-agent to test BB + "compatible ; MSIE", // misc comment/email spam + "compatible-", // misc comment/email spam + "DTS Agent", // misc comment/email spam + "Email Extractor", // spam harvester + "Gecko/25", // revisit this in 500 years + "grub-client", // search engine ignores robots.txt + "hanzoweb", // very badly behaved crawler + "Indy Library", // misc comment/email spam + "larbin@unspecified", // stealth harvesters + "Murzillo compatible", // comment spam bot + ".NET CLR 1)", // free poker, etc. + "POE-Component-Client", // free poker, etc. + "Turing Machine", // www.anonymizer.com abuse + "User-agent: ", // spam harvester/splogger + "WebaltBot", // spam harvester + "WISEbot", // spam harvester + "WISEnutbot", // spam harvester + "Windows NT 4.0;)", // wikispam bot + "Windows NT 5.0;)", // wikispam bot + "Windows NT 5.1;)", // wikispam bot + "Windows XP 5", // spam harvester + "WordPress/4.01", // pingback spam + "\\\\)", // spam harvester + ); + + // These are regular expression matches. + $bb2_spambots_regex = array( + "/^[A-Z]{10}$/", // misc email spam + "/^Mozilla...[05]$/i", // fake user agent/email spam + "/[bcdfghjklmnpqrstvwxz ]{8,}/", +// "/(;\){1,2}$/", // misc spammers/harvesters +// "/MSIE.*Windows XP/", // misc comment spam + ); + + // Do not edit below this line. + + @$ua = $package['headers_mixed']['User-Agent']; + + foreach ($bb2_spambots_0 as $spambot) { + $pos = strpos($ua, $spambot); + if ($pos !== FALSE && $pos == 0) { + return "17f4e8c8"; + } + } + + foreach ($bb2_spambots as $spambot) { + if (strpos($ua, $spambot) !== FALSE) { + return "17f4e8c8"; + } + } + + foreach ($bb2_spambots_regex as $spambot) { + if (preg_match($spambot, $ua)) { + return "17f4e8c8"; + } + } + + return FALSE; +} + +?> Added: trunk/libs/bad-behavior/bad-behavior/common_tests.inc.php =================================================================== --- trunk/libs/bad-behavior/bad-behavior/common_tests.inc.php (rev 0) +++ trunk/libs/bad-behavior/bad-behavior/common_tests.inc.php 2008-10-06 17:11:43 UTC (rev 722) @@ -0,0 +1,138 @@ +<?php if (!defined('BB2_CORE')) die('I said no cheating!'); + +// Enforce adherence to protocol version claimed by user-agent. + +function bb2_protocol($settings, $package) +{ + // Is it claiming to be HTTP/1.0? Then it shouldn't do HTTP/1.1 things + // Always run this test; we should never see Expect: + if (array_key_exists('Expect', $package['headers_mixed']) && stripos($package['headers_mixed']['Expect'], "100-continue") !== FALSE) { + return "a0105122"; + } + + // Is it claiming to be HTTP/1.1? Then it shouldn't do HTTP/1.0 things + // Blocks some common corporate proxy servers in strict mode + if ($settings['strict'] && !strcmp($package['server_protocol'], "HTTP/1.1")) { + if (array_key_exists('Pragma', $package['headers_mixed']) && strpos($package['headers_mixed']['Pragma'], "no-cache") !== FALSE && !array_key_exists('Cache-Control', $package['headers_mixed'])) { + return "41feed15"; + } + } + return false; +} + +function bb2_cookies($settings, $package) +{ + // Enforce RFC 2965 sec 3.3.5 and 9.1 + // Bots wanting new-style cookies should send Cookie2 + // FIXME: Amazon Kindle is broken; Amazon has been notified 9/24/08 + if (strpos($package['headers_mixed']['Cookie'], '$Version=0') !== FALSE && !array_key_exists('Cookie2', $package['headers_mixed']) && strpos($package['headers_mixed']['User-Agent'], "Kindle/") === FALSE) { + return '6c502ff1'; + } + return false; +} + +function bb2_misc_headers($settings, $package) +{ + @$ua = $package['headers_mixed']['User-Agent']; + + if (!strcmp($package['request_method'], "POST") && empty($ua)) { + return "f9f2b8b9"; + } + + // Broken spambots send URLs with various invalid characters + // Some broken browsers send the #vector in the referer field :( + // if (strpos($package['request_uri'], "#") !== FALSE || strpos($package['headers_mixed']['Referer'], "#") !== FALSE) { + if (strpos($package['request_uri'], "#") !== FALSE) { + return "dfd9b1ad"; + } + + // Range: field exists and begins with 0 + // Real user-agents do not start ranges at 0 + // NOTE: this blocks the whois.sc bot. No big loss. + // Exceptions: MT (not fixable); LJ (refuses to fix; may be + // blocked again in the future) + if (array_key_exists('Range', $package['headers_mixed']) && strpos($package['headers_mixed']['Range'], "=0-") !== FALSE) { + if (strncmp($ua, "MovableType", 11) && strncmp($ua, "URI::Fetch", 10) && strncmp($ua, "php-openid/", 11)) { + return "7ad04a8a"; + } + } + + // Content-Range is a response header, not a request header + if (array_key_exists('Content-Range', $package['headers_mixed'])) { + return '7d12528e'; + } + + // Lowercase via is used by open proxies/referrer spammers + // Exceptions: Clearswift uses lowercase via (refuses to fix; + // may be blocked again in the future) + if (array_key_exists('via', $package['headers']) && + strpos($package['headers']['via'],'Clearswift') === FALSE) { + return "9c9e4979"; + } + + // pinappleproxy is used by referrer spammers + if (array_key_exists('Via', $package['headers_mixed'])) { + if (stripos($package['headers_mixed']['Via'], "pinappleproxy") !== FALSE || stripos($package['headers_mixed']['Via'], "PCNETSERVER") !== FALSE || stripos($package['headers_mixed']['Via'], "Invisiware") !== FALSE) { + return "939a6fbb"; + } + } + + // TE: if present must have Connection: TE + // RFC 2616 14.39 + // Blocks Microsoft ISA Server 2004 in strict mode. Contact Microsoft + // to obtain a hotfix. + if ($settings['strict'] && array_key_exists('Te', $package['headers_mixed'])) { + if (!preg_match('/\bTE\b/', $package['headers_mixed']['Connection'])) { + return "582ec5e4"; + } + } + + if (array_key_exists('Connection', $package['headers_mixed'])) { + // Connection: keep-alive and close are mutually exclusive + if (preg_match('/\bKeep-Alive\b/i', $package['headers_mixed']['Connection']) && preg_match('/\bClose\b/i', $package['headers_mixed']['Connection'])) { + return "a52f0448"; + } + // Close shouldn't appear twice + if (preg_match('/\bclose,\s?close\b/i', $package['headers_mixed']['Connection'])) { + return "a52f0448"; + } + // Keey-Alive shouldn't appear twice either + if (preg_match('/\bkeep-alive,\s?keep-alive\b/i', $package['headers_mixed']['Connection'])) { + return "a52f0448"; + } + } + + + // Headers which are not seen from normal user agents; only malicious bots + if (array_key_exists('X-Aaaaaaaaaaaa', $package['headers_mixed']) || array_key_exists('X-Aaaaaaaaaa', $package['headers_mixed'])) { + return "b9cc1d86"; + } + // Proxy-Connection does not exist and should never be seen in the wild + if (array_key_exists('Proxy-Connection', $package['headers_mixed'])) { + return "b7830251"; + } + + if (array_key_exists('Referer', $package['headers_mixed'])) { + // Referer, if it exists, must not be blank + if (empty($package['headers_mixed'])) { + return "69920ee5"; + } + + // Referer, if it exists, must contain a : + // While a relative URL is technically valid in Referer, all known + // legit user-agents send an absolute URL + if (strpos($package['headers_mixed']['Referer'], ":") === FALSE) { + return "45b35e30"; + } + } + + // "uk" is not a language (ISO 639) nor a country (ISO 3166) + // oops, yes it is :( Please shoot any Ukrainian spammers you see. +# if (preg_match('/\buk\b/', $package['headers_mixed']['Accept-Language'])) { +# return "35ea7ffa"; +# } + + return false; +} + +?> Added: trunk/libs/bad-behavior/bad-behavior/core.inc.php =================================================================== --- trunk/libs/bad-behavior/bad-behavior/core.inc.php (rev 0) +++ trunk/libs/bad-behavior/bad-behavior/core.inc.php 2008-10-06 17:11:43 UTC (rev 722) @@ -0,0 +1,208 @@ +<?php if (!defined('BB2_CWD')) die("I said no cheating!"); + +// Bad Behavior entry point is start_bad_behavior(). +// If you're reading this, you are probably lost. +// Go read the bad-behavior-generic.php file. + +define('BB2_CORE', dirname(__FILE__)); +define('BB2_COOKIE', 'bb2_screener_'); + +require_once(BB2_CORE . "/functions.inc.php"); + +// Our log table structure +function bb2_table_structure($name) +{ + // It's not paranoia if they really are out to get you. + $name_escaped = bb2_db_escape($name); + return "CREATE TABLE IF NOT EXISTS `$name_escaped` ( + `id` INT(11) NOT NULL auto_increment, + `ip` TEXT NOT NULL, + `date` DATETIME NOT NULL default '0000-00-00 00:00:00', + `request_method` TEXT NOT NULL, + `request_uri` TEXT NOT NULL, + `server_protocol` TEXT NOT NULL, + `http_headers` TEXT NOT NULL, + `user_agent` TEXT NOT NULL, + `request_entity` TEXT NOT NULL, + `key` TEXT NOT NULL, + INDEX (`ip`(15)), + INDEX (`user_agent`(10)), + PRIMARY KEY (`id`) );"; // TODO: INDEX might need tuning +} + +// Insert a new record +function bb2_insert($settings, $package, $key) +{ + $ip = bb2_db_escape($package['ip']); + $date = bb2_db_date(); + $request_method = bb2_db_escape($package['request_method']); + $request_uri = bb2_db_escape($package['request_uri']); + $server_protocol = bb2_db_escape($package['server_protocol']); + $user_agent = bb2_db_escape($package['user_agent']); + $headers = "$request_method $request_uri $server_protocol\n"; + foreach ($package['headers'] as $h => $v) { + $headers .= bb2_db_escape("$h: $v\n"); + } + $request_entity = ""; + if (!strcasecmp($request_method, "POST")) { + foreach ($package['request_entity'] as $h => $v) { + $request_entity .= bb2_db_escape("$h: $v\n"); + } + } + return "INSERT INTO `" . bb2_db_escape($settings['log_table']) . "` + (`ip`, `date`, `request_method`, `request_uri`, `server_protocol`, `http_headers`, `user_agent`, `request_entity`, `key`) VALUES + ('$ip', '$date', '$request_method', '$request_uri', '$server_protocol', '$headers', '$user_agent', '$request_entity', '$key')"; +} + +// Kill 'em all! +function bb2_banned($settings, $package, $key, $previous_key=false) +{ + // Some spambots hit too hard. Slow them down a bit. + sleep(2); + + require_once(BB2_CORE . "/banned.inc.php"); + bb2_display_denial($settings, $key, $previous_key); + bb2_log_denial($settings, $package, $key, $previous_key); + if (is_callable('bb2_banned_callback')) { + bb2_banned_callback($settings, $package, $key); + } + // Penalize the spammers some more + require_once(BB2_CORE . "/housekeeping.inc.php"); + bb2_housekeeping($settings, $package); + die(); +} + +function bb2_approved($settings, $package) +{ + // Dirk wanted this + if (is_callable('bb2_approved_callback')) { + bb2_approved_callback($settings, $package); + } + + // Decide what to log on approved requests. + if (($settings['verbose'] && $settings['logging']) || empty($package['user_agent'])) { + bb2_db_query(bb2_insert($settings, $package, "00000000")); + } +} + +// Check the results of a particular test; see below for usage +// Returns FALSE if test passed (yes this is backwards) +function bb2_test($settings, $package, $result) +{ + if ($result !== FALSE) + { + bb2_banned($settings, $package, $result); + return TRUE; + } + return FALSE; +} + + +// Let God sort 'em out! +function bb2_start($settings) +{ + // Gather up all the information we need, first of all. + $headers = bb2_load_headers(); + // Postprocess the headers to mixed-case + // FIXME: get the world to stop using PHP as CGI + $headers_mixed = array(); + foreach ($headers as $h => $v) { + $headers_mixed[uc_all($h)] = $v; + } + + // We use these frequently. Keep a copy close at hand. + $ip = $_SERVER['REMOTE_ADDR']; + $request_method = $_SERVER['REQUEST_METHOD']; + $request_uri = $_SERVER['REQUEST_URI']; + $server_protocol = $_SERVER['SERVER_PROTOCOL']; + @$user_agent = $_SERVER['HTTP_USER_AGENT']; + + // Reconstruct the HTTP entity, if present. + $request_entity = array(); + if (!strcasecmp($request_method, "POST") || !strcasecmp($request_method, "PUT")) { + foreach ($_POST as $h => $v) { + $request_entity[$h] = $v; + } + } + + $package = array('ip' => $ip, 'headers' => $headers, 'headers_mixed' => $headers_mixed, 'request_method' => $request_method, 'request_uri' => $request_uri, 'server_protocol' => $server_protocol, 'request_entity' => $request_entity, 'user_agent' => $user_agent, 'is_browser' => false); + + // Please proceed to the security checkpoint and have your + // identification and boarding pass ready. + + // First check the whitelist + require_once(BB2_CORE . "/whitelist.inc.php"); + if (!bb2_whitelist($package)) { + // Now check the blacklist + require_once(BB2_CORE . "/blacklist.inc.php"); + bb2_test($settings, $package, bb2_blacklist($package)); + + // Check the http:BL + require_once(BB2_CORE . "/blackhole.inc.php"); + bb2_test($settings, $package, bb2_httpbl($settings, $package)); + + // Check for common stuff + require_once(BB2_CORE . "/common_tests.inc.php"); + bb2_test($settings, $package, bb2_protocol($settings, $package)); + bb2_test($settings, $package, bb2_cookies($settings, $package)); + bb2_test($settings, $package, bb2_misc_headers($settings, $package)); + + // Specific checks + @$ua = $headers_mixed['User-Agent']; + // MSIE checks + if (stripos($ua, "MSIE") !== FALSE) { + $package['is_browser'] = true; + if (stripos($ua, "Opera") !== FALSE) { + require_once(BB2_CORE . "/opera.inc.php"); + bb2_test($settings, $package, bb2_opera($package)); + } else { + require_once(BB2_CORE . "/msie.inc.php"); + bb2_test($settings, $package, bb2_msie($package)); + } + } elseif (stripos($ua, "Konqueror") !== FALSE) { + $package['is_browser'] = true; + require_once(BB2_CORE . "/konqueror.inc.php"); + bb2_test($settings, $package, bb2_konqueror($package)); + } elseif (stripos($ua, "Opera") !== FALSE) { + $package['is_browser'] = true; + require_once(BB2_CORE . "/opera.inc.php"); + bb2_test($settings, $package, bb2_opera($package)); + } elseif (stripos($ua, "Safari") !== FALSE) { + $package['is_browser'] = true; + require_once(BB2_CORE . "/safari.inc.php"); + bb2_test($settings, $package, bb2_safari($package)); + } elseif (stripos($ua, "Lynx") !== FALSE) { + $package['is_browser'] = true; + require_once(BB2_CORE . "/lynx.inc.php"); + bb2_test($settings, $package, bb2_lynx($package)); + } elseif (stripos($ua, "MovableType") !== FALSE) { + require_once(BB2_CORE . "/movabletype.inc.php"); + bb2_test($settings, $package, bb2_movabletype($package)); + } elseif (stripos($ua, "msnbot") !== FALSE || stripos($ua, "MS Search") !== FALSE) { + require_once(BB2_CORE . "/msnbot.inc.php"); + bb2_test($settings, $package, bb2_msnbot($package)); + } elseif (stripos($ua, "Googlebot") !== FALSE || stripos($ua, "Mediapartners-Google") !== FALSE) { + require_once(BB2_CORE . "/google.inc.php"); + bb2_test($settings, $package, bb2_google($package)); + } elseif (stripos($ua, "Mozilla") !== FALSE && stripos($ua, "Mozilla") == 0) { + $package['is_browser'] = true; + require_once(BB2_CORE . "/mozilla.inc.php"); + bb2_test($settings, $package, bb2_mozilla($package)); + } + + // More intensive screening applies to POST requests + if (!strcasecmp('POST', $package['request_method'])) { + require_once(BB2_CORE . "/post.inc.php"); + bb2_test($settings, $package, bb2_post($settings, $package)); + } + } + + // Last chance screening. + require_once(BB2_CORE . "/screener.inc.php"); + bb2_screener($settings, $package); + + // And that's about it. + bb2_approved($settings, $package); + return true; +} +?> Added: trunk/libs/bad-behavior/bad-behavior/functions.inc.php =================================================================== --- trunk/libs/bad-behavior/bad-behavior/functions.inc.php (rev 0) +++ trunk/libs/bad-behavior/bad-behavior/functions.inc.php 2008-10-06 17:11:43 UTC (rev 722) @@ -0,0 +1,70 @@ +<?php if (!defined('BB2_CORE')) die("I said no cheating!"); + +// Miscellaneous helper functions. + +// stripos() needed because stripos is only present on PHP 5 +if (!function_exists('stripos')) { + function stripos($haystack,$needle,$offset = 0) { + return(strpos(strtolower($haystack),strtolower($needle),$offset)); + } +} + +// str_split() needed because str_split is only present on PHP 5 +if (!function_exists('str_split')) { + function str_split($string, $split_length=1) + { + if ($split_length < 1) { + return false; + } + + for ($pos=0, $chunks = array(); $pos < strlen($string); $pos+=$split_length) { + $chunks[] = substr($string, $pos, $split_length); + } + return $chunks; + } +} + +// Convert a string to mixed-case on word boundaries. +function uc_all($string) { + $temp = preg_split('/(\W)/', str_replace("_", "-", $string), -1, PREG_SPLIT_DELIM_CAPTURE); + foreach ($temp as $key=>$word) { + $temp[$key] = ucfirst(strtolower($word)); + } + return join ('', $temp); +} + +// Determine if an IP address resides in a CIDR netblock or netblocks. +function match_cidr($addr, $cidr) { + $output = false; + + if (is_array($cidr)) { + foreach ($cidr as $cidrlet) { + if (match_cidr($addr, $cidrlet)) { + $output = true; + } + } + } else { + @list($ip, $mask) = explode('/', $cidr); + if (!$mask) $mask = 32; + $mask = pow(2,32) - pow(2, (32 - $mask)); + $output = ((ip2long($addr) & $mask) == (ip2long($ip) & $mask)); + } + return $output; +} + +// Obtain all the HTTP headers. +// NB: on PHP-CGI we have to fake it out a bit, since we can't get the REAL +// headers. Run PHP as Apache 2.0 module if possible for best results. +function bb2_load_headers() { + if (!is_callable('getallheaders')) { + $headers = array(); + foreach ($_SERVER as $h => $v) + if (ereg('HTTP_(.+)', $h, $hp)) + $headers[str_replace("_", "-", uc_all($hp[1]))] = $v; + } else { + $headers = getallheaders(); + } + return $headers; +} + +?> Added: trunk/libs/bad-behavior/bad-behavior/google.inc.php =================================================================== --- trunk/libs/bad-behavior/bad-behavior/google.inc.php (rev 0) +++ trunk/libs/bad-behavior/bad-behavior/google.inc.php 2008-10-06 17:11:43 UTC (rev 722) @@ -0,0 +1,13 @@ +<?php if (!defined('BB2_CORE')) die('I said no cheating!'); + +// Analyze user agents claiming to be Googlebot + +function bb2_google($package) +{ + if (match_cidr($package['ip'], "66.249.64.0/19") === FALSE && match_cidr($package['ip'], "64.233.160.0/19") === FALSE && match_cidr($package['ip'], "72.14.192.0/18") === FALSE) { + return "f1182195"; + } + return false; +} + +?> Added: trunk/libs/bad-behavior/bad-behavior/housekeeping.inc.php =================================================================== --- trunk/libs/bad-behavior/bad-behavior/housekeeping.inc.php (rev 0) +++ trunk/libs/bad-behavior/bad-behavior/housekeeping.inc.php 2008-10-06 17:11:43 UTC (rev 722) @@ -0,0 +1,16 @@ +<?php if (!defined('BB2_CORE')) die('I said no cheating!'); + +function bb2_housekeeping($settings, $package) +{ + // FIXME Yes, the interval's hard coded (again) for now. + $query = "DELETE FROM `" . $settings['log_table'] . "` WHERE `date` < DATE_SUB('" . bb2_db_date() . "', INTERVAL 7 DAY)"; + bb2_db_query($query); + + // Waste a bunch more of the spammer's time, sometimes. + if (rand(1,1000) == 1) { + $query = "OPTIMIZE TABLE `" . $settings['log_table'] . "`"; + bb2_db_query($query); + } +} + +?> Added: trunk/libs/bad-behavior/bad-behavior/konqueror.inc.php =================================================================== --- trunk/libs/bad-behavior/bad-behavior/konqueror.inc.php (rev 0) +++ trunk/libs/bad-behavior/bad-behavior/konqueror.inc.php 2008-10-06 17:11:43 UTC (rev 722) @@ -0,0 +1,17 @@ +<?php if (!defined('BB2_CORE')) die('I said no cheating!'); + +// Analyze user agents claiming to be Konqueror + +function bb2_konqueror($package) +{ + // CafeKelsa is a dev project at Yahoo which indexes job listings for + // Yahoo! HotJobs. It identifies as Konqueror so we skip these checks. + if (stripos($package['headers_mixed']['User-Agent'], "YahooSeeker/CafeKelsa") === FALSE || match_cidr($package['ip'], "209.73.160.0/19") === FALSE) { + if (!array_key_exists('Accept', $package['headers_mixed'])) { + return "17566707"; + } + } + return false; +} + +?> Added: trunk/libs/bad-behavior/bad-behavior/lynx.inc.php =================================================================== --- trunk/libs/bad-behavior/bad-behavior/lynx.inc.php (rev 0) +++ trunk/libs/bad-behavior/bad-behavior/lynx.inc.php 2008-10-06 17:11:43 UTC (rev 722) @@ -0,0 +1,13 @@ +<?php if (!defined('BB2_CORE')) die('I said no cheating!'); + +// Analyze user agents claiming to be Lynx + +function bb2_lynx($package) +{ + if (!array_key_exists('Accept', $package['headers_mixed'])) { + return "17566707"; + } + return false; +} + +?> Added: trunk/libs/bad-behavior/bad-behavior/movabletype.inc.php =================================================================== --- trunk/libs/bad-behavior/bad-behavior/movabletype.inc.php (rev 0) +++ trunk/libs/bad-behavior/bad-behavior/movabletype.inc.php 2008-10-06 17:11:43 UTC (rev 722) @@ -0,0 +1,14 @@ +<?php if (!defined('BB2_CORE')) die('I said no cheating!'); + +function bb2_movabletype($package) +{ + // Is it a trackback? + if (strcasecmp($package['request_method'], "POST")) { + if (strcmp($package['headers_mixed']['Range'], "bytes=0-99999")) { + return "7d12528e"; + } + } + return false; +} + +?> Added: trunk/libs/bad-behavior/bad-behavior/mozilla.inc.php =================================================================== --- trunk/libs/bad-behavior/bad-behavior/mozilla.inc.php (rev 0) +++ trunk/libs/bad-behavior/bad-behavior/mozilla.inc.php 2008-10-06 17:11:43 UTC (rev 722) @@ -0,0 +1,19 @@ +<?php if (!defined('BB2_CORE')) die('I said no cheating!'); + +// Analyze user agents claiming to be Mozilla + +function bb2_mozilla($package) +{ + // First off, workaround for Google Desktop, until they fix it FIXME + // Google Desktop fixed it, but apparently some old versions are + // still out there. :( + // Always check accept header for Mozilla user agents + if (strpos($package['headers_mixed']['User-Agent'], "Google Desktop") === FALSE && strpos($package['headers_mixed']['User-Agent'], "PLAYSTATION 3") === FALSE) { + if (!array_key_exists('Accept', $package['headers_mixed'])) { + return "17566707"; + } + } + return false; +} + +?> Added: trunk/libs/bad-behavior/bad-behavior/msie.inc.php =================================================================== --- trunk/libs/bad-behavior/bad-behavior/msie.inc.php (rev 0) +++ trunk/libs/bad-behavior/bad-behavior/msie.inc.php 2008-10-06 17:11:43 UTC (rev 722) @@ -0,0 +1,25 @@ +<?php if (!defined('BB2_CORE')) die('I said no cheating!'); + +// Analyze user agents claiming to be MSIE + +function bb2_msie($package) +{ + if (!array_key_exists('Accept', $package['headers_mixed'])) { + return "17566707"; + } + + // MSIE does NOT send "Windows ME" or "Windows XP" in the user agent + if (strpos($package['headers_mixed']['User-Agent'], "Windows ME") !== FALSE || strpos($package['headers_mixed']['User-Agent'], "Windows XP") !== FALSE || strpos($package['headers_mixed']['User-Agent'], "Windows 2000") !== FALSE || strpos($package['headers_mixed']['User-Agent'], "Win32") !== FALSE) { + return "a1084bad"; + } + + // MSIE does NOT send Connection: TE but Akamai does + // Bypass this test when Akamai detected + if (!array_key_exists('Akamai-Origin-Hop', $package['headers_mixed']) && @preg_match('/\bTE\b/i', $package['headers_mixed']['Connection'])) { + return "2b90f772"; + } + + return false; +} + +?> Added: trunk/libs/bad-behavior/bad-behavior/msnbot.inc.php =================================================================== --- trunk/libs/bad-behavior/bad-behavior/msnbot.inc.php (rev 0) +++ trunk/libs/bad-behavior/bad-behavior/msnbot.inc.php 2008-10-06 17:11:43 UTC (rev 722) @@ -0,0 +1,13 @@ +<?php if (!defined('BB2_CORE')) die('I said no cheating!'); + +// Analyze user agents claiming to be msnbot + +function bb2_msnbot($package) +{ + if (match_cidr($package['ip'], "207.46.0.0/16") === FALSE && match_cidr($package['ip'], "65.52.0.0/14") === FALSE && match_cidr($package['ip'], "207.68.128.0/18") === FALSE && match_cidr($package['ip'], "207.68.192.0/20") === FALSE && match_cidr($package['ip'], "64.4.0.0/18") === FALSE) { + return "e4de0453"; + } + return false; +} + +?> Added: trunk/libs/bad-behavior/bad-behavior/opera.inc.php =================================================================== --- trunk/libs/bad-behavior/bad-behavior/opera.inc.php (rev 0) +++ trunk/libs/bad-behavior/bad-behavior/opera.inc.php 2008-10-06 17:11:43 UTC (rev 722) @@ -0,0 +1,13 @@ +<?php if (!defined('BB2_CORE')) die('I said no cheating!'); + +// Analyze user agents claiming to be Opera + +function bb2_opera($package) +{ + if (!array_key_exists('Accept', $package['headers_mixed'])) { + return "17566707"; + } + return false; +} + +?> Added: trunk/libs/bad-behavior/bad-behavior/post.inc.php =================================================================== --- trunk/libs/bad-behavior/bad-behavior/post.inc.php (rev 0) +++ trunk/libs/bad-behavior/bad-behavior/post.inc.php 2008-10-06 17:11:43 UTC (rev 722) @@ -0,0 +1,80 @@ +<?php if (!defined('BB2_CORE')) die('I said no cheating!'); + +// All tests which apply specifically to POST requests +function bb2_post($settings, $package) +{ + // Check blackhole lists for known spam/malicious activity + require_once(BB2_CORE . "/blackhole.inc.php"); + bb2_test($settings, $package, bb2_blackhole($package)); + + // MovableType needs specialized screening + if (stripos($package['headers_mixed']['User-Agent'], "MovableType") !== FALSE) { + if (strcmp($package['headers_mixed']['Range'], "bytes=0-99999")) { + return "7d12528e"; + } + } + + // Trackbacks need special screening + $request_entity = $package['request_entity']; + if (isset($request_entity['title']) && isset($request_entity['url']) && isset($request_entity['blog_name'])) { + require_once(BB2_CORE . "/trackback.inc.php"); + return bb2_trackback($package); + } + + // Catch a few completely broken spambots + foreach ($request_entity as $key => $value) { + $pos = strpos($key, " document.write"); + if ($pos !== FALSE) { + return "dfd9b1ad"; + } + } + + // If Referer exists, it should refer to a page on our site + if (array_key_exists('Referer', $package['headers_mixed']) && stripos($package['headers_mixed']['Referer'], $package['headers_mixed']['Host']) === FALSE) { + return "cd361abb"; + } + + // Screen by cookie/JavaScript form add + if (isset($_COOKIE[BB2_COOKIE])) { + $screener1 = explode(" ", $_COOKIE[BB2_COOKIE]); + } else { + $screener1 = array(0); + } + if (isset($_POST[BB2_COOKIE])) { + $screener2 = explode(" ", $_POST[BB2_COOKIE]); + } else { + $screener2 = array(0); + } + $screener = max($screener1[0], $screener2[0]); + + if ($screener > 0) { + // Posting too fast? 5 sec + // FIXME: even 5 sec is too intrusive + // if ($screener + 5 > time()) + // return "408d7e72"; + // Posting too slow? 48 hr + if ($screener + 172800 < time()) + return "b40c8ddc"; + + // Screen by IP address + $ip = ip2long($package['ip']); + $ip_screener = ip2long($screener[1]); +// FIXME: This is b0rked, but why? +// if ($ip && $ip_screener && abs($ip_screener - $ip) > 256) +// return "c1fa729b"; + + if (!empty($package['headers_mixed']['X-Forwarded-For'])) { + $ip = $package['headers_mixed']['X-Forwarded-For']; + } + // Screen for user agent changes + // User connected previously with blank user agent +// $q = bb2_db_query("SELECT `ip` FROM " . $settings['log_tabl... [truncated message content] |
From: <al...@us...> - 2008-10-01 23:04:26
|
Revision: 720 http://sciret.svn.sourceforge.net/sciret/?rev=720&view=rev Author: alpeb Date: 2008-10-01 23:04:13 +0000 (Wed, 01 Oct 2008) Log Message: ----------- implemented support for TypePad AntiSpam check for comments Modified Paths: -------------- trunk/actions/AddCommentAndRating.php trunk/actions/SavePreferences.php trunk/models/Configuration.php trunk/templates/EditPreferences.tpl trunk/views/EditPreferences.php Added Paths: ----------- trunk/models/AntiSpam.php Modified: trunk/actions/AddCommentAndRating.php =================================================================== --- trunk/actions/AddCommentAndRating.php 2008-10-01 23:03:32 UTC (rev 719) +++ trunk/actions/AddCommentAndRating.php 2008-10-01 23:04:13 UTC (rev 720) @@ -22,12 +22,36 @@ $message = ''; if ($_POST['comment_box'] != '') { - require 'models/Comment.php'; + $antiSpam = new AntiSpam($this->configuration); + + try { + $data = array( + 'user_ip' => $_SERVER['REMOTE_ADDR'], + 'user_agent' => $_SERVER['HTTP_USER_AGENT'], + 'referer' => isset($_SERVER['HTTP_REFERER'])? $_SERVER['HTTP_REFERER'] : '', + 'permalink' => Library::getBaseURL() . "/view=ViewArticle&id=$artId", + 'comment_type' => 'comment', + 'comment_author' => $_POST['commentUserName'], + 'comment_content' => $_POST['comment_box'], + ); + if ($antiSpam->isSpam($data)) { + $message = $this->user->lang('Comment detected as spam. ** DISCARDED **'); + Library::redirect(Library::getLink(array( + 'view' => 'ViewComments', + 'artId' => $artId, + 'commentsMessage' => urlencode($message) + ))); + } + } catch (Exception $e) { + // TypePad AntiSpam API Key is wrong, so nothing to do in this case :( + } + $comment = new Comment; $comment->setUserName($_POST['commentUserName']); $comment->setEntered(date('Y-m-d h:i:s')); $comment->setContents($_POST['comment_box']); $comment->setArticleId($artId); + $comment->setPublished($this->configuration->getConfigValue('publishCommentsAuto')); $comment->save(); $this->addHistoryEntry($artId, $this->user->lang('Added comment'), false, $_POST['commentUserName']); $message = $this->user->lang('Comment saved successfully'); Modified: trunk/actions/SavePreferences.php =================================================================== --- trunk/actions/SavePreferences.php 2008-10-01 23:03:32 UTC (rev 719) +++ trunk/actions/SavePreferences.php 2008-10-01 23:04:13 UTC (rev 720) @@ -33,7 +33,7 @@ $this->user->setPreference('navigationType', $_POST['navigationType']); } - $clamavError = ''; + $errors = array(); if (($this->user->role & User::ROLE_ADMIN) == User::ROLE_ADMIN) { $this->configuration->setConfigValue('publishKB', $_POST['publishKB'] == '1'? '1' : '0'); $this->configuration->setConfigValue('anonymousRegistration', $_POST['anonymousRegistration'] == '1'? '1' : '0'); @@ -54,18 +54,24 @@ $this->configuration->setConfigValue('smtpUser', $_POST['smtpUser']); $this->configuration->setConfigValue('smtpPassword', $_POST['smtpPassword']); $this->configuration->setConfigValue('smtpPort', $_POST['smtpPort']); + $this->configuration->setConfigValue('useClamAV', $_POST['useClamAV']); + $this->configuration->setConfigValue('typePadAntiSpamKey', $_POST['typePadAntiSpamKey']); if ($_POST['useClamAV'] == '1') { $clamav = new ClamAV(); if (!$clamav->canExecuteClamscan()) { - $clamavError = $this->user->lang('Couldn\'t attempt to use ClamAV: clamscan was not found (looking for %s)', - $clamav->getClamscanLocation()); - } else { - $this->configuration->setConfigValue('useClamAV', '1'); + $errors[] = $this->user->lang('Couldn\'t attempt to use ClamAV: clamscan was not found (looking for %s)', + $clamav->getClamscanLocation()); + $this->configuration->setConfigValue('useClamAV', '0'); } } - if ($_POST['useClamAV'] == '0' || $clamavError) { - $this->configuration->setConfigValue('useClamAV', '0'); + + if ($_POST['typePadAntiSpamKey'] != '') { + $antiSpam = new AntiSpam($this->configuration); + if (!$antiSpam->verifyKey()) { + $errors[] = $this->user->lang('Your TypePad AntiSpam key is wrong. Please verify.'); + $this->configuration->setConfigValue('typePadAntiSpamKey', ''); + } } $this->configuration->save(); @@ -74,8 +80,9 @@ $this->user->save(); $_SESSION['message'] = $this->user->lang('Preferences saved successfully'); - if ($clamavError) { - $_SESSION['message'] .= '<br />' . $clamavError; + if ($errors) { + $errors = implode('<br />', $errors); + $_SESSION['message'] .= '<br />' . $errors; Library::redirect(Library::getLink(array('view' => 'EditPreferences'))); } else { Library::redirect(Library::getLink(array('view' => 'MainView', 'set' => $this->user->getPreference('startBrowsing')))); Added: trunk/models/AntiSpam.php =================================================================== --- trunk/models/AntiSpam.php (rev 0) +++ trunk/models/AntiSpam.php 2008-10-01 23:04:13 UTC (rev 720) @@ -0,0 +1,47 @@ +<?php + +/* +* @copyright Copyright (C) 2005-2008 Keyboard Monkeys Ltd. http://www.kb-m.com +* @license http://www.fsf.org/copyleft/lgpl.html GNU Lesser General Public License +* @author Alejandro Pedraza +* @since Sciret 1.2 +* @package Sciret +* @packager Keyboard Monkeys +*/ + +class AntiSpam extends Zend_Service_Akismet +{ + const API_URL = 'api.antispam.typepad.com'; + + private $_config; + + public function __construct($config) + { + $this->_config = $config; + + parent::__construct($config->getConfigValue('typePadAntiSpamKey'), + Library::getBaseURL()); + } + + protected function _post($host, $path, array $params) + { + $caller = $this->_getCallerMethod(); + if (strtolower($caller) == 'verifykey') { + $host = self::API_URL; + } else { + $host = $this->getApiKey() . '.' . self::API_URL; + } + + return parent::_post($host, $path, $params); + } + + /** + * @return string + */ + private function _getCallerMethod() + { + $backTrace = debug_backtrace(); + + return $backTrace[2]['function']; + } +} Modified: trunk/models/Configuration.php =================================================================== --- trunk/models/Configuration.php 2008-10-01 23:03:32 UTC (rev 719) +++ trunk/models/Configuration.php 2008-10-01 23:04:13 UTC (rev 720) @@ -22,6 +22,7 @@ 'passwordExpirationDays'=> 60, 'version' => 0, 'useClamAV' => 0, + 'useTypePadAntiSpam' => '', ); function Configuration() { Modified: trunk/templates/EditPreferences.tpl =================================================================== --- trunk/templates/EditPreferences.tpl 2008-10-01 23:03:32 UTC (rev 719) +++ trunk/templates/EditPreferences.tpl 2008-10-01 23:04:13 UTC (rev 720) @@ -138,6 +138,15 @@ </td> </tr> <tr class="row_off"> + <td style="text-align:right; font-weight:bold"> + [l]Enter your TypePad AntiSpam API key to be able to discard spam comments[/l]:<br /> + [l](You can get a free key <a href="http://antispam.typepad.com/info/get-api-key.html">here</a>)[/l] + </td> + <td> + <input type="text" name="typePadAntiSpamKey" value="{typePadAntiSpamKey}"/> + </td> + </tr> + <tr class="row_on"> <td style="text-align:right; font-weight:bold">[l]Only admin and author can modify an article[/l]:</td> <td> <select name="restrictEditDelete"> @@ -146,25 +155,25 @@ </select> </td> </tr> - <tr class="row_on"> + <tr class="row_off"> <td style="text-align:right; font-weight:bold">[l]Days before password expires[/l]:</td> <td> <input type="text" name="passwordExpirationDays" value="{passwordExpirationDays}" size="2" /> </td> </tr> - <tr class="row_off"> + <tr class="row_on"> <td style="text-align:right; font-weight:bold">[l]Send mail from (name)[/l]:</td> <td> <input type="text" name="mailFromName" value="{mailFromName}"/> </td> </tr> - <tr class="row_on"> + <tr class="row_off"> <td style="text-align:right; font-weight:bold">[l]Send mail from (email)[/l]:</td> <td> <input type="text" name="mailFromMail" value="{mailFromMail}"/> </td> </tr> - <tr class="row_off"> + <tr class="row_on"> <td style="text-align:right; font-weight:bold">[l]Send article reports to (email)[/l]:</td> <td> <input type="text" name="mailArticleReports" value="{mailArticleReports}"/> @@ -176,7 +185,7 @@ <input type="text" name="mailCategoryRequest" value="{mailCategoryRequest}"/> </td> </tr> - <tr class="row_of"> + <tr class="row_on"> <td style="text-align:right; font-weight:bold">[l]Send mail using[/l]:</td> <td> <select name="mailTransport" onchange="javascript:toggleSMTPSettings(value);"> @@ -185,7 +194,7 @@ </select> </td> </tr> - <tr class="row_on" id="smtp_options" {showSMTPOptions}> + <tr class="row_off" id="smtp_options" {showSMTPOptions}> <td colspan="2"> <p style="text-align:center; font-weight:bold">[l]SMTP settings[/l]:</p> <ul> @@ -196,7 +205,7 @@ </ul> </td> </tr> - <tr class="row_off"> + <tr class="row_on"> <td style="text-align:right; font-weight:bold"> [l]Check uploaded files for viruses[/l]:<br /> [l](You need to have <a href="http://www.clamav.net">ClamAV</a> in your system)[/l] Modified: trunk/views/EditPreferences.php =================================================================== --- trunk/views/EditPreferences.php 2008-10-01 23:03:32 UTC (rev 719) +++ trunk/views/EditPreferences.php 2008-10-01 23:04:13 UTC (rev 720) @@ -68,6 +68,7 @@ 'smtpPort' => $this->configuration->getConfigValue('smtpPort'), 'useClamAV_yes_selected' => $this->configuration->getConfigValue('useClamAV') == '1'? 'selected="true"' : '', 'useClamAV_no_selected' => $this->configuration->getConfigValue('useClamAV') == '0'? 'selected="true"' : '', + 'typePadAntiSpamKey' => $this->configuration->getConfigValue('typePadAntiSpamKey'), )); // *** LANGUAGES *** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-10-01 23:03:40
|
Revision: 719 http://sciret.svn.sourceforge.net/sciret/?rev=719&view=rev Author: alpeb Date: 2008-10-01 23:03:32 +0000 (Wed, 01 Oct 2008) Log Message: ----------- don't execute JS code before the page has loaded Modified Paths: -------------- trunk/templates/comments.tpl Modified: trunk/templates/comments.tpl =================================================================== --- trunk/templates/comments.tpl 2008-10-01 22:44:53 UTC (rev 718) +++ trunk/templates/comments.tpl 2008-10-01 23:03:32 UTC (rev 719) @@ -17,7 +17,9 @@ <div id="commentsMessage" style="display:inline;">{commentsMessage}</div> </div> <script type="text/javascript"> - fade('commentsMessage'); + YAHOO.util.Event.onDOMReady(function() { + fade('commentsMessage'); + }); </script> </td> </tr> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-10-01 22:44:59
|
Revision: 718 http://sciret.svn.sourceforge.net/sciret/?rev=718&view=rev Author: alpeb Date: 2008-10-01 22:44:53 +0000 (Wed, 01 Oct 2008) Log Message: ----------- this fixes a lot of problems under IE Modified Paths: -------------- trunk/javascript/general.js Modified: trunk/javascript/general.js =================================================================== --- trunk/javascript/general.js 2008-10-01 22:18:33 UTC (rev 717) +++ trunk/javascript/general.js 2008-10-01 22:44:53 UTC (rev 718) @@ -551,7 +551,7 @@ var buttons = [{text: "Save", handler: this.save}]; if (responseObj.argument > 0) { - buttons.push({text: "Delete", handler: function() {SCIRET.todos.delete(responseObj.argument)}}); + buttons.push({text: "Delete", handler: function() {SCIRET.todos.remove(responseObj.argument)}}); } buttons.push({text: "Cancel", handler: function() {this.cancel()}}); @@ -602,7 +602,8 @@ this.showForm(response.todoId); }, - delete: function(todoId) { + // can't use the "delete" name because in stupid IE it's reserved + remove: function(todoId) { if (!confirm("Are you sure you wish to delete this To-Do?")) { return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-10-01 22:18:39
|
Revision: 717 http://sciret.svn.sourceforge.net/sciret/?rev=717&view=rev Author: alpeb Date: 2008-10-01 22:18:33 +0000 (Wed, 01 Oct 2008) Log Message: ----------- remove old triggerOnloadFunctions() Modified Paths: -------------- trunk/templates/head.tpl Modified: trunk/templates/head.tpl =================================================================== --- trunk/templates/head.tpl 2008-10-01 22:18:06 UTC (rev 716) +++ trunk/templates/head.tpl 2008-10-01 22:18:33 UTC (rev 717) @@ -43,7 +43,7 @@ </style> <!-- END rtl_block --> </head> -<body class="yui-skin-sam" onload="triggerOnloadFunctions();"> +<body class="yui-skin-sam"> <script type="text/javascript"> // var myLogReader = new YAHOO.widget.LogReader(); </script> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-10-01 22:18:12
|
Revision: 716 http://sciret.svn.sourceforge.net/sciret/?rev=716&view=rev Author: alpeb Date: 2008-10-01 22:18:06 +0000 (Wed, 01 Oct 2008) Log Message: ----------- Modified Paths: -------------- trunk/javascript/general.js Modified: trunk/javascript/general.js =================================================================== --- trunk/javascript/general.js 2008-09-30 16:06:57 UTC (rev 715) +++ trunk/javascript/general.js 2008-10-01 22:18:06 UTC (rev 716) @@ -74,19 +74,11 @@ isIE7 = false; } -var onloadFunctions = new Array(); - // ********************************************************* // ** STATE VARIABLES ** // ********************************************************* var isFavoritesDropdownShown = false; -function triggerOnloadFunctions() { - for (var i = 0; i < onloadFunctions.length; i++) { - onloadFunctions[i](); - } -} - function removeElement(elementId) { $(elementId).parentNode.removeChild($(elementId)); } @@ -158,20 +150,18 @@ return; } - if (typeof document.forms["commentAndRating"].Rate == 'undefined') { - rate = 0; + if (document.forms["commentAndRating"].Rate[0].checked) { + rate = 1; + } else if(document.forms["commentAndRating"].Rate[1].checked) { + rate = 2; + } else if(document.forms["commentAndRating"].Rate[2].checked) { + rate = 3; + } else if(document.forms["commentAndRating"].Rate[3].checked) { + rate = 4; + } else if(document.forms["commentAndRating"].Rate[4].checked) { + rate = 5; } else { - if (document.forms["commentAndRating"].Rate[0].checked) { - rate = 1; - } else if(document.forms["commentAndRating"].Rate[1].checked) { - rate = 2; - } else if(document.forms["commentAndRating"].Rate[2].checked) { - rate = 3; - } else if(document.forms["commentAndRating"].Rate[3].checked) { - rate = 4; - } else if(document.forms["commentAndRating"].Rate[4].checked) { - rate = 5; - } + rate = 0; } showLoading(loadingId); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-09-30 16:07:27
|
Revision: 715 http://sciret.svn.sourceforge.net/sciret/?rev=715&view=rev Author: alpeb Date: 2008-09-30 16:06:57 +0000 (Tue, 30 Sep 2008) Log Message: ----------- added 'share this article' section Modified Paths: -------------- trunk/classes/Library.php trunk/style.css trunk/templates/footer.tpl trunk/views/View.php Added Paths: ----------- trunk/images/icon-blinklist.png trunk/images/icon-delicious.png trunk/images/icon-digg.png trunk/images/icon-facebook.png trunk/images/icon-furl.png trunk/images/icon-google.png trunk/images/icon-magnolia.png trunk/images/icon-mixx.png trunk/images/icon-myweb.png trunk/images/icon-reddit.png trunk/images/icon-stumbleupon.png trunk/images/icon-technorati.png trunk/images/icon-twitter.png trunk/images/icon-windowslive.png Modified: trunk/classes/Library.php =================================================================== --- trunk/classes/Library.php 2008-09-30 15:41:28 UTC (rev 714) +++ trunk/classes/Library.php 2008-09-30 16:06:57 UTC (rev 715) @@ -69,6 +69,17 @@ return $url; } + + /** + * @return string + */ + public static function getBaseURL() + { + $url = 'http://'.$_SERVER['HTTP_HOST'] + .substr($_SERVER['REQUEST_URI'], 0, strrpos($_SERVER['REQUEST_URI'], '/')); + + return $url; + } } ?> Property changes on: trunk/images/icon-blinklist.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: trunk/images/icon-delicious.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: trunk/images/icon-digg.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: trunk/images/icon-facebook.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: trunk/images/icon-furl.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: trunk/images/icon-google.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: trunk/images/icon-magnolia.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: trunk/images/icon-mixx.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: trunk/images/icon-myweb.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: trunk/images/icon-reddit.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: trunk/images/icon-stumbleupon.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: trunk/images/icon-technorati.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: trunk/images/icon-twitter.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: trunk/images/icon-windowslive.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/style.css =================================================================== --- trunk/style.css 2008-09-30 15:41:28 UTC (rev 714) +++ trunk/style.css 2008-09-30 16:06:57 UTC (rev 715) @@ -643,6 +643,11 @@ float: left; } +#shareArticle img { + border: none; + margin: 5px; +} + /* end panel_right */ Modified: trunk/templates/footer.tpl =================================================================== --- trunk/templates/footer.tpl 2008-09-30 15:41:28 UTC (rev 714) +++ trunk/templates/footer.tpl 2008-09-30 16:06:57 UTC (rev 715) @@ -49,6 +49,32 @@ </div> </div> <div class="panel_bottom"></div> + + <!-- BEGIN shareArticle_block --> + <div class="panel" id="shareArticle"> + <div class="panel_title"> + <a>[l]Share this article[/l]</a> + </div> + <div class="inside_panel"> + <a href="http://digg.com/submit?url={articleURL}&title={articleTitle}" rel="nofollow" title="Digg"><img alt="Digg" height="16" src="images/icon-digg.png" width="16"/></a> + <a href="http://reddit.com/submit?url={articleURL}&title={articleTitle}" rel="nofollow" title="Reddit"><img alt="Reddit" height="16" src="images/icon-reddit.png" width="16"/></a> + <a href="http://del.icio.us/post?url={articleURL}&title={articleTitle}" rel="nofollow" title="Del.icio.us"><img alt="Del.icio.us" height="16" src="images/icon-delicious.png" width="16"/></a> + <a href="http://ma.gnolia.com/bookmarklet/add?url={articleURL}&title={articleTitle}" rel="nofollow" title="Ma.gnolia"><img alt="Ma.gnolia" height="16" src="images/icon-magnolia.png" width="16"/></a> + <a href="http://www.stumbleupon.com/submit?url={articleURL}&title={articleTitle}" rel="nofollow" title="Stumble Upon"><img alt="Stumble Upon" height="16" src="images/icon-stumbleupon.png" width="16"/></a> + + <a href="http://www.facebook.com/sharer.php?u={articleURL}" rel="nofollow" title="Facebook"><img alt="Facebook" height="16" src="images/icon-facebook.png" width="16"/></a> + <a href="http://twitter.com/home?status={articleURL}" rel="nofollow" title="Twitter"><img alt="Twitter" height="16" src="images/icon-twitter.png" width="16"/></a> + <a href="http://www.google.com/bookmarks/mark?op=edit&bkmk={articleURL}&title={articleTitle}" rel="nofollow" title="Google"><img alt="Google" height="16" src="images/icon-google.png" width="16"/></a> + <a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u={articleURL}&t={articleTitle}" rel="nofollow" title="Yahoo! MyWeb"><img alt="Yahoo! MyWeb" height="16" src="images/icon-myweb.png" width="16"/></a> + <a href="http://furl.net/storeIt.jsp?u={articleURL}&t={articleTitle}" rel="nofollow" title="Furl"><img alt=Furl" height="16" src="images/icon-furl.png" width="16"/></a> + <a href="http://blinklist.com/index.php?Action=Blink/addblink.php&Url={articleURL}&Title={articleTitle}" rel="nofollow" title="BlinkList"><img alt="BlinkList" height="16" src="images/icon-blinklist.png" width="16"/></a> + <a href="http://www.technorati.com/faves?add={articleURL}" rel="nofollow" title="Technorati"><img alt="Technorati" height="16" src="images/icon-technorati.png" width="16"/></a> + <a href="http://www.mixx.com/submit?page_url={articleURL}" rel="nofollow" title="Mixx"><img alt="Mixx" height="16" src="images/icon-mixx.png" width="16"/></a> + <a href="https://favorites.live.com/quickadd.aspx?marklet=1&mkt=en-us&url={articleURL}&top=1" rel="nofollow" title="Windows Live"><img alt="Windows Live" height="16" src="images/icon-windowslive.png" width="16"/></a> + </div> + </div> + <div class="panel_bottom"></div> + <!-- END shareArticle_block --> <!-- BEGIN favoritesLink_block --> <div class="panel" id="favorites"> Modified: trunk/views/View.php =================================================================== --- trunk/views/View.php 2008-09-30 15:41:28 UTC (rev 714) +++ trunk/views/View.php 2008-09-30 16:06:57 UTC (rev 715) @@ -181,7 +181,20 @@ 'advancedSearchLink' => Library::getLink(array('view' => 'AdvancedSearch')), )); + $this->tpl->set_block('footer', 'shareArticle_block', 'shareArticle'); $this->tpl->set_block('footer', 'favoritesLink_block', 'favoritesLink'); + if (strtolower(get_class($this)) == 'viewarticle' + && !$this->article->isBookmark() + && $this->configuration->getConfigValue('publishKB')) + { + $this->tpl->set_var(array( + 'articleURL' => Library::getBaseURL() . urlencode('/index.php?view=ViewArticle&id=' . $this->article->getId()), + 'articleTitle' => urlencode($this->article->getTitle()) + )); + $this->tpl->parse('shareArticle', 'shareArticle_block'); + } else { + $this->tpl->set_var('shareArticle', ''); + } if (!$this->user->isAnonymous()) { $this->tpl->parse('favoritesLink', 'favoritesLink_block'); } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-09-30 15:41:38
|
Revision: 714 http://sciret.svn.sourceforge.net/sciret/?rev=714&view=rev Author: alpeb Date: 2008-09-30 15:41:28 +0000 (Tue, 30 Sep 2008) Log Message: ----------- fixed bad IE conditional tags Modified Paths: -------------- trunk/templates/ViewArticle.tpl trunk/templates/head.tpl Modified: trunk/templates/ViewArticle.tpl =================================================================== --- trunk/templates/ViewArticle.tpl 2008-09-30 14:52:33 UTC (rev 713) +++ trunk/templates/ViewArticle.tpl 2008-09-30 15:41:28 UTC (rev 714) @@ -48,7 +48,6 @@ [l]by[/l] {modifiedByUserName} <!-- END lastModif_block --> <br /> - <!--[if !IE]><!--> </p> <p class="view_right"> <!-- BEGIN edit_del_block --> Modified: trunk/templates/head.tpl =================================================================== --- trunk/templates/head.tpl 2008-09-30 14:52:33 UTC (rev 713) +++ trunk/templates/head.tpl 2008-09-30 15:41:28 UTC (rev 714) @@ -13,9 +13,9 @@ <!--[if IE 7]><link rel="stylesheet" href="style_ie7.css" type="text/css" media="screen" charset="utf-8"><![endif]--> <link href="others.css" type="text/css" rel="StyleSheet" /> <script type="text/javascript">var isIE7 = false;</script> - <!-[if IE 7]-> + <!--[if IE 7]> <script type="text/javascript">isIE7 = true;</script> - <![endif]-> + <![endif]--> <!-- basic YUI libraries --> <script type="text/javascript" src="javascript/yui/build/yahoo-dom-event/yahoo-dom-event.js"></script> <script type="text/javascript" src="javascript/yui/build/connection/connection.js"></script> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-09-30 14:52:52
|
Revision: 713 http://sciret.svn.sourceforge.net/sciret/?rev=713&view=rev Author: alpeb Date: 2008-09-30 14:52:33 +0000 (Tue, 30 Sep 2008) Log Message: ----------- corrected scope in js async call Modified Paths: -------------- trunk/javascript/general.js Modified: trunk/javascript/general.js =================================================================== --- trunk/javascript/general.js 2008-09-30 14:42:29 UTC (rev 712) +++ trunk/javascript/general.js 2008-09-30 14:52:33 UTC (rev 713) @@ -515,7 +515,8 @@ 'index.php?view=GetTodosDropdown', { success: this.showDropDownTodos, - failure: function() {alert('operation failed')} + failure: function() {alert('operation failed')}, + scope: this }, null); }, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-09-30 14:42:42
|
Revision: 712 http://sciret.svn.sourceforge.net/sciret/?rev=712&view=rev Author: alpeb Date: 2008-09-30 14:42:29 +0000 (Tue, 30 Sep 2008) Log Message: ----------- added slogan to footer Modified Paths: -------------- trunk/templates/footer.tpl Modified: trunk/templates/footer.tpl =================================================================== --- trunk/templates/footer.tpl 2008-09-29 21:35:00 UTC (rev 711) +++ trunk/templates/footer.tpl 2008-09-30 14:42:29 UTC (rev 712) @@ -144,7 +144,7 @@ </div><!--end container--> <div id="foot"> - <p>Copyright (C) 2005-2008 Keyboard Monkeys Ltd.</p> + <p>Copyright (C) 2005-2008 Keyboard Monkeys Ltd. Community as a service (TM)</p> </div> </body> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2008-09-29 21:35:17
|
Revision: 711 http://sciret.svn.sourceforge.net/sciret/?rev=711&view=rev Author: alpeb Date: 2008-09-29 21:35:00 +0000 (Mon, 29 Sep 2008) Log Message: ----------- added Article Report functionality to bookmarks as well Modified Paths: -------------- trunk/templates/ReportArticle.tpl trunk/templates/ViewBookmark.tpl trunk/views/ReportArticle.php trunk/views/ViewBookmark.php Modified: trunk/templates/ReportArticle.tpl =================================================================== --- trunk/templates/ReportArticle.tpl 2008-09-29 21:17:58 UTC (rev 710) +++ trunk/templates/ReportArticle.tpl 2008-09-29 21:35:00 UTC (rev 711) @@ -1,6 +1,12 @@ <!-- BEGIN reportForm_block --> <strong> - [l]Report Article[/l] #{artId}: {artTitle} + <!-- BEGIN reportArticle_block --> + [l]Report Article[/l] + <!-- END reportArticle_block --> + <!-- BEGIN reportBookmark_block --> + [l]Report Bookmark[/l] + <!-- END reportBookmark_block --> + #{artId}: {artTitle} </strong> <form action="{reportArticleFormAction}" method="post" style="margin-top:10px"> <input type="hidden" name="artId" value="{artId}" /> Modified: trunk/templates/ViewBookmark.tpl =================================================================== --- trunk/templates/ViewBookmark.tpl 2008-09-29 21:17:58 UTC (rev 710) +++ trunk/templates/ViewBookmark.tpl 2008-09-29 21:35:00 UTC (rev 711) @@ -25,6 +25,7 @@ <!-- BEGIN favoriteArticle_block --> <a href="javascript:void(0);" onclick="addFavorite('article', {bookmark_id});"><img id="favoriteStarImg" src="images/star.png" alt="[l]Add bookmark to favorites[/l]" title="[l]Add bookmark to favorites[/l]" style="display:{favoriteArticleStarImgDisplay}" /><img id="unFavoriteStarImg" src="images/star_crossed.png" alt="[l]Remove bookmark from favorites[/l]" title="[l]Remove bookmark from favorites[/l]" style="display:{unFavoriteArticleStarImgDisplay}"/><img id="favoriteProgressImg" src="images/progress.gif" style="display:none" /></a> <!-- END favoriteArticle_block --> + <a href="{reportArticleLink}"><img src="images/flag.png" alt="[l]Report article[/l]" title="[l]Report article[/l]" /> </span> </div> </td> Modified: trunk/views/ReportArticle.php =================================================================== --- trunk/views/ReportArticle.php 2008-09-29 21:17:58 UTC (rev 710) +++ trunk/views/ReportArticle.php 2008-09-29 21:35:00 UTC (rev 711) @@ -31,6 +31,8 @@ $this->tpl->set_file('main', 'ReportArticle.tpl'); $this->tpl->set_block('main', 'reportForm_block', 'reportForm'); + $this->tpl->set_block('reportForm_block', 'reportArticle_block', 'reportArticle'); + $this->tpl->set_block('reportForm_block', 'reportBookmark_block', 'reportBookmark'); $this->tpl->set_block('main', 'reportsNotConfigured_block', 'reportsNotConfigured'); if (!$this->configuration->getConfigValue('mailArticleReports')) { @@ -70,6 +72,13 @@ )); } + if ($article->isBookmark()) { + $this->tpl->set_var('reportArticle', ''); + $this->tpl->parse('reportBookmark', 'reportBookmark_block'); + } else { + $this->tpl->set_var('reportBookmark', ''); + $this->tpl->parse('reportArticle', 'reportArticle_block'); + } $this->tpl->parse('reportForm', 'reportForm_block'); } Modified: trunk/views/ViewBookmark.php =================================================================== --- trunk/views/ViewBookmark.php 2008-09-29 21:17:58 UTC (rev 710) +++ trunk/views/ViewBookmark.php 2008-09-29 21:35:00 UTC (rev 711) @@ -67,6 +67,7 @@ $this->tpl->set_var(array( 'category' => $this->_getCategoryPath($article->getCategoryId(), 'MainView', true), + 'reportArticleLink' => Library::getLink(array('view' => 'ReportArticle', 'artId' => $article->getId())), 'lang_status' => $status, 'name' => $article->getTitle(), 'urlHref' => $article->getURL(true), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |