Jola
22-11-2009, 03:15
Phoca Gallery nie pozwala na głosowanie na kategorie i na zdjęcia bez zalogowania się użytkownika. Oddane głosy i autorów zapisuje w tabelach a administrator ma możliwość wglądu w takie statystyki.
Pokażę jak można skłonić komponent żeby pozwalał głosować niezalogowanym - Gościom. Po modyfikacji w bazie będzie zapisywane IP Gościa (jeśli użytkownik się nie logował), dlatego powtórne głosowanie na kategorię lub zdjęcie z tego samego IP nie będzie możliwe.
W panelu administratora w podglądzie głosowań nazwa Gościa została zastąpiona jego IP.
Wszystkie standardowe działania PhocaGallery dotyczące użytkowników zalogowanych nie ulegną zmianie.
Opis zmian i podane linie kodu dotyczą wersji 2.5.8, w nawiasie linia kodu dla wersji 2.6.0.Beta.
Ocenianie kategorii
Front
plik components/com_phocagallery/views/category/view.html.php linia 1180 (1363) jest:
$tmpl['notregistered'] = true;zmienić na:
if($user->aid == 0)
$tmpl['notregistered'] = false;ten sam plik linia 1217 (1399) jest:
// Already rated?
$tmpl['alreadyrated'] = PhocaGalleryRateCategory::checkUserVote( (int)$id, (int)$user->id );zmienić na:
// Already rated?
////dodane
if(!$user->id) $user->id = (int)str_replace('.','',$_SERVER['REMOTE_ADDR']);
/////koniec dodane
$tmpl['alreadyrated'] = PhocaGalleryRateCategory::checkUserVote( (int)$id, (int)$user->id );components/com_phocagallery/controllers/category.php linia 512 (462) jest:
$model = $this->getModel('category');
zmienić na:
$model = $this->getModel('category');
/////dodane
if(!$post['userid']){
$post['userid'] = (int)str_replace('.','',$_SERVER['REMOTE_ADDR']);
}
//////koniec dodane ten sam plik linia 476 (525) jest:
if ($user->aid > 0 && $user->id > 0) {zmienić na:
if (($user->aid > 0 && $user->id > 0) || $user->aid == 0) { //zmianaAdministrator
plik administrator/components/com_phocagallery/models/phocagalleryra.php linia 69 (69) jest:
$query = ' SELECT a.*, cc.title AS category, ua.name AS editor, u.id AS ratinguserid, u.username AS ratingusername '
zmienić na:
$query = ' SELECT a.*, cc.title AS category, ua.name AS editor, ifnull(u.id,a.userid) AS ratinguserid, ifnull(u.username, a.userid) AS ratingusername 'ten sam plik linia 107 jest:
$where[] = 'a.userid = u.id';zmienić na:
$where[] = '(a.userid = u.id OR a.userid>0)';
Ocenianie zdjęć
front
plik components/com_phocagallery/views/detail/view.html.php linia 186 (199) jest:
$tmpl['notregisteredimg'] = true;zmienić na:
if($user->aid == 0)
$tmpl['notregisteredimg'] = false;plik components/com_phocagallery/controllers/detail.php linia 54 (54) jest:
$model = $this->getModel('detail');
zmienić na:
$model = $this->getModel('detail');
/////dodane
if(!$post['userid']){
$post['userid'] = (int)str_replace('.','',$_SERVER['REMOTE_ADDR']);
}
////// koniec dodaneten sam plik linia 71 jest
if ($user->aid > 0 && $user->id > 0) {zamienić na
if (($user->aid > 0 && $user->id > 0) || $user->aid == 0) {
Administrator
plik administrator/components/com_phocagallery/models/phocagalleryraimg.php linia 63 (63) jest:
$query = ' SELECT a.*, cc.title AS categorytitle, cc.id AS categoryid, i.title AS imagetitle, i.id AS imageid, ua.name AS editor, u.id AS ratinguserid, u.username AS ratingusername 'zamienić na:
$query = ' SELECT a.*, cc.title AS categorytitle, cc.id AS categoryid, i.title AS imagetitle, i.id AS imageid, ifnull(ua.name, a.userid) AS editor, ifnull(u.id, a.userid) AS ratinguserid, ifnull(u.username, a.userid) AS ratingusername 'ten sam plik linia 98 (98)
$where[] = 'a.userid = u.id';zamienić na:
$where[] = '(a.userid = u.id OR a.userid>0)';
Obie modyfikacje dla kategorii i zdjęć funkcjonują niezależnie od siebie, jeśli nie chcemy pozwalać na ocenianie kategorii to opuszczamy tą część modyfikacji.
Powodzenia.
Pokażę jak można skłonić komponent żeby pozwalał głosować niezalogowanym - Gościom. Po modyfikacji w bazie będzie zapisywane IP Gościa (jeśli użytkownik się nie logował), dlatego powtórne głosowanie na kategorię lub zdjęcie z tego samego IP nie będzie możliwe.
W panelu administratora w podglądzie głosowań nazwa Gościa została zastąpiona jego IP.
Wszystkie standardowe działania PhocaGallery dotyczące użytkowników zalogowanych nie ulegną zmianie.
Opis zmian i podane linie kodu dotyczą wersji 2.5.8, w nawiasie linia kodu dla wersji 2.6.0.Beta.
Ocenianie kategorii
Front
plik components/com_phocagallery/views/category/view.html.php linia 1180 (1363) jest:
$tmpl['notregistered'] = true;zmienić na:
if($user->aid == 0)
$tmpl['notregistered'] = false;ten sam plik linia 1217 (1399) jest:
// Already rated?
$tmpl['alreadyrated'] = PhocaGalleryRateCategory::checkUserVote( (int)$id, (int)$user->id );zmienić na:
// Already rated?
////dodane
if(!$user->id) $user->id = (int)str_replace('.','',$_SERVER['REMOTE_ADDR']);
/////koniec dodane
$tmpl['alreadyrated'] = PhocaGalleryRateCategory::checkUserVote( (int)$id, (int)$user->id );components/com_phocagallery/controllers/category.php linia 512 (462) jest:
$model = $this->getModel('category');
zmienić na:
$model = $this->getModel('category');
/////dodane
if(!$post['userid']){
$post['userid'] = (int)str_replace('.','',$_SERVER['REMOTE_ADDR']);
}
//////koniec dodane ten sam plik linia 476 (525) jest:
if ($user->aid > 0 && $user->id > 0) {zmienić na:
if (($user->aid > 0 && $user->id > 0) || $user->aid == 0) { //zmianaAdministrator
plik administrator/components/com_phocagallery/models/phocagalleryra.php linia 69 (69) jest:
$query = ' SELECT a.*, cc.title AS category, ua.name AS editor, u.id AS ratinguserid, u.username AS ratingusername '
zmienić na:
$query = ' SELECT a.*, cc.title AS category, ua.name AS editor, ifnull(u.id,a.userid) AS ratinguserid, ifnull(u.username, a.userid) AS ratingusername 'ten sam plik linia 107 jest:
$where[] = 'a.userid = u.id';zmienić na:
$where[] = '(a.userid = u.id OR a.userid>0)';
Ocenianie zdjęć
front
plik components/com_phocagallery/views/detail/view.html.php linia 186 (199) jest:
$tmpl['notregisteredimg'] = true;zmienić na:
if($user->aid == 0)
$tmpl['notregisteredimg'] = false;plik components/com_phocagallery/controllers/detail.php linia 54 (54) jest:
$model = $this->getModel('detail');
zmienić na:
$model = $this->getModel('detail');
/////dodane
if(!$post['userid']){
$post['userid'] = (int)str_replace('.','',$_SERVER['REMOTE_ADDR']);
}
////// koniec dodaneten sam plik linia 71 jest
if ($user->aid > 0 && $user->id > 0) {zamienić na
if (($user->aid > 0 && $user->id > 0) || $user->aid == 0) {
Administrator
plik administrator/components/com_phocagallery/models/phocagalleryraimg.php linia 63 (63) jest:
$query = ' SELECT a.*, cc.title AS categorytitle, cc.id AS categoryid, i.title AS imagetitle, i.id AS imageid, ua.name AS editor, u.id AS ratinguserid, u.username AS ratingusername 'zamienić na:
$query = ' SELECT a.*, cc.title AS categorytitle, cc.id AS categoryid, i.title AS imagetitle, i.id AS imageid, ifnull(ua.name, a.userid) AS editor, ifnull(u.id, a.userid) AS ratinguserid, ifnull(u.username, a.userid) AS ratingusername 'ten sam plik linia 98 (98)
$where[] = 'a.userid = u.id';zamienić na:
$where[] = '(a.userid = u.id OR a.userid>0)';
Obie modyfikacje dla kategorii i zdjęć funkcjonują niezależnie od siebie, jeśli nie chcemy pozwalać na ocenianie kategorii to opuszczamy tą część modyfikacji.
Powodzenia.