|
STRIX
StrixDocumentManagementForProgrammers: Revision 7
docman-import.php
Strix Document Management s naglaskom na import dokumenataO dokumentuNove verzije ovog dokumenta bi se mogle naci na strix wikiju. Verzija 1: Matko Anđelinić, Srpanj 2005., Inicijalna verzija Opis tablicaTablica "document"Glavna tablica. Zapisi i za dokumente i foldere.
PRIMARY KEY (id) Tablica "document_revision"
Tablica koja veze verziju dokumenta s filenameom na filesystemu servera. Filename
PRIMARY KEY (document_id, version_num) Napomena 1: Verzioniranje ide redom 1, 2, ....
Napomena 2: Iako folderi ne mogu imati verzije, za njih je svejedno potrebno Napomena 3: Lokacija dokumenta na disku se racuna ovako: $docman_dir/$document_id/$version_num/$filename gdje je
Tablica "document_author"
Vise zapisa po dokumentu. Informacija o autorima dokumenta koja se moze unositi
PRIMARY KEY (document_id, version_num, author_id) Ostale tablice
atributi DozvoleKoristi se STRIX-ov sustav dozvola - ACL. Oznaka za dokumente u ACL-u je 'file'. Tablice acl_user i acl_group
Opis ACL-a nije u scopeu ovog dokumenta pa se nece opisivati. Vazno je da postoje acl_userObjectAddPerm(user_id, 'file', document_id, perm) Za dokumente perm moze biti:
Automatska, defaultna dodjela dozvola
Uploaderu se, na razini baze (triggerom) automatski dodjeljuje OWN pravo. Bez
Za one koji zele znati vise, za to je zaduzen sljedeci zapis u tablici acl_id | default_sql --------+----------------------------------------------------------------------- file | SELECT 'file', NEW.id, author_id, -1 FROM document WHERE id = NEW.id
Dodatno, preporuka je da se OWN pravo dodijeli i svim osobama navedenim kao autori SELECT acl_userObjectAddPerm($user_id, 'file', $document_id, 'PERM_OWN'); Mali primjer importa dokumenta koristenjem PHP libraryja
Zamislimo slucaj da imamo na filesystemu dokument /data/tmp/dokument.doc kojeg Stanje sadrzaja foldera XXXX prije pokretanja skripte za import: plivaweb=# select id, title, folder, depth, ord from getDocumentTree(9); id | title | folder | depth | ord ----+-----------+--------+-------+----- 12 | Bayer.zip | f | 0 | 1 13 | Lilly.zip | f | 0 | 2 (2 rows) Skripta za import:
<?php
include_once("sysinc/stdlib.php");
include_once "docman.php";
// globalna varijabla koja (ako je true) libraryju govori da
// pobrise OWN dozvole koje su automatski dodijeljene uploaderu (author_id)
// preko triggera u bazi
$PD_no_automatic_perms = false;
$parent_folder = 9;
$document_path = "/data/tmp/dokument.doc";
$in = array (
"title" => "Novi folder"
, "description" => ""
, "creation_time" => strftime("%Y-%m-%d")
, "lang_id" => "1"
, "allow_discussion" => "t"
, "author_id" => "4"
, "approved" => "t"
, "keywords" => "testni folder, document import"
, "edit_time" => ""
, "edit_user" => ""
, "source" => ""
, "folder" => "t"
);
$folder = PlivawebDocuments::createFolder($parent_folder, $in);
if (PlivawebDocumentsError::isError($folder)) die ($folder->text);
//ako smo ovdje u varijabli $folder imamo id novokreiranog foldera
$in = array (
"title" => "Moj dokument"
, "description" => "Dokument koji sam uploadao"
, "creation_time" => strftime("%Y-%m-%d")
, "lang_id" => 1
, "allow_discussion" => "t"
, "author_id" => 3
, "approved" => "t"
, "keywords" => ""
, "edit_time" => strftime("%Y-%m-%d")
, "edit_user" => 3
, "source" => ""
, "attributes" => array()
, "local_file_name" => $document_path
);
$did = PlivawebDocuments::addDocument($folder, $in);
if (PlivawebDocumentsError::isError($did)) die ($did->text);
echo "Document created";
?>
Pokrenuta skripta: $ php4 docmanimport-example.php plivaweb Stanje sadrzaja foldera XXXX poslije pokretanja skripte za import: plivaweb=# select id, title, folder, depth, ord from getDocumentTree(9); id | title | folder | depth | ord ------+--------------+--------+-------+----- 4949 | Novi folder | t | 0 | 3 4950 | Moj dokument | f | 1 | 4 12 | Bayer.zip | f | 0 | 6 13 | Lilly.zip | f | 0 | 7 (4 rows)
Napomena 1: PHP library u inc/docman.php nije ni blizu kompletan i 100% fail safe,
Napomena 2: Nema razloga da se ne napise skripta u nekom drugom jeziku koja Dodatak: Funkcije za dohvat podataka
Postoji niz funkcija za rukovanje (dohvacanje podataka). One su mahom rekurzivne.
Najcesce koristena takva funkcija je getDocumentTree(folder_id integer) koja Npr. plivaweb=# select id, title, folder, depth, ord from getDocumentTree(26); id | title | folder | depth | ord -----+------------------------------------+--------+-------+----- 27 | forms | t | 0 | 1 28 | AC form | f | 1 | 2 426 | ChemClient Izjava | f | 1 | 3 427 | Formular za publikacije | f | 1 | 4 417 | HTS_form.pdf | f | 1 | 5 418 | New_PL_form.pdf | f | 1 | 6 419 | New_PL_form.xls | f | 1 | 7 422 | PK&M form | f | 1 | 8 29 | Publications Form | f | 1 | 9 428 | Rjesenje GO | f | 1 | 10 429 | Zahtjev za nabavu | f | 1 | 11 33 | instructions | t | 0 | 12 35 | LabNotebooks law.pdf | f | 1 | 13 421 | Pravilnik za pisanje lab. dnevnika | f | 1 | 14 420 | Upute o kretanju NII.pdf | f | 1 | 15 30 | instruments | t | 0 | 16 31 | instruments_development.xls | f | 1 | 17 32 | instruments_research.xls | f | 1 | 18 37 | presentations | t | 0 | 19 (19 rows)
Preporuka je, ne koristiti ovu funkciju bas za svaku moguci dohvat dokumenata,
Napomena: Iako to nije slucaj sa funkcijama u tables2/docman.sql, zgodno je |