Przegląd skryptów genialnych #1

Od pewnego czasu zacząłem się interesować CMS-ami (od strony developerskiej). Dlatego też postanowiłem zobaczyć jak wyglądają polskie osiągnięcia na tej scenie. Znalazłem mały spis naszych rodzimych tworów i zacząłem sprawdzać. Dzisiaj przygotowałem dla Was krótki przegląd skryptu znad Wisły o wdzięcznej nazwie CMS Zaba (pamiętajcie - nie żaba ;)). Od razu uprzedzam wszelkie (oczywiste) skojarzenia z wymyślną formą promocji mojego "CMS-a". Faktycznie, na przeglądanie innych CMS-ów naszło mnie właśnie przy okazji pisania Irona, ale nie zamierzam tym pokazywać jakichś ewentualnych przewag nad innymi skryptami. Zdaję sobie sprawę z tego, że IronCMS to wytwór amatorski i nie może się równać z CMS-ami nieraz tworzonymi przez profesjonalne firmy.

No, ale teraz przechodzimy do rzeczy ;)

  1. Brak instalatora - chociaż to tylko drobna uwaga. Dla większości osób zaimportowanie bazy danych i wypełnienie pliku konfiguracyjnego to chyba nie jest wielki problem (chyba...)
  2. Krótkie znaczniki otwierające (<?) - na nowych konfiguracjach nie zadziała
  3. Brak wielu ikon po zainstalowaniu.
  4. Widać, że z polskiego autor geniuszem nie był. Pozwolę sobie zacytować newsa powitalnego:

    Witam login dla admina to admin haslo admin tak samo jak loguje sie na stronie!

    Mamy tu klasyczny przykład wiersza białego prozy białej.

  5. Z angielskiego też najlepiej mu nie szło :(. W stopce mamy link o pięknym opisie "Cms Power by Zaba". Dodatkowo przed linkiem nie ma http://, przez co oczywiście przeglądarka traktuje go tak jakby prowadził do katalogu. Na dokładkę mamy też genialną nazwę theme'u domyślnego - defult
  6. Dobrze. Przyszedł czas się zalogować. Dane podane przez autora są poprawne. Co jednak stanie się gdy podamy złe dane? Ano nic - nagłówek "Logowanie", reszta strony pusta. Żadnego komunikatu... Tak samo z resztą jest przy logowaniu poprawnym - jedynym znakiem jest zmiana menu.
  7. Klikam w link "Panel" i oto - ponownie nagłówek "Logowanie"... Wygląda na  to, że z jakichś powodów skrypt nie łapie zmiennych. Pewnie potrzebne włączone register_globals? Zaraz się przekonamy.
  8. W międzyczasie nadszedł czas na przyjrzenie się lekko bazie danych.
    • Brak prefixów tabel
    • Wchodzimy do tabeli "uzytkownicy". Hasła szyfrowane... ale samym md5 bez soli. Słabo.
    • Patrzę na pola w tej tabeli. Mamy tam praktycznie wszystko: logowan, komentarzy, dzwiek, procesor, pamiec, monitor, avart (jak sama nazwa wskazuje, zawiera URL do avatara ;)), lacze, system, myszka, podkladka, potrawa, muzyka, film, aktor, sport etc... Ogólnie wszystko co niezbędne. Szkoda tylko, że nie znalazły się tam tak wyszukane pola jak np. płeć :/
    • Wszystkie powyżej wymienione pola wypełnione ofc danymi autora skryptu.
  9. Tymczasem powracamy do punktu siódmego. "Niespodziewanie" moja diagnoza o konieczności włączenia register_globals przyniosła efekty. Podstrony zaczęły działać, tak samo ew. błędy przy logowaniu.
  10. Czas więc ponownie spróbować wejść do panelu administracyjnego. Klikam więc link "Panel" i znajduję się w... profilu. Okazuje się bowiem, że to co miałem mylnie za panel administratora, okazało się panelem użytkownika. Więc gdzie jest panel administratora? W paczce znajdował się folder "Administracja", dopisałem go do adresu i oto...
  11. ...błędy MySQL. Powód? Panel admina posiada osobny plik config.php...
  12. Dobrze, pojawiła się strona logowania. Ale zaraz, jak to? Na stronie jestem zalogowany, a w panelu jeszcze nie, tak? No cóż, za łatwo być nie może :) Powodem tego jest to, że admin, czyli user tworzony domyślnie jest trzymany w dwóch tabelach "uzytkownicy" i "admin". Wprawdzie daje to powalającą możliwość oddzielnego hasła do strony i do panelu, ale... co komu po tym?
  13. Ustawienie stopki przy dłuższych stronach nie zachwyca. Takie rzeczy jak 404 pod jednym linkiem i brak linka do strony też nie....
  14. Zszokował mnie pewien fakt... Otóż po wejściu w zakładkę "Aktualności", okazało się, że... nie da się ich edytować. Jakaś możliwość specjalna?
  15. Postanowiłem dodać kategorię artykułów, lecz zamiast jakiegoś komunikatu/linka zobaczyłem "Artykuly Kategorie - ok0: Update finish". Podobna sytuacja po edycji profilu. Pozostałości po debugu w wersji publicznej? Niedobrze...
  16. Nadszedł czas ustawić kategorię dla mojego artykułu, aby mógł się wyświetlić. Niestety widząc link "[E]", odruchowo założyłem, że edycja dla artykułów jest możliwa. Przeceniłem "Zabę" - pusty link :(
  17. Po interfejsie można by jeździć w nieskończoność, ale przejdźmy do kodu...
  18. Panel admina, sądząc po DTD, jest pisany w xHTML 1.0 Strict. Ambitnie - jednak co z tego skoro mamy 25 błędów?
  19. Kod strony głównej przebija - 35 błędów i to... w HTML 4.01. Widać kto tu rządzi :)
  20. Taki krótki wycinek kodu z panelu administracyjnego:
    <div id="header">
     <ul>
     <li id="current"><a href="index.php">Strona Główna</a></li>
     <li id="current"><a href="index.php?cmd=1">Aktualności</a></li>
     <li id="current"><a href="index.php?cmd=2">Strony Serwisu</a></li>
     <li id="current"><a href="index.php?cmd=10">Artykuly</a></li>
     <li id="current"><a href="index.php?cmd=3">Linki</a></li>
     <li id="current"><a href="index.php?cmd=4">Księga Gości</a></li>
     <li id="current"><a href="index.php?cmd=5">Newsletter</a></li>
     <li id="current"><a href="index.php?cmd=6">Użytkownicy</a></li>
     <li id="current"><a href="index.php?cmd=8">Menu</a></li>
     <li id="current"><a href="index.php?cmd=12">Bannery</a></li>
     <li id="current"><a href="index.php?cmd=11">Pliki</a></li>
     <li id="current"><a href="index.php?cmd=7">Forum</a></li>
     <li id="current"><a href="index.php?cmd=13">Ban</a></li>
     <li id="current"><a href="index.php?cmd=9">Konfiguracja</a></li>
    </ul></div>

    Hmm... o ile nie przerobiłem kursu dla idiotów, to ID może być tylko jedno :P. Sam sposób jego nadawania też miażdży.

  21. Reszta strony to tabelki, font w xhtml, tabelki, style inline, zero klasy dla powtarzanych elementów, tabelki, style inline i... czy wspomniałem już o tabelkach?
  22. Jeśli chodzi o nazewnictwo w kodzie. Raz mamy sobie f-cję menu_update(), a za chwilę pokaz_plik(). Totalny mix dwóch języków, z przewagą oczywiście polskiego.
  23. Mógłbym zrobić jeszcze pizdylion^666 punktów, ale mi się nie chce, tak więc pokażę kilka rzeczy na screenie: klik.

Ogólnie można pewnie wytknąć jeszcze masę błędów. Nie oceniałem przecież praktycznie w ogóle kodu PHP. Poza tym jest sporo możliwości samego skryptu których nie testowałem. Forum, download i masę innych... Jeśli komuś jeszcze chciałoby się pośmiać, to skrypt można ściągnąć tutaj. Ja tymczasem z powrotem ustawiam konfigurację PHP na bezpieczną.

 

PS: Dodam jeszcze króciutkie wyjaśnienie. Moim celem nie było wyśmiewanie autora skryptu. Trzeba docenić to, że zrobił darmowy produkt i udostępnił go ludziom (choć w readme groził, że "Kopiowanie kodu jest surowo karane lub tez kopiowanie plikow....."). Po prostu można potraktować to jako krótką listę błędów których nie należy popełniać.

PS2: Przepraszam za ewidentny bałagan w poście. Był on pisany "na żywo" podczas testów.

PS3: Wynikiem 996 słów uzyskujemy prawdopodobnie najdłuższy dotychczasowy wpis na sobak.pl :)

5 komentarzy do “Przegląd skryptów genialnych #1

    • Sobak pisze:

      Znalazłem kiedyś taką listę polskich CMS-ów. Tylko ciężko się do nich dokopać, bo większość to juz tylko 404.

      Tak, planuję tego więcej. Mam jeszcze jednego kandydata obadanego i na jednego CMS-a poluję.

  1. Doceńmy zdolności początkującego autora skryptów – mimo wszystko, nie każdemu udaje się dojście do takiego etapu programowania. To prawda, że masa błędów. Ale ilu ludzi poddało się zanim było w stanie zabrać się za pisanie czegoś działającego?

    Krytyka w artykule oczywiście słuszna – jeśli coś publikujemy, to bądźmy gotowi na wytknięcie naszych błędów, a nawet za to podziękujmy. W końcu w życiu chyba chodzi o doskonalenie się.

    Dlatego życzę autorowi „CMS” aby w przyszłości umiał programować jeszcze lepiej nie poddając się, bo naprawde warto ;-)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *