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.
|