Изменение системы голосования Изменение системы голосования
 

News:

cpg1.5.48 Security release - upgrade mandatory!
The Coppermine development team is releasing a security update for Coppermine in order to counter a recently discovered vulnerability. It is important that all users who run version cpg1.5.46 or older update to this latest version as soon as possible.
[more]

Main Menu

Изменение системы голосования

Started by D.Kalessky, December 04, 2009, 09:01:21 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

D.Kalessky

Всем привет!
Прошу помощи в изменении встроенной системы голосования. Готовое решение найти не смог.

Для проведения фотоконкурсов всем участникам хотелось бы:
1. Возможность выставления оценки только одной фотке в указанном альбоме\категории.
2. Ограничение самих оценок только одной: "голосовать" (сейчас с 0 до 5)

Кто возьмется помочь? Заранее спасибо!

D.Kalessky

упс... что-то с кодировочкой глюк.
повторно прошу помощи в изменении системы голосования за фотки. хотелось бы сделать по принципу- только один голос за одну фотку в альбоме.
CPG 1.4.18

Makc666

Про кодировку - не используйте на этом форуме Internet Explorer.
http://forum.coppermine-gallery.net/index.php/topic,37805.0.html

По теме.

Открыть файл:
ratepic.php

Найти строку:
if (!empty($user) && $user==$owner && !USER_IS_ADMIN) cpg_die(ERROR, $lang_rate_pic_php['forbidden'], __FILE__, __LINE__);

После встаить код:
if (!(mysql_num_rows($result))){
    $sql = "SELECT aid " . "FROM {$CONFIG['TABLE_PICTURES']} " . "WHERE pid = '$pic'";
    $result = cpg_db_query($sql);
    if (mysql_num_rows($result)){
        $row = mysql_fetch_array($result);
        $sql = "SELECT pid " . "FROM {$CONFIG['TABLE_PICTURES']} " . "WHERE aid = '$row[aid]'";
        $result = cpg_db_query($sql);
        if (mysql_num_rows($result)){
            while($row = mysql_fetch_array($result)){
                $pic_array[] = $row[pid];
            }
        }
    }else{
        cpg_die(ERROR, $lang_rate_pic_php['non_exist_ap'], __FILE__, __LINE__);
    }
    $sql = "SELECT pic_id " . "FROM {$CONFIG['TABLE_VOTES']} " . "WHERE user_md5_id = '$user_md5_id'";
    $result = cpg_db_query($sql);
        if (mysql_num_rows($result)){
            while($row = mysql_fetch_array($result)){
                $pic_array_votes[] = $row[pic_id];
            }
        }
}
foreach ($pic_array_votes as $k=>$v){
    if (array_search($v, $pic_array)){
        cpg_die(ERROR, $lang_rate_pic_php['already_rated'], __FILE__, __LINE__);
    }
}


В коде выше ошибка
$lang_rate_pic_php['already_rated']
означает, что в данном альбоме вы уже голосовали.
Поэтому её можно изменить на свою через языковый файл.






D.Kalessky

Makc666, спасибо!
На сколько я понял, эти изменения позволяют голосовать только за одну фотку в альбоме. А каким образом ограничить количество выставляемых оценок и вывод результатов голосования?

чуть подробнее поясню чего я хочу добиться:
1. возможность проголосовать только за одну фотку. -выполнено.
2. выставляется только одна оценка. сейчас с 0 до 5.
3. поскольку оценка одна, то в результатах голосования хотелось бы видеть не общий балл, а просто количество голосов. возможно этого можно добиться оставлением одной оценки в 1 балл. тогда и получится, что кол-во баллов будет соответсвовать кол-ву проголосовавших. но как этого добиться?
4. возможно ли скрыть результаты голосования для определенной группы участников, но оставив при этом возможность голосовать?

Makc666

Quote from: D.Kalessky on February 02, 2010, 07:36:25 AM
2. выставляется только одна оценка. сейчас с 0 до 5.
В версии 1.5.2+ можно выбирать количество выставляемых звёзд для голосования.

Quote from: D.Kalessky on February 02, 2010, 07:36:25 AM
3. поскольку оценка одна, то в результатах голосования хотелось бы видеть не общий балл, а просто количество голосов. возможно этого можно добиться оставлением одной оценки в 1 балл. тогда и получится, что кол-во баллов будет соответсвовать кол-ву проголосовавших. но как этого добиться?
Наверное переходить в будещем на 1.5.2+

Quote from: D.Kalessky on February 02, 2010, 07:36:25 AM
4. возможно ли скрыть результаты голосования для определенной группы участников, но оставив при этом возможность голосовать?

D.Kalessky, я уже много раз писал, что на php можно сделать что угодно.

D.Kalessky

подскажите, пожалуйста, какая часть кода в CPG 1.4.18 отвечает за оценки, которыми можно оценить фотографии?
спасибо

Makc666

Quote from: D.Kalessky on March 01, 2010, 07:30:50 AM
подскажите, пожалуйста, какая часть кода в CPG 1.4.18 отвечает за оценки, которыми можно оценить фотографии?
спасибо

Отвечает целый файл ratepic.php

Уточните вопрос.

D.Kalessky

уточняю свой вопрос, хотя он был задан мной несколькими сообщениями выше.
пользователи галереи убедительно просят сделать так, чтоб можно было выставлять только одну оценку фотографии, а не по градации от 0 до 5 баллов, т.е. мне нужна только одна оценка в 1 балл.

Makc666

Quote from: D.Kalessky on March 04, 2010, 02:58:19 PM
уточняю свой вопрос, хотя он был задан мной несколькими сообщениями выше.
пользователи галереи убедительно просят сделать так, чтоб можно было выставлять только одну оценку фотографии, а не по градации от 0 до 5 баллов, т.е. мне нужна только одна оценка в 1 балл.

1. Открыть:
ratepic.php

2. Найти:
$rate = min($rate, 5);
$rate = max($rate, 0);


3. Заменить на:
$rate = min($rate, 1);
$rate = max($rate, 1);


4. Открыть:
themes.inc.php

5. В свою тему скопировать функцию:
$template_image_rating = <<<EOT

6. В скопированном коде удалить или закомментировать срочки отвечающие за звезды 0, 2, 3, 4, 5.
Т.е должна остаться только срока, начинающаяся на:
<td class="tableb_compact" width="17%" align="center"><a href="{RATE1}" title="{POOR}" rel="nofollow"><img src="{LOCATION}images/rating1.gif

7. В данной строке можно подправить перевод для фрагмента:
title="{POOR}"

К примеру, заменить на:
title="{TITLE}"

8. Можно заменить изображение /images/rating1.gif на какое-нибудь другое.

D.Kalessky

Makc666, спасибо!
После внесенных изменений все более менее стало похоже на то, что хотел.
Но еще вопросик есть. Сейчас в альбоме показывается рейтинг фоток так: текущий рейтинг: 1 / 5 - Голосов: 1) Как оставить только количество проголосовавших? т.е. убрать 1 / 5 и оставить только Голосов: 1 ?
В очередной раз спасибо!

D.Kalessky

с предыдущим вопросом разобрался сам. спс

Makc666

Quote from: D.Kalessky on March 09, 2010, 09:38:17 AM
с предыдущим вопросом разобрался сам. спс
Если напишите, как разобрались, что нужно делать всегда, то мы будем благодарны!