Quick jump:  What's new

 
Go to:
 
Weblog: plugin   
in STRIX
UserCanDoOnObject

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 ;

flag mark
1 PERM_READ
2 PERM_WRITE
2 PERM_SUGGEST
4 PERM_AUTHOR
8 PERM_ADMIN
8 PERM_OWN

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:

  1. PERM_READ - korisnik s tom dozvolom ima pravo pristupa (u kontekstu kategorije tj. stranice) odnosno pravo čitanja sadržaja (u kontekstu jedinice sadržaja)
  2. 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.
  3. 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.
  4. PERM_ADMIN - korisnik je administrator stranice.

acl_id su tipovi sadržaja. Mogu se pogledati sa:

 strix=# select * from acl_register ;

id table_name id_col_name detail_col_name description
grup grupe id naziv Group
site site id naziv Site
kats kategorija id naziv Category
file document id title File
news news id title Vijest
faq faq_qanda id question FAQ
foru f_topics id title Forum
cale calendar id title Calendar

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 );
permalink
Plugini

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:

 


  
    
  

      

        
          

            

              
                Search for plugin smarty
              
            

          

          

            
              

            
            
          

        
      

    

interni plugini

Interni plugini postoje za sljedeće infrastrukuture (svaka ima svoj direktorij u inc/plugins):



za ACL vidi UserCanDoOnObject

permalink
PluginiRSS

rss/*

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

permalink
PluginiSubscribe

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"];
    }
}
?>
permalink
PluginiRollLink

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
permalink
PluginiRoll

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
permalink
PluginiRichEdit

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
permalink
PluginiRating

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
permalink
PluginiPrintable

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;
}
?>
permalink
PluginiPrint

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")
permalink
Weblog Navigation
Loading...
Weblog Archives
  • Loading...