basic ajax voting support. has a bad counting bug somewhere
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@445 b3834d28-1941-0410-a4f8-b48e95affb8f
This commit is contained in:
parent
a63765a4ad
commit
a3ba58dfc0
5 changed files with 105 additions and 14 deletions
|
@ -13,11 +13,13 @@ if (isset($row['hasVoted']) && !$row['hasVoted']) {
|
||||||
} else {
|
} else {
|
||||||
$classes = 'vote-badge';
|
$classes = 'vote-badge';
|
||||||
}
|
}
|
||||||
echo '<span class="' . $classes . '">';
|
echo '<span class="' . $classes . '" id="bmv-' . $row['bId'] . '">';
|
||||||
|
|
||||||
if (isset($row['hasVoted']) && !$row['hasVoted']) {
|
if (isset($row['hasVoted']) && !$row['hasVoted']) {
|
||||||
echo '<a class="vote-for" rel="nofollow" href="'
|
echo '<a class="vote-for" rel="nofollow" href="'
|
||||||
. createVoteURL(true, $row['bId']) . '">+</a>';
|
. createVoteURL(true, $row['bId']) . '"'
|
||||||
|
. ' onclick="javascript:vote(' . $row['bId'] . ',1); return false;"'
|
||||||
|
. '>+</a>';
|
||||||
} else {
|
} else {
|
||||||
echo '<span class="vote-for-inactive">+</span>';
|
echo '<span class="vote-for-inactive">+</span>';
|
||||||
}
|
}
|
||||||
|
@ -26,7 +28,9 @@ echo '<span class="voting">' . $row['bVoting'] . '</span>';
|
||||||
|
|
||||||
if (isset($row['hasVoted']) && !$row['hasVoted']) {
|
if (isset($row['hasVoted']) && !$row['hasVoted']) {
|
||||||
echo '<a class="vote-against" rel="nofollow" href="'
|
echo '<a class="vote-against" rel="nofollow" href="'
|
||||||
. createVoteURL(false, $row['bId']) . '">-</a>';
|
. createVoteURL(false, $row['bId']) . '"'
|
||||||
|
. ' onclick="vote(' . $row['bId'] . ',-1); return false;"'
|
||||||
|
. '>-</a>';
|
||||||
} else {
|
} else {
|
||||||
echo '<span class="vote-against-inactive">-</span>';
|
echo '<span class="vote-against-inactive">-</span>';
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,19 +80,51 @@ class SemanticScuttle_Service_Bookmark extends SemanticScuttle_DbService
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load a single bookmark and return it
|
||||||
|
*
|
||||||
|
* @param integer $bid Bookmark ID
|
||||||
|
* @param boolean $include_tags If tags shall be loaded
|
||||||
|
*
|
||||||
|
* @return mixed Array with bookmark data or false in case
|
||||||
|
* of an error.
|
||||||
|
*/
|
||||||
function getBookmark($bid, $include_tags = false)
|
function getBookmark($bid, $include_tags = false)
|
||||||
{
|
{
|
||||||
if (!is_numeric($bid))
|
if (!is_numeric($bid)) {
|
||||||
return;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
$sql = 'SELECT * FROM '. $this->getTableName() .' WHERE bId = '. $this->db->sql_escape($bid);
|
$userservice = SemanticScuttle_Service_Factory::get('User');
|
||||||
|
|
||||||
if (!($dbresult = & $this->db->sql_query($sql)))
|
$query_1 = '*';
|
||||||
message_die(GENERAL_ERROR, 'Could not get vars', '', __LINE__, __FILE__, $sql, $this->db);
|
$query_2 = $this->getTableName() . ' as B';
|
||||||
|
|
||||||
if ($row = & $this->db->sql_fetchrow($dbresult)) {
|
//Voting system
|
||||||
|
//needs to be directly after FROM bookmarks
|
||||||
|
if ($GLOBALS['enableVoting'] && $userservice->isLoggedOn()) {
|
||||||
|
$currentuser = $userservice->getCurrentUser();
|
||||||
|
$vs = SemanticScuttle_Service_Factory::get('Vote');
|
||||||
|
$query_1 .= ', !ISNULL(V.bId) as hasVoted, V.vote as vote';
|
||||||
|
$query_2 .= ' LEFT JOIN ' . $vs->getTableName() . ' AS V'
|
||||||
|
. ' ON B.bId = V.bId'
|
||||||
|
. ' AND V.uId = ' . (int)$currentuser['uId'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = 'SELECT ' . $query_1 . ' FROM '
|
||||||
|
. $query_2
|
||||||
|
.' WHERE B.bId = '. $this->db->sql_escape($bid);
|
||||||
|
|
||||||
|
if (!($dbresult = & $this->db->sql_query($sql))) {
|
||||||
|
message_die(
|
||||||
|
GENERAL_ERROR, 'Could not get bookmark',
|
||||||
|
'', __LINE__, __FILE__, $sql, $this->db
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($row = $this->db->sql_fetchrow($dbresult)) {
|
||||||
if ($include_tags) {
|
if ($include_tags) {
|
||||||
$b2tservice = SemanticScuttle_Service_Factory :: get('Bookmark2Tag');
|
$b2tservice = SemanticScuttle_Service_Factory::get('Bookmark2Tag');
|
||||||
$row['tags'] = $b2tservice->getTagsForBookmark($bid);
|
$row['tags'] = $b2tservice->getTagsForBookmark($bid);
|
||||||
}
|
}
|
||||||
$output = $row;
|
$output = $row;
|
||||||
|
|
21
www/ajaxVote.php
Normal file
21
www/ajaxVote.php
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* We re-use vote.php but set the ajax flag
|
||||||
|
*/
|
||||||
|
$GLOBALS['ajaxRequest'] = true;
|
||||||
|
require 'vote.php';
|
||||||
|
|
||||||
|
$bs = SemanticScuttle_Service_Factory::get('Bookmark');
|
||||||
|
$ts = SemanticScuttle_Service_Factory::get('Template');
|
||||||
|
$bmrow = $bs->getBookmark($bookmark);
|
||||||
|
|
||||||
|
header('Content-Type: text/xml; charset=utf-8');
|
||||||
|
echo '<voteresult><bookmark>' . $bookmark . '</bookmark>'
|
||||||
|
. '<html xmlns="http://www.w3.org/1999/xhtml">';
|
||||||
|
$ts->loadTemplate(
|
||||||
|
'bookmarks-vote.inc.tpl.php',
|
||||||
|
array('row' => $bmrow)
|
||||||
|
);
|
||||||
|
|
||||||
|
echo '</html></voteresult>';
|
||||||
|
?>
|
|
@ -42,7 +42,7 @@ function deleteConfirmed(ele, input, response) {
|
||||||
post.style.display = 'none';
|
post.style.display = 'none';
|
||||||
deleted = false;
|
deleted = false;
|
||||||
} else {
|
} else {
|
||||||
loadXMLDoc('<?php echo ROOT; ?>ajaxDelete.php?id=' + input);
|
loadXMLDocProc('<?php echo ROOT; ?>ajaxDelete.php?id=' + input);
|
||||||
post.style.display = 'none';
|
post.style.display = 'none';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -97,7 +97,7 @@ function getTitle(input, response){
|
||||||
title.style.backgroundImage = 'none';
|
title.style.backgroundImage = 'none';
|
||||||
title.value = response;
|
title.value = response;
|
||||||
} else if (input.indexOf('http') > -1) {
|
} else if (input.indexOf('http') > -1) {
|
||||||
loadXMLDoc('<?php echo ROOT; ?>ajaxGetTitle.php?url=' + input);
|
loadXMLDocProc('<?php echo ROOT; ?>ajaxGetTitle.php?url=' + input);
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -105,11 +105,25 @@ function getTitle(input, response){
|
||||||
}
|
}
|
||||||
|
|
||||||
var xmlhttp;
|
var xmlhttp;
|
||||||
function loadXMLDoc(url) {
|
function loadXMLDocProc(url) {
|
||||||
|
loadXMLDoc(url, processStateChange);
|
||||||
|
}
|
||||||
|
function vote(bookmark, vote) {
|
||||||
|
if (vote == 1) {
|
||||||
|
vote = 'for';
|
||||||
|
} else {
|
||||||
|
vote = 'against';
|
||||||
|
}
|
||||||
|
loadXMLDoc(
|
||||||
|
'<?php echo ROOT; ?>ajaxVote.php/' + vote + '/' + bookmark,
|
||||||
|
processVotingResult
|
||||||
|
);
|
||||||
|
}
|
||||||
|
function loadXMLDoc(url, callback) {
|
||||||
// Native
|
// Native
|
||||||
if (window.XMLHttpRequest) {
|
if (window.XMLHttpRequest) {
|
||||||
xmlhttp = new XMLHttpRequest();
|
xmlhttp = new XMLHttpRequest();
|
||||||
xmlhttp.onreadystatechange = processStateChange;
|
xmlhttp.onreadystatechange = callback;
|
||||||
xmlhttp.open("GET", url, true);
|
xmlhttp.open("GET", url, true);
|
||||||
xmlhttp.send(null);
|
xmlhttp.send(null);
|
||||||
// ActiveX
|
// ActiveX
|
||||||
|
@ -131,6 +145,20 @@ function processStateChange() {
|
||||||
eval(method + '(\'\', result)');
|
eval(method + '(\'\', result)');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
function processVotingResult() {
|
||||||
|
if (xmlhttp.readyState != 4 || xmlhttp.status != 200) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var response = xmlhttp.responseXML.documentElement;
|
||||||
|
var bookmark = response.getElementsByTagName('bookmark')[0]
|
||||||
|
.firstChild.nodeValue;
|
||||||
|
var bmnode = document.getElementById('bmv-'+bookmark);
|
||||||
|
|
||||||
|
bmnode.parentNode.replaceChild(
|
||||||
|
response.getElementsByTagName('html')[0].firstChild,
|
||||||
|
bmnode
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function playerLoad() {
|
function playerLoad() {
|
||||||
var anchors = document.getElementsByTagName('a');
|
var anchors = document.getElementsByTagName('a');
|
||||||
|
|
|
@ -65,5 +65,11 @@ if ($vs->hasVoted($bookmark, $user)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
$vs->vote($bookmark, $user, $type == 'for' ? 1 : -1);
|
$vs->vote($bookmark, $user, $type == 'for' ? 1 : -1);
|
||||||
|
|
||||||
|
if (isset($GLOBALS['ajaxRequest']) && $GLOBALS['ajaxRequest']) {
|
||||||
|
//we are in ajax mode and return the badge in ajaxVote.php
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
header('Location: ' . $from);
|
header('Location: ' . $from);
|
||||||
?>
|
?>
|
Loading…
Reference in a new issue