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 :)