Mała modyfikacja dla LMS 1.11.5
Z powodu braku funkcjonalności, która drukowała by na fakturze stan konta klientów, wziąłem sprawy w swoje ręce.
W konfigu doszły dwie zmienne w dziale [invoice]: 1. print_balance Jeśli ustawiona to wyświetla na fakturze informacje o aktualnym zadłużeniu klienta.
2. print_balance_save (uogólniona zmienna print_balance_history_save, która leżała w kodzie i nie miała opisu w konfigu IU) W kodzie odgrzebałem zmienną print_balance_history_save, która powodowała wyświetlanie historii na fakturach, ale tylko do daty wystawienia faktury, czyli jeśli coś się zmieni na koncie po dacie wystawienia faktury, to na fakturze się już nie pojawi. Uogólniłem zmienną, żeby działała również na stan konta i zmieniłem jej nazwę. Jeśli ustawisz print_balance na true to na fakturze pojawi się stan konta z dnia wystawienia faktury, jeśli do tego masz drukowaną historię konta, to również wyświetli się do dnia wystawienia faktury... nowsze wpisy pojawią się na nowszych fakturach.
Na fakturze między pozycją "Wystawił:", a uwagami, pojawia się "*Twój aktualny stan konta: 0,00 zł". Swoją drogą poprawcie "Wystawił:" na "Wystawił(a):".
Patch niestety tylko dla języka EN i PL (innych nie znam :P).
W załączniku patch, który na pewno działa na LMS 1.11.5 ... w UTF8. Patch na licencji GPL, jeśli twórcy uznają, że spełnia wszelkie normy to proszę o dołączenie do kolejnej wersji LMSa.
Jak działają fakturki w PDF? Chętnie bym przeniósł to na PDFa też... *
!DSPAM:49809ebb153361322221663!
--- lms/lib/LMS.class.php 2009-01-24 14:23:20.000000000 +0100 +++ lms_testowy/lib/LMS.class.php 2009-01-28 17:48:02.683872867 +0100 @@ -899,9 +899,10 @@ return $result; }
- function GetCustomerBalance($id) + function GetCustomerBalance($id, $totime=NULL) { - return $this->DB->GetOne('SELECT SUM(value) FROM cash WHERE customerid=?', array($id)); + return $this->DB->GetOne('SELECT SUM(value) FROM cash WHERE customerid=?' + .($totime ? ' AND time <= '.$totime : ''), array($id)); }
function GetCustomerBalanceList($id, $totime=NULL) @@ -2044,13 +2045,22 @@ // NOTE: don't waste CPU/mem when printing history is not set: if(chkconfig($this->CONFIG['invoices']['print_balance_history'])) { - if(isset($this->CONFIG['invoices']['print_balance_history_save']) && chkconfig($this->CONFIG['invoices']['print_balance_history_save'])) + if(isset($this->CONFIG['invoices']['print_balance_save']) && chkconfig($this->CONFIG['invoices']['print_balance_save'])) $result['customerbalancelist'] = $this->GetCustomerBalanceList($result['customerid'], $result['cdate']); else $result['customerbalancelist'] = $this->GetCustomerBalanceList($result['customerid']); $result['customerbalancelistlimit'] = $this->CONFIG['invoices']['print_balance_history_limit']; }
+ // NOTE: don't waste CPU/mem when printing balance is not set: + if(chkconfig($this->CONFIG['invoices']['print_balance'])) + { + if(isset($this->CONFIG['invoices']['print_balance_save']) && chkconfig($this->CONFIG['invoices']['print_balance_save'])) + $result['customerbalance'] = $this->GetCustomerBalance($result['customerid'], $result['cdate']); + else + $result['customerbalance'] = $this->GetCustomerBalance($result['customerid']); + } + // for backward compat. $result['totalg'] = round( ($result['value'] - floor($result['value'])) * 100); $result['year'] = date('Y',$result['cdate']); --- lms/templates/invoice.html 2009-01-28 17:30:02.873873345 +0100 +++ lms_testowy/templates/invoice.html 2009-01-28 17:45:25.357875337 +0100 @@ -347,11 +347,21 @@ {/if} </TD> </TR> +{if $invoice.customerbalance} + <TR><TD WIDTH="100%" COLSPAN="2"> </TD></TR> + <TR> + <TD WIDTH="100%" COLSPAN="2"> + <B>{t}Your current account balance:{/t} {$invoice.customerbalance|money_format}</B> + </TD> + </TR> + <TR><TD WIDTH="100%" COLSPAN="2"> </TD></TR> +{else} <TR> <TD WIDTH="100%" COLSPAN="2"> </TD> </TR> +{/if} <TR> <TD WIDTH="100%" COLSPAN="2"> <B>{t}Cautions:{/t}</B><BR> --- lms/modules/configlist.php 2009-01-24 14:23:20.000000000 +0100 +++ lms_testowy/modules/configlist.php 2009-01-28 18:22:35.368876733 +0100 @@ -365,9 +365,17 @@ $config[$idx]['description'] = trans('Documents type. You can use "html" or "pdf". Default: html.'); break;
+ case 'print_balance': + $config[$idx]['description'] = trans('If true on invoice (html) will be printed current customer account balance. Default: not set.'); + break; + case 'print_balance_history': $config[$idx]['description'] = trans('If true on invoice (html) will be printed history of financial operations on customer account. Default: not set.'); break; + + case 'print_balance_save': + $config[$idx]['description'] = trans('If true customer account balance and history of financial operations will be counted only to date of invoice. Default: not set.'); + break; case 'print_balance_history_limit': $config[$idx]['description'] = trans('Number of Records on customer balance list on invoice. Specify last x records. Default: 10.'); --- lms/lib/locale/pl/strings.php 2009-01-24 14:23:20.000000000 +0100 +++ lms_testowy/lib/locale/pl/strings.php 2009-01-28 18:35:05.580874072 +0100 @@ -1445,6 +1445,7 @@ $_LANG['You have to specify alias name!'] = 'Musisz wybrać nazwę aliasu!'; $_LANG['You have to specify event day!'] = 'Musisz wybrać dzień wpisu!'; $_LANG['Your/company name or whatever you want to put here:'] = 'Nazwa/nazwisko i imię lub cokolwiek innego:'; +$_LANG['Your current account balance:'] = 'Twój aktualny stan konta:'; $_LANG['Your installation is unregistered!'] = 'Twoja instalacja nie jest zarejestrowana!'; $_LANG['Your PHP does not support GD library required for map generation!'] = 'Twoja wersja PHP nie obsługuje biblioteki graficznej GD wymaganej do wygenerowania mapy!'; $_LANG['Your PHP does not support Ming library required for map generation!'] = 'Twoja wersja PHP nie obsługuje biblioteki Ming wymaganej do wygenerowania mapy!'; @@ -1600,6 +1601,8 @@ $_LANG['duplicate'] = 'duplikat'; $_LANG['DUPLICATE'] = 'DUPLIKAT'; $_LANG['Duplicate draw-up date:'] = 'Data wyst. duplikatu:'; +$_LANG['If true customer account balance and history of financial operations will be counted only to date of invoice. Default: not set.'] = 'Jeśli prawdziwe to stan konta i historia operacji obliczane są tylko do daty wystawienia faktury. Domyślnie: nie ustawiona.'; +$_LANG['If true on invoice (html) will be printed current customer account balance. Default: not set.'] = 'Określa czy na fakturze (html) drukować aktualny stan konta klienta. Domyślnie: nie ustawiona.'; $_LANG['If true on invoice (html) will be printed history of financial operations on customer account. Default: not set.'] = 'Określa czy na fakturze (html) drukować listę operacji finansowych na koncie klienta. Domyślnie: nie ustawiona.'; $_LANG['Number of Records on customer balance list on invoice. Specify last x records. Default: 10.'] = 'Liczba rekordów na liście operacji finansowych na fakturze. Domyślnie: 10.'; $_LANG['Expense:'] = 'Rozchód:';
!DSPAM:49809ebb153361322221663!
Piszcie na listę czy działa wam i co byście zmienili, ewentualnie jakie macie problemy... pomogę.
Piszcie do mnie kto to sobie zaaplikował i czy się podoba... i czy chcecie więcej... a jak tak to co :-) Chciałbym wiedzieć, czy ktoś będzie tego używał.
-- Konrad Cempura
!DSPAM:4980a2d3156701327519691!
Konrad wrote:
Z powodu braku funkcjonalności, która drukowała by na fakturze stan konta klientów, wziąłem sprawy w swoje ręce.
Bez tego patcha też da się osiągnąć saldo na fakturze, nie widziałeś w invoice.html takiego kodu?
{* customer's balance: {$invoice.customerbalancelist.balance} *}
Fakt, trzeba sobie wyedytować szablon ale po to właśnie służy, Nie widzę potrzeby aplikowania twoich zmian, gdyż dublują funkcjonalność.
A.L.E.C pisze:
{* customer's balance: {$invoice.customerbalancelist.balance} *}
Fakt, trzeba sobie wyedytować szablon ale po to właśnie służy, Nie widzę potrzeby aplikowania twoich zmian, gdyż dublują funkcjonalność.
Bomba, tylko jak to włączyć? $invoice.customerbalancelist.balance zwracał mi 0,00 ... Tak też myślałem, ale nie udało mi się tego włączyć.
Być może dlatego, że chcę mieć fakturę na jednej stronie - bez historii konta. No fakt, można wywalić historię konta z szablonu, ale po co... Wygląda na to, że moje rozwiązanie jest bardziej uniwersalne. Możesz mieć info o stanie konta, i/lub historię konta, bez większego modyfikowania szablonu i bez załączania kombajnu który wyciąga całą historię konta użytkownika do pamięci o ile się nie mylę... zmieniając jedną zmienną w konfigu UI.
Pozatym korzysta to praktycznie w całości z waszego kodu (GetCustomerBalance). Jeśli uważasz, że $invoice.customerbalancelist.balance działa to mogę poprawić to tak, żeby nic się nie dublowało i żeby poprawki działały... Wybór jest Twój.
-- Konrad Cempura
!DSPAM:4980a7a6161789813612796!
A.L.E.C pisze:
Bez tego patcha też da się osiągnąć saldo na fakturze, nie widziałeś w invoice.html takiego kodu?
{* customer's balance: {$invoice.customerbalancelist.balance} *}
W takim razie zapytam, czy jeśli dokonam poprawek wg listy: + dodanie zmiennej i opisu do wyświetlania zaległości na koncie print_balance + dodanie opis do nieudokumentowanej zmiennej print_balance_history_save (i zmiana jej nazwy, na print_balance_save - będzie dotyczyła i listy i stanu konta) + modyfikacja invoice.html, tak żeby saldo wyświetlało się w miejscu gdzie jest obecnie zakomentowana zmienna $invoice.customerbalancelist.balance + użyję kodu z GetCustomerBalanceList... + będzie można wybrać drukowanie historii, drukowanie stanu konta, drukowanie obu... Najlepiej było by wywołać GetCustomerBalance do wyciągania samego stanu konta jeśli ktoś nie chce historii, ale jeśli nie jest to metoda zaprojektowana do tego typu zadań, to użyję osobnego zapytania...
To czy mam szansę na dodanie tego kodu? I pytanie numer dwa... czy poprawienie kodu to duplikowanie funkcjonalności?
W tej chwili widzę, że z mojego kodu to jest nie potrzebnie użyta jedna zmienna - *customerbalance i jeden wpis do szablonu w pliku strings.php. Oprócz tego niepotrzebnie jest liczony stan konta jeśli ktoś ma załączone obie funkcje. To są bardzo łatwe błędy do usunięcia.
Generalnie to pytanie jest takie czy stoimy w miejscu, bo już to jest i nie trzeba tego poprawiać czy idziemy do przodu... mam poprawić i załączacie, czy mam zachować dla siebie.
Czekam na uwagi, warunki... cokolwiek...
-- Konrad Cempura *
!DSPAM:4980baf2172527480988918!
Z powodu braku funkcjonalności, która drukowała by na fakturze stan konta klientów, wziąłem sprawy w swoje ręce.
W konfigu doszły dwie zmienne w dziale [invoice]:
- print_balance
Jeśli ustawiona to wyświetla na fakturze informacje o aktualnym zadłużeniu klienta.
(...)
Jak działają fakturki w PDF? Chętnie bym przeniósł to na PDFa też...
ja dodalem sobie taka funkcjonalnosc do faktur PDF, jesli jest zainteresowanie to wyprodukuje diff'a
GC pisze:
Z powodu braku funkcjonalności, która drukowała by na fakturze stan konta klientów, wziąłem sprawy w swoje ręce.
W konfigu doszły dwie zmienne w dziale [invoice]:
- print_balance
Jeśli ustawiona to wyświetla na fakturze informacje o aktualnym zadłużeniu klienta.
(...)
Jak działają fakturki w PDF? Chętnie bym przeniósł to na PDFa też...
ja dodalem sobie taka funkcjonalnosc do faktur PDF, jesli jest zainteresowanie to wyprodukuje diff'a
Ja jestem zainteresowany, chętnie bym to zmodyfikował i dorzucił do mojego diffa, żeby było kompleksowo ;) Tylko jeszcze czekam na odpowiedź, czy mam dalej pisać... bo nie lubię pisać w powietrze.
!DSPAM:4980cfa5186044073210324!
Dorzucam kolejny fajny i bardzo prosty patch, który przyspieszy wam tworzenie kopii zapasowych minimum jakieś 20 razy i zapobiegnie utracie waszych statystyk! :) W kopii ręcznej będziecie mieli wszystko poza statystykami...
Nie miałem czasu dorabiać zmiennych do UI configa... i tak do LMSa pewnie by nie trafiło. Patch działa od razu po zaaplikowaniu. Dzięki tej funkcjonalności można grzebać po bazie danych i ustawieniach i w każdej chwili można przywrócić wszystko do stanu poprzedniego, bez utraty statystyk.
Polecam codziennie tworzyć automatycznie kopię całej bazy danych, programem mysql_dump (najlepiej koło 5 rano :P). Kiedyś wysyłałem na grupę do tego celu skrypcik w PERLu, sprawdza się znakomicie... codziennie tworzy kopie, a pliki starsze niż miesiąc automatycznie kasuje.
A to dla leniwych, w katalogu LMS: patch -p1 < plikzpatchem.diff
!DSPAM:4982c0e4269581310814384!
--- lms_testowy/lib/LMS.class.php 2009-01-28 17:48:02.683872867 +0100 +++ lms/lib/LMS.class.php 2009-01-30 09:33:23.037618871 +0100 @@ -86,7 +86,7 @@ foreach($this->DB->ListTables() as $tablename) { // skip sessions table for security - if($tablename == 'sessions') + if($tablename == 'sessions' || $tablename == 'stats') continue; fputs($dumpfile,"DELETE FROM $tablename;\n");
!DSPAM:4982c0e4269581310814384!
Konrad pisze:
Dorzucam kolejny fajny i bardzo prosty patch, który przyspieszy wam tworzenie kopii zapasowych minimum jakieś 20 razy i zapobiegnie utracie waszych statystyk! :) W kopii ręcznej będziecie mieli wszystko poza statystykami...
Nie miałem czasu dorabiać zmiennych do UI configa... i tak do LMSa pewnie by nie trafiło. Patch działa od razu po zaaplikowaniu. Dzięki tej funkcjonalności można grzebać po bazie danych i ustawieniach i w każdej chwili można przywrócić wszystko do stanu poprzedniego, bez utraty statystyk.
Polecam codziennie tworzyć automatycznie kopię całej bazy danych, programem mysql_dump (najlepiej koło 5 rano :P). Kiedyś wysyłałem na grupę do tego celu skrypcik w PERLu, sprawdza się znakomicie... codziennie tworzy kopie, a pliki starsze niż miesiąc automatycznie kasuje.
A to dla leniwych, w katalogu LMS: patch -p1 < plikzpatchem.diff
Witam, pomysł bardzo dobry, moim zdaniem nie warto dorzucać zmiennej do UI, lepiej zrobić checkboxa "Stwórz kopię pomijając statystki" lub coś podobnego i w zależności od jego zaznaczenia bądź nie wykonywać odpowiedni kod. Sprawdzałeś czy taka kopia bez statystyk przywraca się poprawnie na czystej bazie i bazie z danymi ?
Grzegorz Chwesewicz pisze:
Witam, pomysł bardzo dobry, moim zdaniem nie warto dorzucać
zmiennej do UI, lepiej zrobić checkboxa "Stwórz kopię pomijając statystki" lub coś podobnego i w zależności od jego zaznaczenia bądź nie wykonywać odpowiedni kod. Sprawdzałeś czy taka kopia bez statystyk przywraca się poprawnie na czystej bazie i bazie z danymi ?
Tak, zresztą użyłem kodu LMSa... domyślnie LMS nie robi kopii tabeli sesji, a po moich zmianach pomija tabele session i stats. Można checkboxa zrobić, ale to już więcej grzebania. Mogę zrobić, ale dopiero w przyszłym tygodniu.
!DSPAM:4982ccf7276698616076440!
No i trzeba się zastanowić co zrobić przy przywracaniu kopii zapasowej. Program wykonuje wtedy kopię bazy danych... jedni będą chcieli kopię całej bazy, a inni kopię bez statystyk. W sumie checkbox mógłby działać też na tą opcję...
Problem jest taki: jak zapisać wartość checkboxa, żeby za każdym razem go nie ustawiać? Jeśli ktoś wie, to proszę o odpowiedź, lub sugestie jakieś.
!DSPAM:4982cee7278506258220944!
Konrad pisze:
No i trzeba się zastanowić co zrobić przy przywracaniu kopii zapasowej. Program wykonuje wtedy kopię bazy danych... jedni będą chcieli kopię całej bazy, a inni kopię bez statystyk. W sumie checkbox mógłby działać też na tą opcję...
Problem jest taki: jak zapisać wartość checkboxa, żeby za każdym razem go nie ustawiać? Jeśli ktoś wie, to proszę o odpowiedź, lub sugestie jakieś.
Najlepiej byłoby zapisywać w nazwie pliku z kopią czy jest to kopia z tabelą stats czy bez niej. Można np. dodać sufiks -stats lub -nostats i w skrypcie przywracającym uwzględnić to (jeśli przywracasz bazę bez statystyk to robić kopię bez statystyk i jeśli przywracasz bazę ze statystykami to robić kopię ze statystykami). Warto też w module dblist innym kolorem oznaczać kopie ze statystykami i bez.
Grzegorz Chwesewicz pisze:
Konrad pisze:
No i trzeba się zastanowić co zrobić przy przywracaniu kopii zapasowej. Program wykonuje wtedy kopię bazy danych... jedni będą chcieli kopię całej bazy, a inni kopię bez statystyk. W sumie checkbox mógłby działać też na tą opcję...
Problem jest taki: jak zapisać wartość checkboxa, żeby za każdym razem go nie ustawiać? Jeśli ktoś wie, to proszę o odpowiedź, lub sugestie jakieś.
Najlepiej byłoby zapisywać w nazwie pliku z kopią czy jest to kopia z tabelą stats czy bez niej. Można np. dodać sufiks -stats lub -nostats i w skrypcie przywracającym uwzględnić to (jeśli przywracasz bazę bez statystyk to robić kopię bez statystyk i jeśli przywracasz bazę ze statystykami to robić kopię ze statystykami). Warto też w module dblist innym kolorem oznaczać kopie ze statystykami i bez.
Ja bym zrobił checkbox - "pełna kopia". Domyślnie wyłączony... czyli kopia szybka bez tabeli stats, jak ktoś zaznaczy checkbox to ma kopię pełną ze statystykami. Co do przywracania to można rzeczywiście wykonywać kopię w zależności od tego co się przywraca, tylko nazwa kopii była by raczej prefiksowana fast, lub quick.
No i jeśli nikt się nie zainteresuje włączeniem tego kodu, lub nie przedstawi warunków do spełnienia, żeby włączyć to do kodu, to będę publikował swój własny patchset :)
!DSPAM:4982f43e297911804284693!
Konrad pisze:
Grzegorz Chwesewicz pisze:
Konrad pisze:
No i trzeba się zastanowić co zrobić przy przywracaniu kopii zapasowej. Program wykonuje wtedy kopię bazy danych... jedni będą chcieli kopię całej bazy, a inni kopię bez statystyk. W sumie checkbox mógłby działać też na tą opcję...
Problem jest taki: jak zapisać wartość checkboxa, żeby za każdym razem go nie ustawiać? Jeśli ktoś wie, to proszę o odpowiedź, lub sugestie jakieś.
Najlepiej byłoby zapisywać w nazwie pliku z kopią czy jest to kopia z tabelą stats czy bez niej. Można np. dodać sufiks -stats lub -nostats i w skrypcie przywracającym uwzględnić to (jeśli przywracasz bazę bez statystyk to robić kopię bez statystyk i jeśli przywracasz bazę ze statystykami to robić kopię ze statystykami). Warto też w module dblist innym kolorem oznaczać kopie ze statystykami i bez.
Ja bym zrobił checkbox - "pełna kopia". Domyślnie wyłączony... czyli kopia szybka bez tabeli stats, jak ktoś zaznaczy checkbox to ma kopię pełną ze statystykami. Co do przywracania to można rzeczywiście wykonywać kopię w zależności od tego co się przywraca, tylko nazwa kopii była by raczej prefiksowana fast, lub quick.
Byłbym za prefiksem lub sufiksem with-stats lub no-stats, bo fast lub quick nic nie mówi.
No i jeśli nikt się nie zainteresuje włączeniem tego kodu, lub nie przedstawi warunków do spełnienia, żeby włączyć to do kodu, to będę publikował swój własny patchset :)
Koncepcję już z grubsza omówiliśmy:
1) Checkbox przy tworzeniu kopii, który pozawala na wykonanie kopii z tabelą stats i bez niej.
2) Kopie z tabelą stats mają mieć prefiks lub sufiks, dzięki, któremu można rozróżnić typ kopii (łatwiejsze rozwiązanie to sufiks, bo potrzebne będzie mniej zmian w kodzie parsującym zawartość katalogu backups/).
3) Na liście kopii zapasowych różne typy kopii powinny różnić się np. kolorem w jakim są wyświetlane.
4) Przy przywracaniu robiona jest kopia z tabelą stats lub bez niej, w zależności od tego, czy przywracana kopia zawiera tabelę stats czy nie.
Jeśli łatka będzie spełniała w/w kryteria to spokojnie możemy ją włączyć do LMS ;)
Grzegorz Chwesewicz pisze:
Jeśli łatka będzie spełniała w/w kryteria to spokojnie możemy ją włączyć do LMS ;)
No to bomba, łatka będzie w przyszłym tygodniu, w tym limit na programowanie się wyczerpał ;) (sesja). W sumie jest to tylko tabela stats i na razie nie zanosi się na więcej, więc masz rację co do nazwy (-nostats).
A co z pierwszą łatką? Niby jest taka funkcjonalność, ale uważam, że należy ją oddzielić od historii konta i ułatwić do niej dostęp poprzez zmienną. Czy odpowienia modyfikacja daje możliwość włączenia jej do kodu? Jest to rozszerzenie funkcjonalności i właściwie jest to też poprawa kodu... jak chcemy tylko bilans konta, to nie ładujemy całej historii do pamięci (a w przypadku wydruku wszystkich faktur, ma to znaczenie). Nic nie stoi na przeszkodzie, żebym zajął się również dodaniem tego do faktur w PDFie.
!DSPAM:4982fc66305094062814199!
Konrad wrote:
W takim razie zapytam, czy jeśli dokonam poprawek wg listy:
- dodanie zmiennej i opisu do wyświetlania zaległości na koncie
print_balance
- dodanie opis do nieudokumentowanej zmiennej print_balance_history_save
(i zmiana jej nazwy, na print_balance_save - będzie dotyczyła i listy i stanu konta)
- modyfikacja invoice.html, tak żeby saldo wyświetlało się w miejscu
gdzie jest obecnie zakomentowana zmienna $invoice.customerbalancelist.balance
- będzie można wybrać drukowanie historii, drukowanie stanu konta,
drukowanie obu... Najlepiej było by wywołać GetCustomerBalance do wyciągania samego stanu konta jeśli ktoś nie chce historii, ale jeśli nie jest to metoda zaprojektowana do tego typu zadań, to użyję osobnego zapytania...
Oprócz tego niepotrzebnie jest liczony stan konta jeśli ktoś ma załączone obie funkcje.
to popraw i dodaj zmiany do faktury pdf i zaakceptuję ;)
Witam To ja zadam pytanie, czemu nie połączyć baz danych lms'a i radius'a w całość. Przecież dodanie lms'ie wpisów związanych z radiusem to jest pare linijek.(chodzi mi o autoryzacje). Reszta do group i można samemu ręcznie wklepać parametry. Małe, a cieszy. Wiem, że można radius'a zmusić do korzystania z bazy lms'a, ale do tej pory nie udało mi sie tego zrobić, więc poszedłem na łatwiznę. Pozdrawiam.
diff LMS.class.php ver. 1.11.5
1180,1192d1179 < /* < Zmieniamy rowniez wpisy zwiazane z radiusem < Start function NodeUpdate < */ < $this->DB->Execute('UPDATE radreply SET username=UPPER(?), attribute='Framed-IP-Address', op=':=', value=? WHERE id=?', < array($nodedata['name'], < $nodedata['ipaddr'], < $nodedata['id'])); < $this->DB->Execute('UPDATE radcheck SET username=UPPER(?), attribute='User-Password', op=':=', value=? WHERE id=?', < array($nodedata['name'], < $nodedata['passwd'], < $nodedata['id'])); < // END 1204,1208d1190 < //RADIUS START function DeleteNode < $this->DB->Execute('DELETE FROM usergroup WHERE username=(SELECT username FROM radcheck WHERE id = ?)', array($id)); < $this->DB->Execute('DELETE FROM radcheck WHERE id = ?', array($id)); < $this->DB->Execute('DELETE FROM radreply WHERE id = ?', array($id)); < //END 1479,1493d1460 < //RADIUS function NodeAdd < $this->DB->Execute('INSERT INTO radreply (id, username, attribute, op, value) < VALUES (?, ?, 'Framed-IP-Address', '=', ?)', < array($id, < strtoupper($nodedata['name']), < $nodedata['ipaddr'])); < $this->DB->Execute('INSERT INTO radcheck (id, username, attribute, op, value) < VALUES (?, ?, 'User-Password', ':=', ?)', < array($id, < strtoupper($nodedata['name']), < $nodedata['passwd'])); < $this->DB->Execute('INSERT INTO usergroup VALUES (?, 'pppoe', 0)', < array($id, < strtoupper($nodedata['name']))); < // $nodedata['location'));
!DSPAM:49830aa7316352889253296!
Jarosław Haczyk pisze:
Witam To ja zadam pytanie, czemu nie połączyć baz danych lms'a i radius'a w całość. Przecież dodanie lms'ie wpisów związanych z radiusem to jest pare linijek.(chodzi mi o autoryzacje). Reszta do group i można samemu ręcznie wklepać parametry. Małe, a cieszy. Wiem, że można radius'a zmusić do korzystania z bazy lms'a, ale do tej pory nie udało mi sie tego zrobić, więc poszedłem na łatwiznę.
Skoro da się zmusić radiusa do działania z bazą LMS to jaki sens ma łączenie baz ?
Grzegorz Chwesewicz, Chilan Jarosław Haczyk
obaj przetrzepcie archiwum temat był dosyć głęboko poruszany było tam opisane dlaczego na co i po co, ale nigdy nie doszło to do skutku, skonczylo sie na tym ze kazdy zrealizował swoją wizje, metodą "homebrew"
Pozdrawiam Michał
!DSPAM:49831003321371614647931!
Grzegorz Chwesewicz pisze:
Skoro da się zmusić radiusa do działania z bazą LMS to jaki sens ma łączenie baz ?
Tak jak napisałem wcześniej nie udało mi się zmusić radius'a do pobierania danych z bazy lms'a. Brak gotowych rozwiązań na google, oraz jakichkolwiek przykładów w dokumentacji, spowodował zmianę adaptacji z radius'a do lms'a na lms do radius'a. Sądzę, że duża część użytkowników tej listy byłaby szczęśliwa takim rozwiązaniem, a nie tak jak wcześniej czytałem, że tworzą skrypty, które kopiują dane z bazy do pliku tekstowego 2x na dobę. Jak dla mnie to porażka, po drugie do bazy wpisywane są informacje na temat logowań użytkowników po pppoe. Można by to rozwinąć jako moduł do przeglądania takich informacji, gdzie zawarte są informacje o połączeniach jak i ilości przesłanych danych podczas sesji pppoe, a nie stosować osobnych rozwiązań typu ara, dialupadmin.
!DSPAM:4983103f322749813612796!
Jarosław Haczyk pisze:
Grzegorz Chwesewicz pisze:
Skoro da się zmusić radiusa do działania z bazą LMS to jaki sens ma łączenie baz ?
Tak jak napisałem wcześniej nie udało mi się zmusić radius'a do pobierania danych z bazy lms'a. Brak gotowych rozwiązań na google, oraz jakichkolwiek przykładów w dokumentacji, spowodował zmianę adaptacji z radius'a do lms'a na lms do radius'a. Sądzę, że duża część użytkowników tej listy byłaby szczęśliwa takim rozwiązaniem, a nie tak jak wcześniej czytałem, że tworzą skrypty, które kopiują dane z bazy do pliku tekstowego 2x na dobę. Jak dla mnie to porażka, po drugie do bazy wpisywane są informacje na temat logowań użytkowników po pppoe. Można by to rozwinąć jako moduł do przeglądania takich informacji, gdzie zawarte są informacje o połączeniach jak i ilości przesłanych danych podczas sesji pppoe, a nie stosować osobnych rozwiązań typu ara, dialupadmin.
Wszystko o czym piszesz można zrealizować łącząc radiusa choćby z perlem [1].
[1] http://wiki.freeradius.org/Rlm_perl
Grzegorz Chwesewicz pisze:
Jarosław Haczyk pisze:
Grzegorz Chwesewicz pisze:
Skoro da się zmusić radiusa do działania z bazą LMS to jaki sens ma łączenie baz ?
Tak jak napisałem wcześniej nie udało mi się zmusić radius'a do pobierania danych z bazy lms'a. Brak gotowych rozwiązań na google, oraz jakichkolwiek przykładów w dokumentacji, spowodował zmianę adaptacji z radius'a do lms'a na lms do radius'a. Sądzę, że duża część użytkowników tej listy byłaby szczęśliwa takim rozwiązaniem, a nie tak jak wcześniej czytałem, że tworzą skrypty, które kopiują dane z bazy do pliku tekstowego 2x na dobę. Jak dla mnie to porażka, po drugie do bazy wpisywane są informacje na temat logowań użytkowników po pppoe. Można by to rozwinąć jako moduł do przeglądania takich informacji, gdzie zawarte są informacje o połączeniach jak i ilości przesłanych danych podczas sesji pppoe, a nie stosować osobnych rozwiązań typu ara, dialupadmin.
Wszystko o czym piszesz można zrealizować łącząc radiusa choćby z perlem [1].
[1] http://wiki.freeradius.org/Rlm_perl
lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms
a nie uważasz teraz, że jest to kombinatoryka (perl+radius)? Dodanie funkcjonalności do lms'a wydaje mi się łatwiejsze, bo lms robi wyłącznie dodatkowe wpisy nic poza tym.
!DSPAM:498314f7326791711816961!
Jarosław Haczyk pisze:
a nie uważasz teraz, że jest to kombinatoryka (perl+radius)? Dodanie funkcjonalności do lms'a wydaje mi się łatwiejsze, bo lms robi wyłącznie dodatkowe wpisy nic poza tym.
Co oznacza dodanie funkcjonalności do LMSa? Zdublowanie tych samych danych z tabel? Zmiana organizacji danych w tabelach? Jeśli nie to w czym rzecz... siadaj i pisz. Jeśli dane są w LMSie, to radius powinien umieć sobie je wyciągnąć i to już problem dla projektantów radiusa... albo najwyższy czas zatrudnić admina który zna SQL :P
-- Konrad Cempura
!DSPAM:49835a6e43795315134984!
Konrad pisze:
Jarosław Haczyk pisze:
a nie uważasz teraz, że jest to kombinatoryka (perl+radius)? Dodanie funkcjonalności do lms'a wydaje mi się łatwiejsze, bo lms robi wyłącznie dodatkowe wpisy nic poza tym.
Swoją drogą uważam to za słabość LMSa... LMS powinien być modułowy. Ktoś chce moduł do obsługi radius to go sobie pisze, publikuje i ładuje ... ktoś chce inną funkcjonalność to też to czyni... LMS powinien być frameworkiem, środowiskiem do uruchamiania modułów... i każdy by miał funkcjonalność jaką by chciał i mógłby ją opublikować w formie modułu.
No ale skoro LMS jest litym projektem, to trzeba by pomyśleć jak to zmienić :-) Modułowość jest teraz modna, i co ważne sprawdza się... pod warunkiem, że moduł można dodać i usunąć jednym kliknięciem, bez sprawdzania po drodze miliona zależności (no chyba, że robi to automat i dokładnie mówi o co mu chodzi). Usuwanie modułów na dwa sposoby, z kasowaniem danych modułu i bez kasowania.
Myślał ktoś o tym?
P.S. Myślicie już o Smarty 3?
!DSPAM:49835d5745699031758699!
Konrad pisze:
Konrad pisze:
Jarosław Haczyk pisze:
a nie uważasz teraz, że jest to kombinatoryka (perl+radius)? Dodanie funkcjonalności do lms'a wydaje mi się łatwiejsze, bo lms robi wyłącznie dodatkowe wpisy nic poza tym.
Swoją drogą uważam to za słabość LMSa... LMS powinien być modułowy. Ktoś chce moduł do obsługi radius to go sobie pisze, publikuje i ładuje ... ktoś chce inną funkcjonalność to też to czyni... LMS powinien być frameworkiem, środowiskiem do uruchamiania modułów... i każdy by miał funkcjonalność jaką by chciał i mógłby ją opublikować w formie modułu.
No ale skoro LMS jest litym projektem, to trzeba by pomyśleć jak to zmienić :-) Modułowość jest teraz modna, i co ważne sprawdza się... pod warunkiem, że moduł można dodać i usunąć jednym kliknięciem, bez sprawdzania po drodze miliona zależności (no chyba, że robi to automat i dokładnie mówi o co mu chodzi). Usuwanie modułów na dwa sposoby, z kasowaniem danych modułu i bez kasowania.
Myślał ktoś o tym?
Dosłownie kilka dni temu rozmawialiśmy o tym za Alkiem. Prawdopodobnie wydamy wersję, 1.13, która będzie polem testowym dla modularnego lmsa. Możesz podsyłać łaty jeśli chcesz to modularyzacja pójdzie szybciej.
Dosłownie kilka dni temu rozmawialiśmy o tym za Alkiem. Prawdopodobnie wydamy wersję, 1.13, która będzie polem testowym dla modularnego lmsa. Możesz podsyłać łaty jeśli chcesz to modularyzacja pójdzie szybciej.
W pewnym sensie PRO Access juz dokonal takiego czynu, istnieja moduly ktore wlaczamy i wylaczamy w lmsie
Grzegorz Chwesewicz pisze:
Dosłownie kilka dni temu rozmawialiśmy o tym za Alkiem. Prawdopodobnie wydamy wersję, 1.13, która będzie polem testowym dla modularnego lmsa. Możesz podsyłać łaty jeśli chcesz to modularyzacja pójdzie szybciej.
Trzeba sprawę poważnie przemyśleć, bardzo chętnie pomogę, ale jakieś założenia trzeba zrobić i szkielet dać. Jak te moduły ładować, kiedy wywoływać funkcje... potrzebne są jakieś miejsca które uruchamiały by kod modułu w momencie zdarzenia... np. dodawania użytkownika.
Druga sprawa moduły powinny być publikowane, najlepiej w formie podobnej do wiki, razem z dokumentacją i osobą odpowiedzialną... i wszystkie zmiany akceptowała, lub odrzucała by ta osoba.
No warto to wszystko przemyśleć.
!DSPAM:4984b193251098616076440!
Konrad wrote:
Trzeba sprawę poważnie przemyśleć, bardzo chętnie pomogę, ale jakieś założenia trzeba zrobić i szkielet dać. Jak te moduły ładować, kiedy wywoływać funkcje... potrzebne są jakieś miejsca które uruchamiały by kod modułu w momencie zdarzenia... np. dodawania użytkownika.
Duża część funkcjonalności silnika modułów już została zaimplementowana (jest w cvsie). Trzeba to tylko dopracować i przepisać istniejący kod na moduły.
Druga sprawa moduły powinny być publikowane, najlepiej w formie podobnej do wiki, razem z dokumentacją i osobą odpowiedzialną... i wszystkie zmiany akceptowała, lub odrzucała by ta osoba.
Myślę, że moduły standardowe (obecna fukcjonalność LMSa) byłyby w paczce z LMSem i byłyby wspierane jak dotychczas całość. Natomiast każdy mógłby pisać własne moduły i rozprowadzać we własnym zakresie.
A.L.E.C pisze:
Myślę, że moduły standardowe (obecna fukcjonalność LMSa) byłyby w paczce z LMSem i byłyby wspierane jak dotychczas całość. Natomiast każdy mógłby pisać własne moduły i rozprowadzać we własnym zakresie.
We własnym zakresie być może, ale wsparcie na stronie i zebranie tego w kupę jest wskazane. Coś jak lista modułów... i każda strona w formie wiki.
Podam przykład: pool.ntp.org w ten sposób w swoim wiki pozwala dodawać serwery na listy Stratum1 i Stratum2. Przy wypełnianiu szablonu serwera dodaje się nazwę wikipedysty, który może edytować stronę... po dodaniu strony, komputer pojawia się na liście.
A jak ktoś zapomni ustawić parametr to trzeba pisać do admina, bo nie da się nic zmienić :) To wada tego wiki, no ale planując wiki LMSa można zrobić tak, że zmienna wypełnia się sama (na podstawie danych zalogowanego usera).
Stabilne moduły, przetestowane i aktualizowane na bieżąco, mogły by być wydawane w paczce LMSa.
-- Konrad Cempura
!DSPAM:49870a8a96431252921014!
Konrad pisze:
Jarosław Haczyk pisze:
a nie uważasz teraz, że jest to kombinatoryka (perl+radius)? Dodanie funkcjonalności do lms'a wydaje mi się łatwiejsze, bo lms robi wyłącznie dodatkowe wpisy nic poza tym.
Co oznacza dodanie funkcjonalności do LMSa? Zdublowanie tych samych danych z tabel? Zmiana organizacji danych w tabelach? Jeśli nie to w czym rzecz... siadaj i pisz. Jeśli dane są w LMSie, to radius powinien umieć sobie je wyciągnąć i to już problem dla projektantów radiusa... albo najwyższy czas zatrudnić admina który zna SQL :P
Znam problematykę lms+radius+perl. Mogę udostępnić większość moich rozwiązań (pewnie bardziej doświadczeni je wyśmieją). Ostatnio walczę z przerostem baz - zwłaszcza tabel stats i radacct i chętnie bym poznał innych rozwiązania. Stosowałem bezpośrednio sql w radiusie, ale mało to elastyczne jest. Najlepiej stosować perl w radiusie. Piotr Sklepiński
!DSPAM:49846ba7160431252921014!
witam może trochę pomogę bo mam to zrobione. Odnośnie logowania do bazy radacct to można wyłączyć komentując ostatnie linie i nie trzeba kopiować tabeli do bazy lms-a podaje przykład w załączniku
"lista użytkowników LMS" napisał(a):
Grzegorz Chwesewicz pisze:
JarosławHaczyk pisze:
Grzegorz Chwesewicz pisze:
Skoro da się zmusić radiusa do działania z bazą LMS to jaki sens małączenie baz ?
------------------------------------------------------------------------
Tak jak napisałem wcześniej nie udało mi się zmusić radius'a dopobierania danych z bazy lms'a. Brak gotowych rozwiązań na google, orazjakichkolwiek przykładów w dokumentacji, spowodował zmianę adaptacji zradius'a do lms'a na lms do radius'a. Sądzę, że duża część użytkownikówtej listy byłaby szczęśliwa takim rozwiązaniem, a nie tak jak wcześniejczytałem, że tworzą skrypty, które kopiują dane z bazy do plikutekstowego 2x na dobę. Jak dla mnie to porażka, po drugie do bazywpisywane są informacje na temat logowań użytkowników po pppoe. Możnaby to rozwinąć jako moduł do przeglądania takich informacji, gdziezawarte są informacje o połączeniach jak i ilości przesłanych danychpodczas sesji pppoe, a nie stosować osobnych rozwiązań typu ara,dialupadmin.
Wszystko o czym piszesz można zrealizować łącząc radiusa choćby zperlem [1].
[1] http://wiki.freeradius.org/Rlm_perl
-------------------------------------------------------------------
_______________________________________________lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms
a nie uważasz teraz, że jest to kombinatoryka (perl+radius)? Dodaniefunkcjonalności do lms'a wydaje mi się łatwiejsze, bo lms robiwyłącznie dodatkowe wpisy nic poza tym.
!DSPAM:498f2a9e40711711816961!
przepraszam wysyłam jeszcze raz w załączniku
"lista użytkowników LMS" napisał(a):
witam może trochę pomogę bo mam to zrobione. Odnośnie logowania do bazy radacct to można wyłączyć komentując ostatnie linie i nie trzeba kopiować tabeli do bazy lms-a podaje przykład w załączniku
"lista użytkowników LMS" lms@lists.lms.org.pl napisał(a):
Grzegorz Chwesewicz pisze:
JarosławHaczyk pisze:
Grzegorz Chwesewicz pisze:
Skoro da się zmusić radiusa do działania z bazą LMS to jaki sens małączenie baz ?
------------------------------------------------------------------------
Tak jak napisałem wcześniej nie udało mi się zmusić radius'a dopobierania danych z bazy lms'a. Brak gotowych rozwiązań na google, orazjakichkolw iek przykładów w dokumentacji, spowodował zmianę adaptacji zradius'a do lms'a na lms do radius'a. Sądzę, że duża część użytkownikówtej listy byłaby szczęśliwa takim rozwiązaniem, a nie tak jak wcześniejczytałem, że tworzą skrypty, które kopiują dane z bazy do plikutekstowego 2x na dobę. Jak dla mnie to porażka, po drugie do bazywpisywane są informacje na temat logowań użytkowników po pppoe. Możnaby to rozwinąć jako moduł do przeglądania takich informacji, gdziezawarte są informacje o połączeniach jak i ilości przesłanych danychpodczas sesji pppoe, a nie stosować osobnych rozwiązań typu ara,dialupadmin.
Wszystko o czym piszesz można zrealizować łącząc radiusa choćby zperlem [1].
[1] http://wiki.freeradius.org/Rlm_perl
---------------------------------------------------------------
_______________________________________________lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms
a nie uważasz teraz, że jest to kombinatoryka (perl+radius)? Dodaniefunkcjonalności do lms'a wydaje mi się łatwiejsze, bo lms robiwyłącznie dodatkowe wpisy nic poza tym.
!DSPAM:498f2c9142846491211187!
skynet.goralski@vp.pl pisze:
przepraszam wysyłam jeszcze raz w załączniku
"lista użytkowników LMS" napisał(a):
witam może trochę pomogę bo mam to zrobione. Odnośnie logowania do bazy radacct to można wyłączyć komentując ostatnie linie i nie trzeba kopiować tabeli do bazy lms-a podaje przykład w załączniku "lista użytkowników LMS" <lms@lists.lms.org.pl> napisał(a): Grzegorz Chwesewicz pisze:
JarosławHaczyk pisze:
Grzegorz Chwesewicz pisze:
Skoro da się zmusić radiusa do działania z bazą LMS to jaki sens małączenie baz ? ------------------------------------------------------------------------
Tak jak napisałem wcześniej nie udało mi się zmusić radius'a dopobierania danych z bazy lms'a. Brak gotowych rozwiązań na google, orazjakichkolw iek przykładów w dokumentacji, spowodował zmianę adaptacji zradius'a do lms'a na lms do radius'a. Sądzę, że duża część użytkownikówtej listy byłaby szczęśliwa takim rozwiązaniem, a nie tak jak wcześniejczytałem, że tworzą skrypty, które kopiują dane z bazy do plikutekstowego 2x na dobę. Jak dla mnie to porażka, po drugie do bazywpisywane są informacje na temat logowań użytkowników po pppoe. Możnaby to rozwinąć jako moduł do przeglądania takich informacji, gdziezawarte są informacje o połączeniach jak i ilości przesłanych danychpodczas sesji pppoe, a nie stosować osobnych rozwiązań typu ara,dialupadmin.
Wszystko o czym piszesz można zrealizować łącząc radiusa choćby zperlem [1]. [1] http://wiki.freeradius.org/Rlm_perl ------------------------------------------------------------------------ _______________________________________________lms mailing listlms@lists.lms.org.pl <mailto:lms@lists.lms.org.pl>http://lists.lms.org.pl/mailman/listinfo/lms
a nie uważasz teraz, że jest to kombinatoryka (perl+radius)? Dodaniefunkcjonalności do lms'a wydaje mi się łatwiejsze, bo lms robiwyłącznie dodatkowe wpisy nic poza tym.
lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms
Dzięki, ale już znalazłem na forum vot
!DSPAM:498f49dc55536908914954!
Przepraszam, że patche jeszcze nie wysłane... prace stanęły, bo... awaria dysku i brak kopii zapasowej :] Czyli bezmyślność jednym słowem... jak naprawimy, to wszystko napiszę i wyślę.
-- Konrad Cempura
!DSPAM:499ffccc43581910919020!
W dniu 28 stycznia 2009 19:06 użytkownik Konrad kcem@tlen.pl napisał: [...]
Jak działają fakturki w PDF? Chętnie bym przeniósł to na PDFa też...
[...]
Skutecznie :)
ezPdf to jedna z prostszych klas, a kod nie jest aż tak bardzo zamieszany.. Po prostu pozmieniaj sobie kilka linii i zobacz co się stanie - dość szybko ją rozgryziesz. Mi napisanie tego kodu zajęło parę dni, więc Tobie naniesienie poprawki nie powinno zająć więcej niż parę godzin.
uczestnicy (10)
-
A.L.E.C
-
GC
-
Grzegorz Chwesewicz
-
Jarosław Haczyk
-
Konrad
-
Marcin Król
-
Michał Gacek
-
Piotr S.
-
skynet.goralski@vp.pl
-
SoNiC