Nelle prossime righe verrà indicata l'architettura base di uno strumento e ciò che lo sviluppatore deve creare per poterlo integrare nel Sistema.
Ogni strumento deve essere composto da:
Esempio: creazione di uno strumento chiamato “Calendars”.
Ci sono poi dei files e delle cartelle che vengono create solo se lo strumento ne richiede l'utilizzo, come la cartella home/app/apis/calendars/views con i file .tpl delle viste relative alle api.
All'interno di home/app/views/calendars vanno inseriti i file .tpl che gestiscono la vista dei componenti dello strumento (come ad esempio edit.tpl, create.tpl, addstep.tpl etc…); questi file quindi dipendono dalla struttura dello strumento stesso.
Per la creazione di un nuovo strumento è utile sapere anche quali sono le funzioni che, indipendentemente dal tipo di strumento, vanno implementate; queste sono le funzioni di permission, ovvero quelle che gestiscono i permessi, riportate di seguito:
function permissionsGetObjects() { $_agendas['Agenda:*'] = $this->s('ALL_AGENDAS'); $agendas = $this->Agenda->findAll(); foreach ($agendas as $Agenda) { $id = $Agenda['Agenda']['id']; $_agendas['Agenda:'.$id] = $Agenda['Agenda']['title']; } return $_agendas; }
function permissionsGetActions() { return array( 'admin' => $this->s('PERMISSION_ADMIN_DESCRIPTION'), 'view' => $this->s('PERMISSION_VIEW_DESCRIPTION'), 'create' => $this->s('PERMISSION_CREATE_DESCRIPTION'), 'upload' => $this->s('PERMISSION_UPLOAD_DESCRIPTION'), 'rate' => $this->s('PERMISSION_RATE_DESCRIPTION'), 'download' => $this->s('PERMISSION_DOWNLOAD_DESCRIPTION'), 'edit' => $this->s('PERMISSION_EDIT_DESCRIPTION'), 'delete' => $this->s('PERMISSION_DELETE_DESCRIPTION'), ); }
function permissionsGetRoles() { $roles['moderator']['label'] = $this->s('AGENDA_MODERATOR'); $roles['moderator']['values'] = array( 'admin' =>'deny', 'edit' =>'allow', 'delete'=>'deny' ); $roles['administrator']['label'] = $this->s('AGENDA_ADMINISTRATOR'); $roles['administrator']['values'] = array( 'admin' =>'allow', 'edit' =>'allow', 'delete' => 'allow' ); return $roles; }
Oltre alle funzioni che gestiscono i permessi, se il nuovo strumento fa parte della classe degli strumenti deliberativi - come ad esempio lo strumento di consultazione certificata -, è fondamentale inserire il metodo toolinfo, che restituisce un array con le informazioni sullo strumento:
function toolInfo() { $info['owner'] = 'Polls'; $info['toolName'] = $this->s('POLLS_NAME'); $info['toolDescription'] = $this->s('POLL_TOOL_DESCRIPTION'); $info['createApiMethod'] = 'toolCreate'; $info['editPath'] = '/polls/edit/%d'; $info['viewPath'] = '/polls/view/%d'; $info['accessPermission'] = 'view'; $info['resultPath'] = '/polls/showresults/%d'; $info['resultPermission'] = 'view_results'; return $info; }
Tutte queste funzioni sono gestite tramite gli eventi e riportate nei file XML all'interno delle api di ogni strumento.
All'interno del controller che gestisce il nuovo strumento, per utilizzare le API relative agli strumenti con i quali relazionarsi, basta richiamare le stesse attraverso la funzione “loadApi()”.
Riportiamo qui di seguito l'esempio di come lo strumento 'Infodisc' richiama le API del modulo wikitool:
[...] $this->loadApi('Wikitool'); $wiki=$this->WikitoolApi->getWikiFor('Infodisc',$id); $this->set('wiki',$wiki ); [...]