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ć:
// 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.028s | speed:20.86 KB/s
Jak widac stary typ odwołań do bazy.
Teraz plik ./Sources/Memberlist.php
// 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.035s | speed:59.03 KB/s
Później mamy ./Sources/Profile.php
// 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.030s | speed:25.75 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