Strony: [1]   Bottom Do dołu
   Drukuj   
ico Autor    
[EN] [ES] [PT] [IT] [DE] [FR] [NL] [TR] [SR] [RU]
     Topic: Invite mod  [Przeczytany 2556 razy]
0 użytkowników i 1 Gość przegląda ten wątek.
Full Member
***
Offline
20.05.2016 11:09:38
Topic Starter
 Poland Mężczyzna
Poland
  WWW
DATA: [23.01.2010 13:21:16] Invite mod
Link:  http://poligon.ricoroco.com/fora/smf/index.php?topic=679.msg1704#msg1704  
witam mam problem z tym modem do zaproszeń
jako tako instalkę upgradowałem do smf 2 natomiast jak zawsze problem z bazą danych
roco wielka prośba możesz zerknąć jak to przerobić na wersje 2.0
w 1.x działa bez problemów

GeSHi -› Code: [select]
<?php

if (!defined(&#39;SMF&#39;))
    die(&#39;Hacking attempt...&#39;);

db_query("CREATE TABLE IF NOT EXISTS {db_prefix}invites (
  ID_INVITE mediumint(8) unsigned NOT NULL auto_increment,
  ID_MEMBER mediumint(8) unsigned NOT NULL default &#39;0&#39;,
  ID_REGISTRATION mediumint(8) unsigned NOT NULL default &#39;0&#39;,
  inviteTime int(10) unsigned NOT NULL default &#39;0&#39;,
  inviteKey varchar(64) NOT NULL default &#39;&#39;,
  PRIMARY KEY  (ID_INVITE),
  KEY ID_MEMBER (ID_MEMBER),
  KEY inviteTime (inviteTime),
  KEY inviteKey (inviteKey)
)"
, __FILE__, __LINE__);



$request = db_query("
    SHOW COLUMNS
    FROM {db_prefix}invites
    "
, __FILE__, __LINE__);

$columns = array();
while ($row = mysql_fetch_assoc($request))
    $columns[] = $row[&#39;Field&#39;];

if (!in_array(&#39;inviteEmail&#39;, $columns))
    db_query("ALTER TABLE {db_prefix}invites ADD inviteEmail TINYTEXT NOT NULL", __FILE__, __LINE__);

?>
// Created by GeSHi 1.0.8.10 | code: -› [code=PHP] | load:0.032s | speed:28.30 KB/s



link do moda http://custom.simplemachines.org/mods/index.php?mod=653



Attention! Testing modifications - Steam Profile

IP IP Zapisane

Władczy, choleryczny, wybuchowy, radykalny we wszystkim, z
rozpustnym wyobrażeniem upodobań które nigdy nie były widziane,
ateistyczny pod względem fanatyzmu, tutaj masz mnie w pigułce
i zabij mnie znowu albo weź mnie takim jaki jestem,
bo Ja się nie zmienię.
Administrator
*****
Imagination is more Important than Knowledge
Offline
08.05.2017 21:24:16
 United States Mężczyzna
United States
  WWW
DATA: [23.01.2010 19:47:58] Odp: Invite mod
Link:  http://poligon.ricoroco.com/fora/smf/index.php?topic=679.msg1708#msg1708 Post #1 
Hi Nice and Warm

Wiesz, lubię ludzi zakręconych, mam tez słabość do huncwotów hehe, ale Ty jesteś porządnie zakręcony. Masz u mnie plucha, za swoją determinację i niespożytą energię. To oczywiście fajna zabawa z tym przerabianiem modów..
Jednak.. uważam autorytatywnie.. hmm co za język mamy, że taką zabawę można uskuteczniać, w momencie, kiedy znasz dobrze silnik i semantykę wersji 1.xx i wersji 2.xx oraz widzisz różnice pomiędzy nimi. jeśli przyjrzałbyś się silnikom ostatnich bet'ek, do zobaczyłbyś ile było zmian konceptu i w ogóle zmian.

Zobacz wrzucasz, od moda to co ma się wykonać na bazie danych, ok, załóżmy że zostanie to tak przepisane, że "wejdzie" znaczy się - zaskoczy i kod się wykona. Jednak to dość skomplikowany mod, który miesza w wielu plikach. W tych plikach są odwołania do bazy, w tym wypadku wg. procedur wyłącznych dla smf 1.1.x. Nie chodzi tylko o to, że wywołania spowodują poważne błędy, tylko chodzi o to, że taki mod musi zostać Przemodelowany! W wersji 2.0 pewne "rzeczy" działają w inny sposób, są inne funkcje, tj. i uległo zmianie nazewnictwo i doszły nowe funkcje a z niektórych starych zrezygnowano. Osobiście mam żal, że celowo, pewne pozytywne zmiany, jak lepsze rozwiązania wielu kwestii, są jakby tylko dla smf2.0, podczas, gdy część z nich mogłaby być z powodzeniem zaimplementowana w smf 1.1.x.
Najpierw trzeba bardzo dokładnie zrozumieć, co ten mod wyprawia, w plikach i w bazie, co z czym i do czego, ponieważ pewne rozwiązania z smf 1.1.x zostały zmienione, zrezygnowano z kilku, czy "wykonują inną robotę". Nie można tego zrobić na tzw. "pałę" owszem może zaskoczyć, coś tam zadziałać, ale tylko dokładne testy, wiedza gdzie co ma pójść i dlaczego, może pozwalać na przekształcenie / przemodelowanie tego moda, żeby był kompatybilny z smf 2.0.

Piszę Ci to wszystko, żeby zaoszczędzić Ci czasem niepotrzebnej walki z wiatrakami. Przemyśl to co napisałem, zanim zabierzesz się za dłubanko w kodzie.
Najpierw to przemyśl, sprawdź gdzie co idzie, zainstaluj na smf 1.1.11 zobacz zmiany w plikach, zobacz o ile się zwiększa ilość odwołań do bazy, bo to też ważne i niepozorny modzio może być niezłą obciągwą dla serva..

Ten kod, od instalki, który podałeś, to nie wszystko, np. ./Sources/Register.php

Zobacz, to kod, który ma się tam dopisać:

GeSHi -› Code: [select]

    // Invite MOD; looks like registration went ok, let's mark the invite key as used and who it was used by.
    if ($context['invite_key'] !== false)
    {
        db_query("
            UPDATE {$db_prefix}invites
            SET ID_REGISTRATION = '$memberID'
            WHERE inviteKey = '{$context['invite_key']}'
            LIMIT 1"
, __FILE__, __LINE__);
    }
    elseif (!empty($_REQUEST['inviter']) && (int)$_REQUEST['inviter'] !== 0)
    {
        db_query("
            INSERT INTO {$db_prefix}invites (ID_MEMBER, ID_REGISTRATION, inviteTime)
            VALUES ('"
. (int)$_REQUEST['inviter'] . "', '$memberID', " . time() . ")
            "
, __FILE__, __LINE__);
    }

// Created by GeSHi 1.0.8.10 | code: -› [code=PHP] | load:0.034s | speed:17.05 KB/s



Jak widac stary typ odwołań do bazy.

Teraz plik ./Sources/Memberlist.php

GeSHi -› Code: [select]

    // Invite MOD.  Not really a user search, just using the fine table and such that's already here for the invitees list...
    if (isset($_REQUEST['inviter']) && loadMemberData(array($_REQUEST['inviter'])))
    {
        global $user_profile;

        if (($_REQUEST['inviter'] == $context['user']['id'] && !allowedTo('invitees_own')) || !allowedTo('invitees_any'))
            fatal_lang_error('invitees_any', false);

        // Just to let the members know it's not really a search.
        $context['page_title'] = $txt['invited_by'] . ' ' . $user_profile[$_REQUEST['inviter']]['realName'];
        $context['sort_links'][1]['label'] = $context['page_title'];

        // We need this so it thinks it's a regular search and won't be all bitchy about variables...
        $context['old_search'] = '';
        $context['old_search_value'] = '';

        // Find the number of results.
        $request = db_query("
            SELECT COUNT(*)
            FROM {$db_prefix}members AS mem
                LEFT JOIN {$db_prefix}invites AS inv ON (inv.ID_REGISTRATION = mem.ID_MEMBER)
            WHERE inv.ID_MEMBER = $_REQUEST[inviter]
                AND is_activated = 1"
, __FILE__, __LINE__);
        list ($numResults) = mysql_fetch_row($request);
        mysql_free_result($request);

        $context['page_index'] = constructPageIndex($scripturl . '?action=mlist;sa=search;inviter=' . $_GET['inviter'], $_REQUEST['start'], $numResults, $modSettings['defaultMaxMembers']);

        // Find the members from the database.
        // !!!SLOW This query is slow.
        $request = db_query("
            SELECT mem.ID_MEMBER
            FROM {$db_prefix}members AS mem
                LEFT JOIN {$db_prefix}invites AS inv ON (inv.ID_REGISTRATION = mem.ID_MEMBER)
                LEFT JOIN {$db_prefix}log_online AS lo ON (lo.ID_MEMBER = mem.ID_MEMBER)
                LEFT JOIN {$db_prefix}membergroups AS mg ON (mg.ID_GROUP = IF(mem.ID_GROUP = 0, mem.ID_POST_GROUP, mem.ID_GROUP))
            WHERE inv.ID_MEMBER = $_REQUEST[inviter]
                AND is_activated = 1
            LIMIT $_REQUEST[start], $modSettings[defaultMaxMembers]"
, __FILE__, __LINE__);
        printMemberListRows($request);
        mysql_free_result($request);
    } // End Invite MOD.
    // They're really doing a search.
    elseif (isset($_REQUEST['search']) && isset($_REQUEST['fields']))

// Created by GeSHi 1.0.8.10 | code: -› [code=PHP] | load:0.043s | speed:48.04 KB/s



Później mamy ./Sources/Profile.php

GeSHi -› Code: [select]

        // Invite MOD.  Change the number of inviter.
        if (!empty($_POST['inviter']) && (int)$_POST['inviter'] != 0 && (int)$_POST['inviter'] != $memID && allowedTo('moderate_forum'))
        {
            global $sourcedir;
            require_once($sourcedir . '/Invite.php');

            if (inviter($memID))
                db_query("
                    UPDATE {$db_prefix}invites SET ID_MEMBER = {$_POST['inviter']}
                    WHERE ID_REGISTRATION = $memID
                    LIMIT 1"
, __FILE__, __LINE__);
            else
                db_query("
                    INSERT INTO {$db_prefix}invites (ID_MEMBER, ID_REGISTRATION)
                        VALUES ({$_POST['inviter']}, $memID)"
, __FILE__, __LINE__);
        }
        elseif (isset($_POST['inviter']) && empty($_POST['inviter']))
        {
            db_query("
                DELETE FROM {$db_prefix}invites
                WHERE ID_REGISTRATION = $memID
                LIMIT 1"
, __FILE__, __LINE__);
        }

// Created by GeSHi 1.0.8.10 | code: -› [code=PHP] | load:0.038s | speed:20.07 KB/s



Jak widać trochę więcej zmian potrzeba. Ale to nie wszystko, jest inny sposób przekazywania akcji skryptom, przekazywania z pół input, textarea czy js itd.. Może nie dopisywać zapraszanych do bazy itd.. Dodatkowo trzeba się przyjrzeć gdzie wizualnie ma co pójść, bo tu też trochę zmian.. i może warto to jeszcze przemyśleć, zastanowić się, czy może nie wrzucić pewnych "części" moda w inne miejsca?

Myślę, że jeśli to prosta modyfikacja, która nie dłubie za bardzo w bazie i nie dolepia się do innych plików, to można się pobawić. W takim wypadku jak ten mod, trzeba podejść bardziej na poważnie. Może nawet się zastanowić, czy nie lepiej napisać to od nowa? często to łatwiejsze niż przeróbki.

Ten kod, który podałeś, musi w 100% zadziałać z tym kodem który podałem, więc w każdym wypadku to trzeba przepisać. Tu nie chodzi tylko o kod odwołań do bazy, jak pisałem to skomplikowany mod, który "czepia" się wielu plików z silnika i ma to ogromny wpływ na działanie całego forum. Tak przemodelowanie to jedno, ale bezwzględnie muszą być porobione wszystkie możliwe testy.

Tak na szybko z głowy tego Ci nie podam. Ja też zmieniając taki kod, muszę sprawdzić czy dodaje go do bazy, gdzie i jak. Musisz mi wybaczyć, ale do końca m-ca mam takie obłożenie niedokończonych spraw, że mogę stracić kaskę, za nie wykonane projekty. ok? Rozumiesz to?

Oczywiście nie poddawaj się i rób swoje! Tylko w tym wypadku coś mam skojarzenia.. z tym ..koniem, co go odzwyczajano od jedzenia, i prawie im się udało, tylko niestety kóń zdechł..

Tym nie mniej życzę powodzenia w przeróbach, w sumie to też szkoła i możesz się dzięki temu wielu rzeczy nauczyć i napewno przybliża Cię to do głębszego poznania idei i samego działania SMF

Pozdrówka
roco



Attention! Testing modifications - Steam Profile

IP IP Zapisane
Full Member
***
Offline
20.05.2016 11:09:38
Topic Starter
 Poland Mężczyzna
Poland
  WWW
DATA: [24.01.2010 00:17:17] Odp: Invite mod
Link:  http://poligon.ricoroco.com/fora/smf/index.php?topic=679.msg1714#msg1714 Post #2 
roco ja to przemyślałem właśnie w ten sposób  Cool
poligon na smf 1.1.11 wszystko śmiga
odszukałem podobny kod w plikach dla smf 2.0 rc1-2 na 2 nie bo za mocno zakręcona i mam obawy
mod się instaluje wykonywany jest kod w bazie ale są problemy ... source/themes.php i jeszcze pare miejsc
jak jesteś zainteresowany małym lookiem to w załączniku moje wypociny ... działają ale nie do końca może ty coś poradzisz.
Pewno coś gdzieś zapomniałem dodać

pozdrówka i pomocy



Attention! Testing modifications - Steam Profile

: : Attachment : :
Attachment Invite_1.14.zip   -› 12.41 KB - pobrany 135 razy

IP IP Zapisane

Władczy, choleryczny, wybuchowy, radykalny we wszystkim, z
rozpustnym wyobrażeniem upodobań które nigdy nie były widziane,
ateistyczny pod względem fanatyzmu, tutaj masz mnie w pigułce
i zabij mnie znowu albo weź mnie takim jaki jestem,
bo Ja się nie zmienię.
Administrator
*****
Imagination is more Important than Knowledge
Offline
08.05.2017 21:24:16
 United States Mężczyzna
United States
  WWW
DATA: [24.01.2010 00:59:45] Odp: Invite mod
Link:  http://poligon.ricoroco.com/fora/smf/index.php?topic=679.msg1716#msg1716 Post #3 
Okay, rozumiem Cię.

Powiem Ci jak ja to robię, jak już zmusza mnie życie.. Otóż mam wykonaną instalkę na smf 1.1.11 patrzę gdzie co poszło i edytuję pliki, wcześniej w testowalni na localhoście dodaje potrzebne tabele do bazy. Porównuje pliki, jeśli funkcje lub odwołania są innego typu, to poprawiam, na te od smf 2.0 i jest to co prawda męczenie buły, ale step by step nanoszę wpisy do plików (i to z czystej instalki!) na smf 2.0, kiedy mam już komplet i wsio hula aż miło, czyli sukces, to w edytorze mam po dwie wersje plików z czystej instalki i z czystej instalki po modyfikacji. Wtedy do moda wrzucam bardzo dokładnie miejsce, gdzie ma się wykonać kod i z drugiego pliku, tego już zmodyfikowanego, przeklejam bardzo uważnie i dokładnie go, do instalki moda.

Czyli, najpierw musisz hehe pojechać na ręcznym i dopiero kiedy jest ok, brak błędów i w logach serva i w PA, to tworzysz samą instalkę.
Niby proste, ale trzeba być bardzo skrupulatnym, dokładnym itd.. potrzeba też odrobiny wyobraźni i cierpliwości.
Trzeba rozważyć wszelkie możliwości, np. niektóre rzeczy z smf 2.0 w żadnym wypaku nie zadziałają na smf 1.x.x itd.. Czyli potrzeba trochę wiedzy..
Oczywiście podstawa to wiedza nawet podstawowa z zakresu php, html i sql.

Tyle szybkich tipsów.. jak to mówią "językiem, jak smykiem" hehe gorzej gdy przychodzi co do czego..

Nie mogę obiecać, że znajdę wystarczająco dużo czasu, żeby się temu szybko przyjrzeć, ale plik pobrałem i uczciwie mogę rzec - postaram się nic więcej nic mniej. Niestety brak możliwości czasowych uniemozliwia mi zajęcie się tym per sofort, sorka

Po lookam tam trochę, może to jaki bzdet?, ale wg. mnie te wszystkie odwołania do bazy muszą być pod wersję smf 2.0 bez tego ani rusz.

Pozdrówka
roco

Sorry, że nie mogę się tym od razu zająć, to trochę poważniejsze i wymaga ode mnie dyspozycyjności, mam jednak nadzieję, że to rozumiesz..
narka



Attention! Testing modifications - Steam Profile

IP IP Zapisane
Full Member
***
Offline
20.05.2016 11:09:38
Topic Starter
 Poland Mężczyzna
Poland
  WWW
DATA: [24.01.2010 09:48:34] Odp: Invite mod
Link:  http://poligon.ricoroco.com/fora/smf/index.php?topic=679.msg1721#msg1721 Post #4 
roco luzik to nie sprawa gardłowa ot fanaberia i miły modzik dla smf 2
jak znajdziesz czas to możesz popatrzeć ja co potrafiłem z mojej strony to zrobiłem
nie znam się na php, html robię to wszystko na wyczucie - czasem trafie a czasem nie



Attention! Testing modifications - Steam Profile

IP IP Zapisane

Władczy, choleryczny, wybuchowy, radykalny we wszystkim, z
rozpustnym wyobrażeniem upodobań które nigdy nie były widziane,
ateistyczny pod względem fanatyzmu, tutaj masz mnie w pigułce
i zabij mnie znowu albo weź mnie takim jaki jestem,
bo Ja się nie zmienię.
Administrator
*****
Imagination is more Important than Knowledge
Offline
08.05.2017 21:24:16
 United States Mężczyzna
United States
  WWW
DATA: [25.01.2010 17:25:06] Odp: Invite mod
Link:  http://poligon.ricoroco.com/fora/smf/index.php?topic=679.msg1729#msg1729 Post #5 
Cieplutki, spoko, ja doskonale rozumiem co robisz. To też jest jakaś nauka i się nie poddawaj.
Zajrzeć żeby zajrzeć, to nie bardzo, muszę znaleźć spokojną chwilkę, żeby to przemyśleć i to z tym mam problem.
Zajrzę jednak na pewno, ok?

Pozdrawiam
roco



Attention! Testing modifications - Steam Profile

IP IP Zapisane
Strony: [1]   TOP^Do góry
   Drukuj   
On-Line: 2 Gości, 0 Użytkowników
 
Skocz do:  

Podobne Tematy
  Temat Zaczęty przez Odpowiedzi Wyświetleń Ostatnia wiadomość
normal_post RSS [PL] Invite 1.14 Draco 3 4657 Ostatnia wiadomość 02.06.2009 00:45:35
Autor roco
* Share this topic...
In a forum
[BBCode]
Code: [select]  -› [ Topic: Invite mod ]
[url=http://poligon.ricoroco.com/fora/smf/index.php?topic=679.0]Invite mod[/url]
In a site/blog
[xHTML]
Code: [select]  -› [ Topic: Invite mod ]
<a href="http://poligon.ricoroco.com/fora/smf/index.php?topic=679.0" target="_blank">Invite mod</a>
Geo Visitors Map