Prava pristupa i dozvole za sadržaje
select UserCanDoOnObject(user_id, perm, acl_id, object_id);
perm određuje pravo. Postojeće permisije mogu se pogledati sa:
strix=# select * from perms order by flag ;
Neke od njih su aliasi tako da se iste dozvole mogu koristiti u razlicitim kontekstima.
Kratko objašnjenje kako su zamišljene osnovne razine dozvola u STRIXu:
- PERM_READ - korisnik s tom dozvolom ima pravo pristupa (u kontekstu kategorije tj. stranice) odnosno pravo čitanja sadržaja (u kontekstu jedinice sadržaja)
- PERM_WRITE ili njezin alias PERM_SUGGEST (alias u kontekstu dozvola na foldere) - korisnik ima pravo predlaganja sadržaja, glasanja, komentiranja, postavljanje pitanja. Predloženi sadržaj se ne objavljuje direktno nego se čeka dozvola administratora stranice koji za taj sadržaj može dozvoliti objavu ili odbiti.
- PERM_AUTHOR - korisnik ima pravo direktne objave svog contenta bez posredstva administratora. Korisnik s tom dozvolom ne može mijenjati tuđi content, ali može svoj.
- PERM_ADMIN - korisnik je administrator stranice.
acl_id su tipovi sadržaja. Mogu se pogledati sa:
strix=# select * from acl_register ;
object_id je identifikator objekta (obično primarni ključ) objekta za koji se provjerava permisija.
Primjer korištenja:
select UserCanDoOnObject(1, 'PERM_ADMIN', 'news', 42 );
Updated by dpavlin@hidden on Dec 14 1:56am
Posted by dpavlin@hidden on Nov 17 2:43pm
U STRIXU postoje dvije vrste plugina:
- Smarty plugini (sysinc/plugins/*.php) - koriste se u templateima
- interni plugini za različite infrastrukture (inc/plugins/*) - koriste se u PHP datotekama
Smarty plugini
Detaljna dokumentacija o njihovoj arhitekturi nalazi se na http://smarty.php.net/manual/en/plugins.php
Osim standradnih plugina koji dolaze sa Smartyjem, u STRIXU postoje i custom-made Smarty plugini:
interni plugini
Interni plugini postoje za sljedeće infrastrukuture (svaka ima svoj direktorij u inc/plugins):
za ACL vidi UserCanDoOnObject
Updated by dpavlin@hidden on Nov 18 5:14am
Posted by dpavlin@hidden on Nov 17 2:42pm
Ova infrastruktura namijenjena je da omogući željenim modulima generiranje RSS feeda. Feedove generira skripta rss/rssfeeder.php kojoj je potrebno predati tri GET parametra:
- rss_uid - ID korisnika za kojeg je namijenjen dotični feed kako bi se feed izgenerirao u skladu s njegovim dozvolama
- rss_kid - ID kategorije u kojoj se nalazi sadržaj za kojeg će biti generiran feed
- rss_ct - ID tipa sadržaja, dogovor je da, kad god je to moguće, dotični odgovara ID-ovim ACL-a iako se to nigdje striktno ne provjerava
U skripti rss/rssfeeder.php nalaze se konstante koje omogućavanju njezino konfiguriranje:
- DEBUG - aktivira debug način rada u kojem skripta prima sve konekcije (u normalom načinu rada skripta prima konekcije samo s localhosta (127.0.0.1) odnosno s IP adrese definirane u konfiguracijskoj varijabli _rss_ip_regex (u datoteci etc/*.conf.php), po pretpostavci false.
- PLUGIN_DIR - direktorij s RSS pluginima, po pretpostavci ../inc/plugins/rss/
- PLUGIN_EXT - ekstenzija za plugin datoteke, po pretpostavci .php
- PLUGIN_FUNCTION_PREFIX - prefix za funkciju koja se poziva unutar plugina, po pretpostavci rssfeed_
- CACHE_DIR - direktorij za RSS cache, po pretpostavci /tmp
- DEFAULT_TTL - vijeme života cachea (Time To Live) u sekundama, po pretpostavci 300
Za generiranje RSS-a skripta rss/rssfeeder.php koristi biblioteku inc/ContentFeeder.class.php.
Svaki modul koji želi koristiti ovu infrastrukturu (tj. generirati RSS feed) mora imati zasebnu datoteku u direktoriju inc/plugins/rss/. Ime datoteke mora biti isto kao i dogovoreni ID tipa sadržaja (parametar rss_ct), a pretpostavljena ekstenzija datoteke je .php.
Unutar datoteke plugina mora se nalaziti funkcija čije je ime kombinacija PLUGIN_FUNCTION_PREFIX-a i ID tipa sadžaja. Dotična funkcija vraća rezultat odgovarajućeg upita iz baze pomoću metode getAllTable. Iz vraćenog rezultata skripta rss/rssfeeder.php izgenerirat će RSS feed.
Primjer
Za modul Vijesti (mod_news) dogovoreni identifikacijski parametar news. Zato se datoteka u inc/plugins/rss zove news.php, a funkcija koja će biti pozvana zove se rssfeed_news:
<?php
$rssfeed_channel = "News";
$rssfeed_description = "News";
$rssfeed_ttl = "300";
function rssfeed_news ($uid, $kid) {
$q = new SQLquery("SELECT *
FROM news, news_kategorija, kategorija
WHERE news.id = news_kategorija.news_id
AND kategorija.id = news_kategorija.kategorija_id
AND news_kategorija.kategorija_id = " . $kid . "
AND news.visible = TRUE
AND news_kategorija.approved = TRUE
AND news_kategorija.archived = FALSE
AND userCanDoOnObject (" . $uid . ", 1, 'news', news.id)
AND (news_kategorija.time_to > NOW() OR news_kategorija.time_to IS NULL)
AND (news_kategorija.time_from < NOW() OR news_kategorija.time_from IS NULL)
ORDER BY news_kategorija.pos DESC, news.date DESC");
$data = $q->getAllTable();
return $data;
}
?>
Na početku plugina nalaze se tri konfiguracijske varijable:
- rssfeed_channel - ime RSS kanala
- rssfeed_description - opis RSS kanala
- rssfeed_ttl - vrijeme života cache, override za vrijednost u rss/rssfeeder.php
Za funkciju je dovoljno da sadžava samo odgovarajući SQL query te da vrati "sirove" rezultate.
Mislim da će trebati CACHE_DIR razdjeliti nekako, npr. site_name/rss_kid/rss_uid-rss_ct jer ćemo željeti pobrisati samo dio RSS-ova nakon što npr. netko snimi novu vijest, a mi je preuzimamo na 10 drugih mjesta na site-u.
contributed by dpavlin@hidden on Nov 17 4:34pm
Updated by dpavlin@hidden on Nov 17 4:34pm
Posted by dpavlin@hidden on Nov 17 2:42pm
subscribe/*
Plugini za subscribe vraćaju naslove sadržaja prema proslijeđenom ID-u. Ovo je bitno kako bi se prilikom slanja obavijesti korisnicima mogli izgenerirati smisleni naslovi sadržaja koji je promijenjen.
OPREZ: OVU ISTU INFRASTRUKTURU KORISTI I CHANGELOG.
Razlog tome je što changelog ima istu potrebu kao i subscribe (saznati naslov sadržaja iz njegovog ID-a), pa nije imalo smisla raditi drugu infrastrukturu za istu stvar. Nezgodno je samo ime postojeće infrastrukture koje po ničemu ne govori da je i changelog koristi.
U slučaju korištenja infrastrukture u svrhe pretplate plugine pozivaju skripte inc/scripts/subscribe_check.php i inc/scripts/subscribe_reports.php, a u svrhe changeloga plugine poziva skripta sysinc/changelog.php.
Svaki modul koji koristi ovu infrastrukturu mora imati zasebnu datoteku. Imena datoteka moraju odgovarati ID-ovima ACL-a za pojedini tip sadržaja (tablice acl_register i acl_nonregister).
Ime funkcije unutar datoteke mora se sastojati od stringa subscribe_ i imena datoteke. Funkcija vraća pripremljeni znakovni niz.
Primjer
Za modul Vijesti (mod_news) dogovoreni identifikacijski parametar je news. Zato se datoteka u inc/plugins/subscribe zove news.php, a funkcija izgleda ovako:
<?php
function subscribe_news ($params) {
if (isset($params["id"])) {
$q = new SQLquery ("SELECT title FROM news WHERE id = " . $params["id"]);
$row = $q -> getNextRow();
return $row["title"];
}
}
?>
Updated by dpavlin@hidden on Nov 17 2:42pm
Posted by dpavlin@hidden on Nov 17 2:42pm
function.roll_link.php
Ispisuje link koji odrolava i zarolava neki sadržaj koji se nalazi negdje drugdje na stranici (ne odmah ispod linka, pa se iz tog razloga ne koristi block.roll.php)
Parametri
- id - jedinstveni ID sadrzaja, najčešće kombinacija naziva modula i brojke - OBAVEZAN PARAMETAR
- img - ime slike koja se ispisuje pored linka (ista slika i za odrolavanje i za zarolavanje)
- img_hide - ime slike koja se ispisuje pored linka kada je sadržaj skriven odnosno zarolan
- img_show - ime slike koja se ispisuje pored linka kada je sadržaj pokazan odnosno odrolan
- class - ime CSS klase koja se definira nad pripadajućim <a> tagom
- onclick="alert('foo');" - dodatna javascript akcija koja se izvršava na klik
- nocokie - override cookiea, ako se definira nocokie="true", sadržaji će prilikom svakog učitavanja stranice biti odrolani ili zarolani prema default opciji (ako je navedeno "hide" bit će zarolani, a ako opcija default nije navedena biti će odrolani). Nenavođenem ove opcije iskorištava se cookie za pamćenje prošlog stanja prilikom učitavanja stranice.
- action_text="foo" - tekst na kojeg će se klikati za odrolavanje odnosno zarolavanje sadržaja
- default - pretpostavljeno stanje sadržaja nakon učitavanja stranice, npr. ako se navede default="hide" sadržaj će biti zarolan odn. skriven. Nenavođenje ove opcije će rezultirati odrolanim sadržajem po pretpostavci
Updated by dpavlin@hidden on Nov 17 2:42pm
Posted by dpavlin@hidden on Nov 17 2:42pm
block.roll.php
Blok funkcija (ima početni i završni tag: {roll} ... {/roll}) koja služi za omogućavanje odrolavanja i zarolavanja sadržaja između tagova (mijenja vidljivost <div> taga u kojem se nalazi sadržaj)
Parametri
- id="repoz_21" - jedinstveni ID sadrzaja, najčešće kombinacija naziva modula i brojke - OBAVEZAN PARAMETAR
- action_text="foo" - tekst na kojeg će se klikati za odrolavanje odnosno zarolavanje sadržaja - OBAVEZAN PARAMETAR
- html_pre="<B>" - HTML tag(ovi) koji prethodi action_text-u
- html_post="</B>" - HTML tag(ovi) koji slijedi iza action_text-a
- default - pretpostavljeno stanje sadržaja nakon učitavanja stranice, npr. ako se navede default="hide" sadržaj će biti zarolan odn. skriven. Nenavođenje ove opcije će rezultirati odrolanim sadržajem po pretpostavci.
- nolink - omogućava da se link ne ispisuje
- nocokie - override cookiea, ako se definira nocokie="true", sadržaji će prilikom svakog učitavanja stranice biti odrolani ili zarolani prema default opciji (ako je navedeno "hide" bit će zarolani, a ako opcija default nije navedena biti će odrolani). Nenavođenem ove opcije iskorištava se cookie za pamćenje prošlog stanja prilikom učitavanja stranice.
- onclick="alert('foo');" - dodatna javascript akcija koja se izvršava onclick na action_text
- no_img - override slike, ako je "true" ne pojavljuje se sličica pored linka
Updated by dpavlin@hidden on Nov 17 2:42pm
Posted by dpavlin@hidden on Nov 17 2:42pm
function.rich_edit.php
Zamijenjuje <TEXTAREA> element s rich editorom FCKeditor http://www.fckeditor.net/. Dotični editor nalazi se instaliran u direktoriju inc/FCKeditor/.
Parametri
- name="bar" - ime polja - OBAVEZAN PARAMETAR
- value="foo bar foo" - vrijednost koju treba upisati u editor
- imgdir="/foo/bar" - direktorij s bibliotekom slika koji je relativan u odnosu na direktorij images (u primjeru konačan direktorij sa slikama bio bi /images/foo/bar) - OBAVEZAN PARAMETAR UKOLIKO SE ŽELE KORISTITI SLIKE
- width=400 - širina editora u px
- height=300 - visina editora u px
Updated by dpavlin@hidden on Nov 17 2:42pm
Posted by dpavlin@hidden on Nov 17 2:42pm
function.rating.php
Ispisuje sučelje za ocjenjivanje sadržaja.
Parametri
- see_results - ID jednog korisnika ili array ID-jeva korisnika koji smiju vidjeti rezultate ocjenjivanja
- ct="foo" - ID tipa sadržaja (acl ID) koji se ocjenjuje - OBAVEZAN PARAMETAR
- cid=1 - ID konkretnog sadržaja koji se ocjenjuje - OBAVEZAN PARAMETAR
- extra_js - opcionalni javascript kod
- text="bar" - alternativni tekst koji će biti ispisan (po defaultu piše /Rate usability/)
- style="foo" - za help link: prefix ispred imena ikone, ujedno i sufiks za ime CSS klase koja se definira nad eventualnim tekstualnim linkom
- stat="down" - statistika se ispisuje s donje strane sučelja (defaultno ponašanje)
- stat="right" - statistika se ispisuje s desne strane sučelja
Updated by dpavlin@hidden on Nov 17 2:42pm
Posted by dpavlin@hidden on Nov 17 2:42pm
printable/*
Svaki modul koji koristi ovu infrastrukturu mora imati zasebnu datoteku. Imena datoteka moraju odgovarati parametru name koji se koristi u PluginiPrint. Ime funkcije unutar datoteke mora se sastojati od stringa printable_ i imena datoteke. Funkcija vraća pripremljeni HTML.
Primjer
Za modul Vijesti (mod_news) dogovoreni identifikacijski parametar name je news. Zato se datoteka u inc/plugins/printable zove news.php, a funkcija izgleda ovako:
<?php
function printable_news ($params) {
$q = new SQLquery ("SELECT title, lead, content, date FROM news WHERE id = " . $params["id"]);
...
$printable = "<i>" . $row["date"] . "</i><br><br>";
...
return $printable;
}
?>
Updated by dpavlin@hidden on Nov 17 2:42pm
Posted by dpavlin@hidden on Nov 17 2:42pm
function.print.php
Ispisuje ikonu za printanje koja je link na popup prozor u kojem će se otvoriti dotični sadržaj formatiran u printer-fiendly formatu.
Parametri
- id=1 - ID sadržaja kojeg treba formatirati - OBAVEZAN PARAMETAR
- name="bar" - ime tipa sadržaja kojeg treba formatirati, ovisno o nazivu internog plugina infrastrukture PluginiPrintable - OBAVEZAN PARAMETAR
- link_text="foo" - alternativan tekst koji se ispisuje kao link na popup (po defaultu "printable version")
Updated by dpavlin@hidden on Nov 17 2:42pm
Posted by dpavlin@hidden on Nov 17 2:42pm
|
Weblog Navigation
Loading...
|