blog.michalt.pl

Dzień 2: Blog od kuchni, czyli system Box

21.03.2022 15:06 Tech

Czas na drugi wpis w ramach jarmarku. Jeśli śledzicie moje wpisy, z pewnością słyszeliście o systemie Box. Napędza on mojego bloga i jest pierwszym z projektów, które chciałbym Wam zaprezentować. Narodził się w 2019 roku jako paskudnie sklepany CRUD z zaszytym użytkownikiem w kodzie oraz hasłem. Brzmi tragicznie? To nie miał być projekt hobbystyczny i nie miał mieć perspektyw rozwoju. Chciałem stworzyć na szybko coś niesamowicie prostego co napędzi mojego bloga i pozwoli pisać artykuły, a jednocześnie nie będzie Wordpressem, Drupalem itp. Napisałem to w kilkanaście, może kilkadziesiąt minut we frameworku Play i cudem było, że dorzuciłem bibliotekę ebean do ORM. Pierwotnie system nie miał żadnej nazwy, później ochrzciłem go BoxCMS, a jeszcze później otrzymał swoją ostateczną i uproszczoną nazwę Box.

Pierwszy panel administracyjny wyglądał komicznie. Naprawdę nie ma czego pokazywać. Z czasem pomyślałem, że może warto by jednak troszkę rozbudować bloga i tego nieszczęsnego CRUDa. Diabelsko druciarsko napisany kod otrzymał 2 potężne refactory, bardzo mocno zyskał na estetyce i architekturze, a także zyskał sporo nowych funkcjonalności, których nie wykorzystałem na stronie bloga, ale miałem zamiar użyć w innych projektach, które ostatecznie nie powstały. W dalszej części pokrótce je omówię.



Aktualizacja

Kilka dni temu ukończyłem drobną aktualizację do wersji 1.6, która nie wprowadza żadnych przełomowych zmian i skupia się głównie na poprawkach błędów. Następne, jeśli się pojawią, również będą miały charakter utrzymaniowy.



Core

Box panel - treść

Jak już wspomniałem, system został napisany w języku Java i w oparciu o framework Play. Front-end napędzany jest przez silnik szablonów Twirl, który pochodzi z ów frameworka. Jego składnia oparta jest na języku Scala. Panel administracyjny korzysta z Bootstrapa w wersji 4.3.



Użytkownicy

Box rozróżnia ich 4 grupy: anonymous, standard user, admin, master admin. Każda z nich posiada swój identyfikator na podstawie którego udostępniane są pewne obszary funkcjonalności.
Anonymous to każdy użytkownik niezalogowany odwiedzający stronę. Nie posiada on żadnych uprawnień za wyjątkiem przeglądania treści.
Standard user to użytkownik posiadający prawa do redagowania i zarządzania artykułami, ale bez uprawnień administracyjnych strony – nie może dokonywać żadnych zmian w ustawieniach.
Admin to użytkownik posiadający prawa do redagowania treści i częściowe prawa administracyjne. Może on dokonywać zmian między innymi w trybach synchronizacji stron, trybach tworzenia i dystrybuowania treści, a także dodawać użytkowników typu standard user. Nie ma on jednak uprawnień do dodawania administratorów.
Master admin to specjalny użytkownik posiadający pełne prawa i różniący się również w sposobie autentykacji na stronie oraz konfiguracji własnego konta.



Synchronizacja i backup

Przy pomocy Box-a możemy stworzyć stronę działającą w trybie multi-site. System udostępnia 3 tryby synchronizacji: odczytujący, wysyłający i duplex (synchronizacja w obie strony). W każdym z trybów należy dokonać odpowiedniej konfiguracji polegającej między innymi na wyborze jednego z nich oraz adresów nadawania a także na wygenerowaniu i ustawieniu specjalnych kluczy.

Poza synchronizacja mamy możliwość importu i eksportu treści z i do pliku.



Treść

Box panel - multimedia

Zacznijmy od trybu wyświetlania. Tu mamy 2 drogi: Pierwsza to standardowe pobranie listy wpisów do szablonu, druga zaś to widoki. Widoki pozwalają na wyświetlanie w specjalny sposób odfiltrowanej treści. Są prymitywniejszym tworem rozwiązania, które można znaleźć w systemie Drupal.

W systemie istnieją 2 kategorie treści: artykuły i strony.

Artykuły można kategoryzować wedle wcześniej dodanych kategorii. Ponadto istnieje również mechanizm taksonomii pozwalający na drzewiaste kategoryzowanie treści. Istnieje również możliwość generowania linków wpisów po taksonomii.

Stron nie da się kategoryzować, ale w przeciwieństwie do artykułów można nadać im odrębny styl CSS. Każdy z wpisów można ustawić w tryb szkicu i w dowolnym momencie opublikować lub edytować. Artykuły i strony można komentować, a komentarze administrować. Na moim blogu postanowiłem je wyłączyć. Do tworzenia treści stworzyłem prosty edytor WYSIWG, dzięki któremu można dokonać podstawowego formatowania treści, a także załączyć obrazki. Jeśli już jesteśmy przy obrazkach, dla nich przygotowana została również specjalna galeria multimediów w której mamy możliwość zarządzania nimi. Ponadto, możemy tworzyć custom-menu i ładować je w dowolnym miejscu strony.



Rozszerzenia

Box posiada własne API rozszerzeń. Pozwala ono na drobne ingerencje w panel administracyjny (dodanie elementu do głównego menu i panelu ustawień) oraz dosyć zaawansowaną ingerencję w treść. Architektura modułów wykorzystuje wzorzec architektoniczny MVC. Widoki buduje się przy wykorzystaniu silnika Twirl, a modele z wykorzystaniem mojego własnego rozwiązania ORM, które stanowi rozwinięcie biblioteki ebean. Ponadto, każdy z modułów może posiadać swoją odrębną listę routingów – jeśli ingerują w istniejące, są ignorowane.



Logi i statystyki

System zbiera drobne statystyki odwiedzin oraz logi zdarzeń. Zdarzenia zostały podzielone na 3 grupy: powiadomienie, ostrzeżenie i błąd.



Przyszłość

Można by powiedzieć, że Box porasta kurzem i niewiele tu się wydarzy. Nic bardziej mylnego. Pracuję nad wersją 2.0 o której być może wspomnę już niedługo. W międzyczasie pojawią się zapewne drobne aktualizacje. Wersja 1.6 jeszcze nie została wdrożona, ponieważ wraz z aktualizacją pojawi się pewna istotna nowość na blogu z którą postanowiłem się jeszcze wstrzymać.


To na tyle w tym wpisie. Do przeczytania jutro! :)