Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pomógł: 0
Forum PHP.pl > Forum > Gotowe rozwiązania
tamin
Gdzie znajde takiego hacka do phpbb? Zeby bylo tak jak tutaj na forum Pomógł: liczba i zeby mozna bylo punkty dawac.
Dzieki.
cichy
O ile mi sie wydaje to ten HACK zostal stworzony przez:
php.pl Forum Developers
Jeśli jestem w błędzie to niech mnie naprowadzą, bo takiego hacka jeszcze nigdzie nie widziałem.

Pozdro
kubatron
Też szukam tego hacka
Seth
Hacka napsialem ja... ale jako, ze jest on rozzucony po roznych plikach narzie nie bedzie udostepniany.
tamin
Seth to daj tylko co gdzie wkleic...

On jest naprawde dobry.
kubatron
Seth jak postanowisz opublikować ten hack to ja się na to łapie :wink:
Seth
OK. Jak chcesz smile.gif

:arrow: <b>Modyfikacja bazy</b>
Tabela <prefix>_users.
Dodano:
  1. special_rank mediumint(8) ALLOW NULL UNSIGNED


Tabela <prefix>_users.
Dodano:
  1. post_marked enum('n','y') NULL


:arrow: <b>Modyfikacje plikow forum</b>
Dokladnych lini Ci nie podam bo unas wprowadzone sa juz pewne zmiany i nie beda sie pokrywac z tymi, ktore Ty masz.



<b>viewtopic.php</b>:

okolo lini 140 za:
Cytat
$order_sql = ( empty($post_id) ) ? '' : "GROUP BY p.post_id, t.topic_id, t.topic_title, t.topic_status, t.topic_replies, t.topic_time, t.topic_type, t.topic_vote, t.topic_last_post_id, f.forum_name, f.forum_status, f.forum_id, f.auth_view, f.auth_read, f.auth_post, f.auth_reply, f.auth_edit, f.auth_delete, f.auth_sticky, f.auth_announce, f.auth_pollcreate, f.auth_vote, f.auth_attachments ORDER BY p.post_id ASC";

trzeba zmienic $sql na:
  1. <?php
  2. // Rank sql modyfictaion
  3. $sql = &#092;"SELECT t.*, f.forum_name, f.forum_status, f.forum_id, f.auth_view, f.auth_r
    e
  4. d, f.auth_post, f.auth_reply, f.auth_edit, f.auth_delete, f.auth_sticky, f.auth_
  5. nnounce, f.auth_pollcreate, f.auth_vote, f.auth_attachments\" . $count_sql . \"
  6. FROM \" . TOPICS_TABLE . \" t, \" . FORUMS_TABLE . \" f\" . $join_sql_table . \"
  7. WHERE $join_sql
  8. AND f.forum_id = t.forum_id
  9. $order_sql\";
  10. ?>


Okolo 316 lini po:
Cytat
  {
    $can_watch_topic = 0;
    $is_watching_topic = 0;
  }
}

wstaw:
  1. <?php
  2. // Rank ////////////////////////////////////////////////////
  3. $domena = 'forum.php.pl'; // zmien na odpowiednia wg. Twojego adresu.
  4. $pathRef = 'http://'.$domena.'/viewtopic.php?t='.$topic_id;
  5.  
  6.  
  7. if ( substr( $_SERVER['HTTP_REFERER'], 0, strlen( $pathRef ) ) == $pathRef && $userdata['session_logged_in'] )
  8. {
  9.  
  10. if ( !empty($_GET['p_add']) )
  11. {
  12. $p_add = intval($_GET['p_add']);
  13.  
  14. $sql = &#092;"SELECT post_marked, poster_id FROM \".POSTS_TABLE.\" WHERE post_id = $p_add LIMIT 1\";
  15.  
  16. if ( $result = $db->sql_query($sql) )
  17. {
  18. $row = $db->sql_fetchrow($result);
  19.  
  20. if ( isset( $row['post_marked'] ) && $row['post_marked'] != 'y' && $row['poster_id'] != $userdata['user_id'])
  21. {
  22. $sql = &#092;"SELECT special_rank FROM \".USERS_TABLE.\" WHERE user_id = \".$row['poster_id'];
  23.  
  24. if ( $result = $db->sql_query($sql) )
  25. {
  26. $row2 = $db->sql_fetchrow($result);
  27.  
  28. $rank = intval($row2['special_rank']);
  29.  
  30. $sql = &#092;"UPDATE \" . POSTS_TABLE . \" SET post_marked = 'y' WHERE post_id=\".$p_add;
  31. $sql2 = &#092;"UPDATE \" . USERS_TABLE . \" SET special_rank = \".(++$rank).\" WHERE user_id=\".$row['poster_id'];
  32.  
  33. if ( $db->sql_query($sql) && $db->sql_query($sql2) )
  34. {
  35. $template->assign_vars(array(
  36. 'META' => '<meta http-equiv=\"refresh\" content=\"3;url=' . append_sid(&#092;"viewtopic.$phpEx?\" . POST_TOPIC_URL . \"=$topic_id\") . '\">')
  37. );
  38.  
  39. $message .= sprintf($lang['special_point_added'], '<a href=\"' . append_sid(&#092;"viewtopic.$phpEx?\" . POST_TOPIC_URL . \"=$topic_id\") . '\">', '</a>');
  40. $message .= '<br /><br />' . sprintf($lang['Click_return_topic'], '<a href=\"' . append_sid(&#092;"viewtopic.$phpEx?\" . POST_TOPIC_URL . \"=$topic_id\") . '\">', '</a>');
  41. message_die(GENERAL_MESSAGE, $message);
  42. }
  43. }
  44. }
  45. }
  46. }
  47. }
  48. ///////////////////////////////////////////////////////////////
  49. ?>


okolo lini 176 po:
Cytat
$select_post_order .= '</select>';

zmien $sql na:
  1. <?php
  2. // Rank /////////////////////////////////////////////////////////////////////////////////////////////////////
  3. $sql = &#092;"SELECT u.*, p.*, pt.post_text, pt.post_subject, pt.bbcode_uid
  4. FROM &#092;" . POSTS_TABLE . \" p, \" . USERS_TABLE . \" u, \" . POSTS_TEXT_TABLE . \" pt
  5. WHERE p.topic_id = $topic_id
  6. $limit_posts_time
  7. AND pt.post_id = p.post_id
  8. AND u.user_id = p.poster_id
  9. ORDER BY p.post_time $post_time_order
  10. LIMIT $start, &#092;".$board_config['posts_per_page'];
  11. ?>

okolo lini 1269 po:
Cytat
  {
    $l_edited_by = '';
  }

wstaw:
  1. <?php
  2. // Rank /////////////////////////////////////////////////////
  3. $helped_me_show = '';
  4.  
  5. // Wstaw odpowiednie wartosci for na ktorych maja byc oceny
  6. $allowForumList = array( 1, 4, 10, 11, 13, 14, 16, 27 );
  7.  
  8.  
  9. if ( $postrow[0]['username'] == $userdata['username'] && in_array( $forum_id, $allowForumList ) )
  10. {
  11. if ( $poster_rank != $lang['Guest'] && $poster != $postrow[0]['username'] && $postrow[$i]['post_marked'] != 'y' )
  12. {
  13. $helped_me_show = '<a href=\"viewtopic.php?t='.$topic_id.'&p_add='.$postrow[$i]['post_id'].'\">Pomógł mi</a>';
  14. }
  15. }
  16.  
  17. if ( $postrow[$i]['post_marked'] == 'y' )
  18. {
  19. $row_color = 'BDD67A';
  20. $row_class = 'row4';
  21. }
  22. else
  23. {
  24. $row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2'];
  25. $row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];
  26. }
  27. ////////////////////////////////////////////////////////////////////////
  28.  
  29. ?>


okolo lini 1317 dodaj po:
Cytat
  $template->assign_block_vars('postrow', array(

wstaw:
  1. <?php
  2. 'SPECIAL_RANK' => ( $poster_rank != $lang['Guest'] ? $lang['special_rank'].&#092;": \".$rank.\"<br/>\" : '' ), ///// Rank
  3. 'HELPED_ME' => $helped_me_show, ////////////////////////////////////////////////////////// Rank
  4.  
  5. ?>


<b>Glowny plik CSS:</b>
dodaj:
Kod
td.row4  { background-color: #F0EDDE; }       /* RANKING */





<b>viewtopic_body.tpl</b>
Musisz wstawic po {postrow.ICQ_IMG} a przed </td>:
  1. <span class="nav">{postrow.HELPED_ME}</span>


po {postrow.POSTER_POSTS}<br /> wstaw:
  1. <span style="font-weight: bold;">{postrow.SPECIAL_RANK}</span>





Nowy plik: <b>lang_special_rank.php</b>
Ten plik musi znajdowac sie wkatalogu gdzie masz lang_main.php
zawartosc:
  1. <?php
  2. $lang['special_rank'] = 'Pomógł';
  3. $lang['special_point_added'] = 'Użytkownik otrzymał punkt.';
  4. $lang['Sort_Top_Helped'] = '10 Najbardziej pomocnych';
  5. ?>





<b>lang_main.php</b>
na koniec wstaw:
  1. <?php
  2. include('lang_special_rank.php'); // Rank ///////////////////
  3. ?>





<b>memberlist_body.tpl</b>
Po:
Cytat
    <td class="{memberrow.ROW_CLASS}" align="center" valign="middle"><span class="gen">{memberrow.POSTS}</span></td>

wstaw:
  1. <td class="{memberrow.ROW_CLASS}" align="center" valign="middle"><span class="gen">{memberrow.HELPED}</span></td>




<b>memberlist.php</b>
w lini 65 w tablicy $mode_types_text na koncu dodaj:
, $lang['Sort_Top_Helped']

w lini 66 w tablicy $mode_types na koncu dodaj:
, 'top_helped'

W switchu od lini 119 dodaj:
  1. <?php
  2. case 'top_helped':
  3. $order_by = &#092;"special_rank $sort_order LIMIT 10\";
  4. break;
  5. ?>


W lini 150 mien $sql na:
  1. <?php
  2. $sql = &#092;"SELECT special_rank, username, user_id, user_viewemail, user_posts, user_re
    g
  3. ate, user_from, user_website, user_email, user_icq, user_aim, user_yim, user_msn
  4. , user_avatar, user_avatar_type, user_allowavatar
  5. FROM &#092;" . USERS_TABLE . \"
  6. WHERE user_id <> &#092;" . ANONYMOUS . \"
  7. ORDER BY $order_by&#092;";
  8. ?>
kubatron
Seth zawsze w gotowości dzięki za to :]
aceide
Zrobiłem wszystko na phpbb 2.0.8 (bez zainstalowanych modow) i nie mam pojecia co to dalo oprocz tego ze sie memberlist troszke spapralo (nie ma tam Pomogl) i w info usera postu jest "Pomogl". A jak moge uzyc tego pomogl mi? smile.gif. Mozecie sie smiac, ale na tym forum rowniez nie widze jak to moge zrobic.
PMadej
bo pomogl mi widzi tylko autor tematu wiec jesli zalozysz jakis temat to bedziesz mogl w nim rozdawac punkty ... dotyczy to roznych for wiec na jednych jest aktywny ten mod a na innych nie.
Przemo`
Modzik bardzo fajny, jednak lekko nieskuteczny i dziurawy... Nieskuteczny dlatego, ze wymaga istnienia adresu referowanego forum a nie kazdy firewall lub przegladarka to "obsłuży", dodatkowo nie zawsze przegladamy odpowiedzi w swoim remacie, klikajac bezposrednio na "czysty" link do tematu, czesto robimy to klikajac na nieco inny link, ktory nie jest dokladnie taki sam, wówczas adres referowany bedzie inny. Nie obsluguje tez kilku podstron, na dalszych stronach przycisk sie nie pokazuje, poniewaz wtedy $postrow[0] to jest pierwszy post na danej stronie i inny uzytkownik niz autor miał w zamyśle. A dziurawy dlatego, że pozwala na nieautoryzowane zwiekszanie licznika pomocy. Wystarczy umiescic odpowiedni link w temacie w ktorym jest jakis post uzytkownika ktoremu chcemy zwiekszyc i na niego kliknac. tamin wlasnie dostal ode mnie nieautoryzowany punkt (w pierwszym poscie tego tematu) na probe.
Idę popatrzeć jak to można rozsądnie załatać, bez dodawania skomplikowanego mechanizmu dokładnej autoryzacji i jeśli coś wymyślę to tu napisze.
Przemo`
Ok, coś wymyśliłem, wydaje mi się, że już zabezpiecza przed wszelkimi oszustwami oraz usprawnia znacznie skrypt eliminując sprawdzanie adresu referowanego.

versja 1.1.0 smile.gif
Changelog
- Załatanie dziury pozwalającej na nieautoryzowane zwiększanie liczników przez innych userów.
- Wyeliminowanie sprawdzanie adresu referowanego który powodował "nie działanie" oceniania w różnych sytuacjach.
- Poprawienie sprawdzania czy użytkownik oglądający temat jest autorem pierwszego postu (niewyświetlanie ikony na kolejnych stronach tematu)

otwórz viewtopic.php i znajdź:[php:1:8bc6a2750d]// Rank ////////////////////////////////////////////////////
$domena = 'forum.php.pl'; // zmien na odpowiednia wg. Twojego adresu.
$pathRef = 'http://'.$domena.'/viewtopic.php?t='.$topic_id;


if ( substr( $_SERVER['HTTP_REFERER'], 0, strlen( $pathRef ) ) == $pathRef &&
$userdata['session_logged_in'] )
{

if ( !empty($_GET['p_add']) )
{
$p_add = intval($_GET['p_add']);

$sql = "SELECT post_marked, poster_id FROM ".POSTS_TABLE." WHERE post_id =
$p_add LIMIT 1";

if ( $result = $db->sql_query($sql) )
{
$row = $db->sql_fetchrow($result);

if ( isset( $row['post_marked'] ) && $row['post_marked'] != 'y' &&
$row['poster_id'] != $userdata['user_id'])
{
$sql = "SELECT special_rank FROM ".USERS_TABLE." WHERE user_id =
".$row['poster_id'];

if ( $result = $db->sql_query($sql) )
{
$row2 = $db->sql_fetchrow($result);

$rank = intval($row2['special_rank']);

$sql = "UPDATE " . POSTS_TABLE . " SET post_marked = 'y' WHERE
post_id=".$p_add;
$sql2 = "UPDATE " . USERS_TABLE . " SET special_rank = ".(++$rank)." WHERE
user_id=".$row['poster_id'];

if ( $db->sql_query($sql) && $db->sql_query($sql2) )
{
$template->assign_vars(array(
'META' => '<meta http-equiv="refresh" content="3;url=' .
append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id") .
'">')
);

$message .= sprintf($lang['special_point_added'], '<a href="' .
append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id") . '">',
'</a>');
$message .= '<br /><br />' . sprintf($lang['Click_return_topic'], '<a
href="' . append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL .
"=$topic_id") . '">', '</a>');
message_die(GENERAL_MESSAGE, $message);
}
}
}
}
}
}
///////////////////////////////////////////////////////////////[/php:1:8bc6a2750d]zamień na:[php:1:8bc6a2750d]// Rank ////////////////////////////////////////////////////
if ( isset($_GET['p_add']) )
{
$p_add = intval($_GET['p_add']);

$sql = "SELECT post_marked, poster_id FROM " . POSTS_TABLE . "
WHERE post_id = $p_add
LIMIT 1";

if ( $result = $db->sql_query($sql) )
{
$row = $db->sql_fetchrow($result);

if ( $row['post_marked'] != 'y' && $row['poster_id'] != $userdata['user_id'])
{
$sql = "SELECT special_rank FROM " . USERS_TABLE . " WHERE user_id = " . $row['poster_id'];

if ( $result = $db->sql_query($sql) )
{
$row2 = $db->sql_fetchrow($result);

$rank = ($row2['special_rank']) ? intval($row2['special_rank']) : 0;

$sql3 = "SELECT topic_poster FROM " . TOPICS_TABLE . "
WHERE topic_id = $topic_id
AND topic_poster = " . $userdata['user_id'];

if ( !($result3 = $db->sql_query($sql3)) )
{
message_die(GENERAL_ERROR, 'Could not query topics table', '', __LINE__, __FILE__, $sql3);
}
if ( !($row3 = $db->sql_fetchrow($result3)) )
{
message_die(GENERAL_ERROR, $lang['Not_Authorised']);
}

$sql = "UPDATE " . POSTS_TABLE . " SET post_marked = 'y'
WHERE post_id = " . $p_add;

$sql2 = "UPDATE " . USERS_TABLE . " SET special_rank = " . (++$rank) . "
WHERE user_id = " . $row['poster_id'];

if ( $db->sql_query($sql) && $db->sql_query($sql2) )
{
$template->assign_vars(array(
'META' => '<meta http-equiv="refresh" content="3;url=' . append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id") .'">')
);

$message .= sprintf($lang['special_point_added'], '<a href="' .append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id") . '">','</a>');
$message .= '<br /><br />' . sprintf($lang['Click_return_topic'], '<a href="' . append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id") . '">', '</a>');
message_die(GENERAL_MESSAGE, $message); }
}
}
}
}[/php:1:8bc6a2750d]
Znajdź:[php:1:8bc6a2750d]// Rank /////////////////////////////////////////////////////
$helped_me_show = '';

// Wstaw odpowiednie wartosci for na ktorych maja byc oceny
$allowForumList = array( 1, 4, 10, 11, 13, 14, 16, 27 );


if ( $postrow[0]['username'] == $userdata['username'] && in_array( $forum_id,
$allowForumList ) )
{
if ( $poster_rank != $lang['Guest'] && $poster != $postrow[0]['username'] &&
$postrow[$i]['post_marked'] != 'y' )
{
$helped_me_show = '<a
href="viewtopic.php?t='.$topic_id.'&p_add='.$postrow[$i]['post_id'].'">Pomógł
mi</a>';
}
}

if ( $postrow[$i]['post_marked'] == 'y' )
{
$row_color = 'BDD67A';
$row_class = 'row4';
}
else
{
$row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2'];
$row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];
}
////////////////////////////////////////////////////////////////////////[/php:1:8bc6a2750d]Zamień na:[php:1:8bc6a2750d] //Rank /////////////////////////////////////////////////////
$helped_me_show = '';
$allowForumList = array(1, 17, 14, 11, 16, 9);

if ( in_array($forum_id, $allowForumList) && $userdata['session_logged_in'] && $poster_id != ANONYMOUS && $postrow[$i]['post_marked'] != 'y' && $poster_id != $userdata['user_id'])
{
$sql3 = "SELECT topic_poster FROM " . TOPICS_TABLE . "
WHERE topic_id = $topic_id
AND topic_poster = " . $userdata['user_id'];

if ( !($result3 = $db->sql_query($sql3)) )
{
message_die(GENERAL_ERROR, 'Could not query topics table', '', __LINE__, __FILE__, $sql3);
}
if ( $row3 = $db->sql_fetchrow($result3) )
{
$helped_me_show = '<a href="viewtopic.php?t=' . $topic_id . '&p_add=' . $postrow[$i]['post_id'] . '"><img src="images/hand.gif" border="0" title="Pomógł mi" alt="Pomógł mi"></a> ';
}
}
if ( $postrow[$i]['post_marked'] == 'y' )
{
$row_color = 'BDD67A';
$row_class = 'row4';
}
else
{
$row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2'];
$row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];
}[/php:1:8bc6a2750d]Znajdź:[php:1:8bc6a2750d]'SPECIAL_RANK' => ( $poster_rank != $lang['Guest'] ? $lang['special_rank'].":
".$rank."<br/>" : '' ), ///// Rank[/php:1:8bc6a2750d]Zamień na:[php:1:8bc6a2750d]'SPECIAL_RANK' => ($postrow[$i]['special_rank'] > 0 && in_array($forum_id, $allowForumList) && $poster_id != ANONYMOUS) ? '<b>' . $lang['special_rank'] . ':</b> ' . $postrow[$i]['special_rank'] . '<br/>' : '',[/php:1:8bc6a2750d]Teraz wszedzie tam gdzie userowi pojawi sie ikona to bedzie mógł w tym poście zwiększyć licznik jego autora niezaleznie od innych czynników. Ikona pojawiać się będzie gdy ID forum jest na liście, user przeglądający jest autorem tematu, gdy nie jest to jego post i gdy jeszcze nie kliknął ikony tego postu.
Mavestinus
A u mnie ten mod nie działa :/.
Instalowałem go 2 razy na 'gołym' phpbb 2.0.8 (localhost) raz bez poprawki, a przed chwilą z poprawką smile.gif. Wygląda to tak:
- pod avatarem każego z użytkowników ciągle widnieje napis pomógł: [pusto]
- gdy zaloguję się jako osoba która jest autorem tematu to pod każdą odpowiedzią widnieje link 'pomógł mi' ale kliknięcie na niego powoduje jedynie ponowne wczytanie tematu.
- Lista użytkowników się zepsuła...

W bazie utworzyłem odpowiednie pola (zgodnie z instrukcją).
Co może być powodem?
Przemo`
Spróbuj wykonać[sql:1:11bc083bdd]UPDATE phpbb_posts SET post_marked = 'n';
UPDATE phpbb_users SET special_rank = 0;[/sql:1:11bc083bdd]
Mavestinus
Jesteśmy coraz bliżej smile.gif...
Z twojego postu wywnioskowałem że pole post_marked powinno być w tabeli phpbb_posts, a nie jak napisał seth phpbb_users. Po tej zmianie klikając na link pomógł mi pojawia się informacja o dodaniu punktu, ale nic poza tym - punktów jak nie byłao tak nie ma sad.gif.
Wykonałem podane przez Ciebie zapytania i dalej nic...
@przemo: a tobie na localu ten mod działa??
EDIT: Sprawdziłem w bazie - gdy dodaję komuś punkty ich wartość zwiększa się - więc coś jest nie tak z wyświetlaniem :/
Przemo`
Jasne, że działa, online też działa na http://przemo.org/phpBB2/forum Skopiuj swoj viewtopic.php na viewtopic.txt to zerkne.
Mavestinus
Mój veiwtopic.php.
Przemo`
No tak, zapomniałem w instrukcji dopisać jeszcze jednej zmiany: Znajdź:
Kod
'SPECIAL_RANK' => ( $poster_rank != $lang['Guest'] ? $lang['special_rank'].":

".$rank."<br/>" : '' ), ///// Rank
Zamień na:
Kod
'SPECIAL_RANK' => ($postrow[$i]['special_rank'] > 0 && in_array($forum_id, $allowForumList) && $poster_id != ANONYMOUS) ? '<b>' . $lang['special_rank'] . ':</b> ' . $postrow[$i]['special_rank'] . '<br/>' : '',
(w powyższej instrukcji już to dodałem.)
lewy
Po kliknięciu "Pomógł mi", użytkownikowi nie uaktualnia się liczba ile razy pomógł.
(Pomógł: XXX), wogule nie ma tej linijki.
Wydaje mi się, że dodałem złe zapytania do bazy.
Powiedzcie jakie dokłądnie zapuytanie mam dodać.
Herkules
A mi w memberlist nie wyświetla nic, mam puste pola, może ma ktoś też z tym problem bądz wie jak to naprawić to prosił bym o odpowiedź. Bądz przesłanie mi sowjego pliku memberlist.php
z góry dzieki
aceide
A ma ktoś pliki z działającym takim modem? Tzn. czyste (ew. pare hacków) phpBB + to?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.