SMF HELP!

SMF Help! - For Users SMF/TP => Mods - Problemy, Integracje, Funkcjonalno?? => Wątek zaczęty przez: cieplutki 23.01.2010 13:21:16



Tytuł: Invite mod
Wiadomość wysłana przez: cieplutki 23.01.2010 13:21:16
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.016s | speed:55.64 KB/s



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


Tytuł: Odp: Invite mod
Wiadomość wysłana przez: roco 23.01.2010 19:47:58
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.015s | speed:38.90 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.019s | speed:107.76 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.019s | speed:39.83 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


Tytuł: Odp: Invite mod
Wiadomość wysłana przez: cieplutki 24.01.2010 00:17:17
roco ja to przemy?la?em w?a?nie w ten sposób  8)
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


Tytuł: Odp: Invite mod
Wiadomość wysłana przez: roco 24.01.2010 00:59:45
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


Tytuł: Odp: Invite mod
Wiadomość wysłana przez: cieplutki 24.01.2010 09:48:34
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


Tytuł: Odp: Invite mod
Wiadomość wysłana przez: roco 25.01.2010 17:25:06
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