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 ;)
- 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…)
- Krótkie znaczniki otwierające (<?) - na nowych konfiguracjach nie zadziała
- Brak wielu ikon po zainstalowaniu.
- 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łegoprozy białej. - 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
- 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.
- 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.
- 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.
- 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.
- 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…
- …błędy MySQL. Powód? Panel admina posiada osobny plik config.php…
- 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?
- Ustawienie stopki przy dłuższych stronach nie zachwyca. Takie rzeczy jak 404 pod jednym linkiem i brak linka do strony też nie….
- 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?
- 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…
- 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 :(
- Po interfejsie można by jeździć w nieskończoność, ale przejdźmy do kodu…
- 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?
- Kod strony głównej przebija - 35 błędów i to… w HTML 4.01. Widać kto tu rządzi :)
- Taki krótki wycinek kodu z panelu administracyjnego:
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.<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>
- 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?
- 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.
- 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 :)