From 1854075a62c6ca0422040b4e5ebf89088b0d02b2 Mon Sep 17 00:00:00 2001 From: Antonio Gallo Date: Tue, 15 Feb 2011 00:32:19 +0000 Subject: added wiki - part 1 --- h-source/Application/Models/BaseModel.php | 69 ------- h-source/Application/Models/GenericModel.php | 59 ++++++ h-source/Application/Models/HardwareModel.php | 2 +- h-source/Application/Models/NotebooksModel.php | 2 +- h-source/Application/Models/PrintersModel.php | 2 +- h-source/Application/Models/ScannersModel.php | 2 +- h-source/Application/Models/SoundcardsModel.php | 2 +- h-source/Application/Models/ThreegcardsModel.php | 2 +- h-source/Application/Models/VideocardsModel.php | 2 +- h-source/Application/Models/WebcamsModel.php | 2 +- h-source/Application/Models/WifiModel.php | 2 +- h-source/Application/Models/WikiModel.php | 228 +++++++++++++++++++++ h-source/Application/Models/WikirevisionsModel.php | 45 ++++ h-source/Application/Models/WikitalkModel.php | 50 +++++ 14 files changed, 391 insertions(+), 78 deletions(-) delete mode 100644 h-source/Application/Models/BaseModel.php create mode 100644 h-source/Application/Models/GenericModel.php create mode 100644 h-source/Application/Models/WikiModel.php create mode 100644 h-source/Application/Models/WikirevisionsModel.php create mode 100644 h-source/Application/Models/WikitalkModel.php (limited to 'h-source/Application/Models') diff --git a/h-source/Application/Models/BaseModel.php b/h-source/Application/Models/BaseModel.php deleted file mode 100644 index ce613c5..0000000 --- a/h-source/Application/Models/BaseModel.php +++ /dev/null @@ -1,69 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class BaseModel extends Model_Tree { - - public $type = ''; //device type - public $diffFields = array(); - public $fieldsWithBreaks = array(); - - public function __construct() { - $this->_tables = 'hardware'; - $this->_idFields = 'id_hard'; - - $this->_where=array( - 'type' => 'hardware', - 'vendor' => 'hardware', - 'compatibility' => 'hardware', - 'comm_year' => 'hardware', - ); - - $this->orderBy = 'hardware.id_hard desc'; - parent::__construct(); - } - - public function checkType($id_hard = 0) - { - $clean['id_hard'] = (int)$id_hard; - $res = $this->db->select('hardware','type','id_hard='.$clean['id_hard']); - if (count($res) > 0) - { - return (strcmp($this->type,$res[0]['hardware']['type']) === 0 ) ? true : false; - } - return false; - } - - public function getDiffArray($oldArray, $newArray) - { - $diffArray = array(); - foreach ($this->diffFields as $field => $label) - { - if (array_key_exists($field,$oldArray) and array_key_exists($field,$newArray)) - { -// echo htmlDiff($oldArray[$field], $newArray[$field]); -// echo $oldArray[$field].$newArray[$field]; - $diffArray[$label] = htmlDiff($oldArray[$field], $newArray[$field]); - } - } - return $diffArray; - } -} \ No newline at end of file diff --git a/h-source/Application/Models/GenericModel.php b/h-source/Application/Models/GenericModel.php new file mode 100644 index 0000000..0ccd332 --- /dev/null +++ b/h-source/Application/Models/GenericModel.php @@ -0,0 +1,59 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class GenericModel extends Model_Tree { + + public $type = ''; //device type + public $diffFields = array(); + public $fieldsWithBreaks = array(); + + public function __construct() { + $this->_tables = 'hardware'; + $this->_idFields = 'id_hard'; + + $this->_where=array( + 'type' => 'hardware', + 'vendor' => 'hardware', + 'compatibility' => 'hardware', + 'comm_year' => 'hardware', + ); + + $this->orderBy = 'hardware.id_hard desc'; + parent::__construct(); + } + + public function checkType($id_hard = 0) + { + $clean['id_hard'] = (int)$id_hard; + $res = $this->db->select('hardware','type','id_hard='.$clean['id_hard']); + if (count($res) > 0) + { + return (strcmp($this->type,$res[0]['hardware']['type']) === 0 ) ? true : false; + } + return false; + } + + public function getDiffArray($oldArray, $newArray) + { + return getDiffArray($this->diffFields, $oldArray, $newArray); + } +} \ No newline at end of file diff --git a/h-source/Application/Models/HardwareModel.php b/h-source/Application/Models/HardwareModel.php index 10f899e..17565ff 100644 --- a/h-source/Application/Models/HardwareModel.php +++ b/h-source/Application/Models/HardwareModel.php @@ -157,7 +157,7 @@ class HardwareModel extends Model_Map { { //get the values of the revision $revisions->setWhereQueryClause(array('id_rev'=>$clean['id_rev'])); - $newStruct = $revisions->getFields($this->fields.',created_by,updated_by,update_date,type,id_hard'); + $newStruct = $revisions->getFields($this->fields.',created_by,updated_by,update_date,type'); if (count($newStruct > 0)) { diff --git a/h-source/Application/Models/NotebooksModel.php b/h-source/Application/Models/NotebooksModel.php index a8fcdf2..c8d5993 100644 --- a/h-source/Application/Models/NotebooksModel.php +++ b/h-source/Application/Models/NotebooksModel.php @@ -20,7 +20,7 @@ if (!defined('EG')) die('Direct access not allowed!'); -class NotebooksModel extends BaseModel { +class NotebooksModel extends GenericModel { public $type = 'notebook'; //device type diff --git a/h-source/Application/Models/PrintersModel.php b/h-source/Application/Models/PrintersModel.php index af86980..f69d543 100644 --- a/h-source/Application/Models/PrintersModel.php +++ b/h-source/Application/Models/PrintersModel.php @@ -20,7 +20,7 @@ if (!defined('EG')) die('Direct access not allowed!'); -class PrintersModel extends BaseModel +class PrintersModel extends GenericModel { public $type = 'printer'; //device type diff --git a/h-source/Application/Models/ScannersModel.php b/h-source/Application/Models/ScannersModel.php index 87807b3..f30b505 100644 --- a/h-source/Application/Models/ScannersModel.php +++ b/h-source/Application/Models/ScannersModel.php @@ -20,7 +20,7 @@ if (!defined('EG')) die('Direct access not allowed!'); -class ScannersModel extends BaseModel +class ScannersModel extends GenericModel { public $type = 'scanner'; //device type diff --git a/h-source/Application/Models/SoundcardsModel.php b/h-source/Application/Models/SoundcardsModel.php index cea12be..f872427 100644 --- a/h-source/Application/Models/SoundcardsModel.php +++ b/h-source/Application/Models/SoundcardsModel.php @@ -20,7 +20,7 @@ if (!defined('EG')) die('Direct access not allowed!'); -class SoundcardsModel extends BaseModel +class SoundcardsModel extends GenericModel { public $type = 'soundcard'; //device type diff --git a/h-source/Application/Models/ThreegcardsModel.php b/h-source/Application/Models/ThreegcardsModel.php index 85dcd3e..6bde5c8 100644 --- a/h-source/Application/Models/ThreegcardsModel.php +++ b/h-source/Application/Models/ThreegcardsModel.php @@ -20,7 +20,7 @@ if (!defined('EG')) die('Direct access not allowed!'); -class ThreegcardsModel extends BaseModel +class ThreegcardsModel extends GenericModel { public $type = '3G-card'; //device type diff --git a/h-source/Application/Models/VideocardsModel.php b/h-source/Application/Models/VideocardsModel.php index bfcaa25..472931e 100644 --- a/h-source/Application/Models/VideocardsModel.php +++ b/h-source/Application/Models/VideocardsModel.php @@ -20,7 +20,7 @@ if (!defined('EG')) die('Direct access not allowed!'); -class VideocardsModel extends BaseModel +class VideocardsModel extends GenericModel { public $type = 'videocard'; //device type diff --git a/h-source/Application/Models/WebcamsModel.php b/h-source/Application/Models/WebcamsModel.php index 567bd2f..c5634ac 100644 --- a/h-source/Application/Models/WebcamsModel.php +++ b/h-source/Application/Models/WebcamsModel.php @@ -20,7 +20,7 @@ if (!defined('EG')) die('Direct access not allowed!'); -class WebcamsModel extends BaseModel +class WebcamsModel extends GenericModel { public $type = 'webcam'; //device type diff --git a/h-source/Application/Models/WifiModel.php b/h-source/Application/Models/WifiModel.php index 7be244b..729101a 100644 --- a/h-source/Application/Models/WifiModel.php +++ b/h-source/Application/Models/WifiModel.php @@ -20,7 +20,7 @@ if (!defined('EG')) die('Direct access not allowed!'); -class WifiModel extends BaseModel +class WifiModel extends GenericModel { public $type = 'wifi'; //device type diff --git a/h-source/Application/Models/WikiModel.php b/h-source/Application/Models/WikiModel.php new file mode 100644 index 0000000..1372a04 --- /dev/null +++ b/h-source/Application/Models/WikiModel.php @@ -0,0 +1,228 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class WikiModel extends Model_Map { + + public $id_user = 0; + public $lastId = 0; //the id of the last record inserted + public $lastTitle = null; //the title of the last page inserted + public $lastTitleClean = null; //the cleaned title of the last page inserted + + public $diffFields = array(); + public $fieldsWithBreaks = array(); + + public function __construct() { + $this->_tables='wiki,regusers,wiki_users'; + $this->_idFields='id_wiki,id_user'; + $this->_where=array( + 'username' => 'regusers', + 'id_user' => 'regusers', + 'has_confirmed' => 'regusers', + 'deleted' => 'regusers' + ); + + $this->printAssError = "no"; + + $this->diffFields = array( + 'title' => gtext("title"), + 'page' => gtext('wiki page'), + ); + + $this->fieldsWithBreaks = array(gtext('wiki page')); + + $this->strongConditions['insert'] = array( + "checkLength|99" => 'title', + "+checkLength|5000" => 'page', + ); + + $this->strongConditions['update'] = array( + "checkLength|99" => 'title', + "+checkLength|5000" => 'page', + ); + + parent::__construct(); + } + + public function insert() + { + $this->values['created_by'] = (int)$this->id_user; + $this->values['update_date'] = date('Y-m-d H:i:s'); + + //random ID + $randomId = md5(uniqid(mt_rand(),true)); + $this->values["title_clean"] = $randomId; + + parent::insert(); + + //associate the user to the record + if ($this->queryResult) + { + $resId = $this->select()->where(array('title_clean'=>$randomId))->send(); + $clean['id'] = $resId[0]['wiki']['id_wiki']; + $this->lastId = $clean['id']; + $this->lastTitle = $resId[0]['wiki']['title']; + $this->lastTitleClean = encodeUrl($resId[0]['wiki']['title']); + $this->db->update('wiki','title_clean',array($this->lastTitleClean),'id_wiki='.$clean['id']); + + //update the history table + $this->updateHistory('insert'); + + $this->associate($clean['id']); + } + + } + + public function update($id) + { + $clean['id'] = (int)$id; + + $this->values['update_date'] = date('Y-m-d H:i:s'); + $this->values['title_clean'] = encodeUrl($this->values['title']); + + //save the old fields in the revisions table + $this->setWhereQueryClause(array('id_wiki' => $clean['id'])); + $oldStruct = $this->getFields($this->fields.',title_clean,created_by,update_date,id_wiki'); + + if (count($oldStruct > 0)) + { + $oldValues = $oldStruct[0]['wiki']; + + $revisions = new WikirevisionsModel(); + $revisions->values = $oldValues; + if ($revisions->insert()) + { + parent::update($clean['id']); + if ($this->queryResult) + { + $this->lastId = $clean['id']; + $this->lastTitle = $this->values['title']; + $this->lastTitleClean = $this->values['title_clean']; + + //update the history table + $this->updateHistory('update'); + + if (!$this->checkAssociation($clean['id'],(int)$this->id_user)) + { + $this->associate($clean['id']); + } + } + } + } + } + + public function makeCurrent($id_rev) + { + $clean['id_rev'] = (int)$id_rev; + + $revisions = new WikirevisionsModel(); + + $clean['id_wiki'] = (int)$revisions->getIdPage($clean['id_rev']); + + //save the old fields in the revisions table + $this->where(array('id_wiki'=>$clean['id_wiki'])); + $oldStruct = $this->getFields($this->fields.',title_clean,created_by,update_date,id_wiki'); + + if (count($oldStruct > 0)) + { + //get the values of the revision + $revisions->where(array('id_rev'=>$clean['id_rev'])); + $newStruct = $revisions->getFields($this->fields.',title_clean,created_by,update_date'); + + if (count($newStruct > 0)) + { + $revisions->values = $oldStruct[0]['wiki']; + + $this->values = $newStruct[0]['wiki_revisions']; + $this->values['created_by'] = (int)$this->id_user; + $this->values['update_date'] = date('Y-m-d H:i:s'); + + if ($revisions->insert()) + { + if (parent::update($clean['id_wiki'])) + { + $this->lastId = $clean['id_wiki']; + $this->lastTitle = $this->values['title']; + $this->lastTitleClean = $this->values['title_clean']; + + //update the history table + $this->updateHistory('update'); + + if (!$this->checkAssociation($clean['id_wiki'],(int)$this->id_user)) + { + $this->associate($clean['id_wiki']); + } + } + } + } + } + + } + + public function associate($id_record) + { + return parent::associate((int)$id_record,(int)$this->id_user); + } + + //get the model name + public function getTheModelName($id) + { + $clean['id'] = (int)$id; + $this->setWhereQueryClause(array('id_wiki' => $clean['id'])); + $res = $this->getFields('title'); + $name = count($res) > 0 ? $res[0]['wiki']['title'] : ''; + return $name; + } + + //save in the history all the action carried out by users + protected function updateHistory($action) + { + $translations = array( + 'insert' => 'inserted', + 'update' => 'updated', + ); + + $allowedActions = array('insert','update'); + + if (in_array($action,$allowedActions)) + { + $users = new UsersModel(); + + $clean['user'] = sanitizeAll($users->getUser($this->id_user)); + + $history = new HistoryModel(); + $history->values = array( + 'created_by' => $this->id_user, + 'type' => 'wiki', + 'action' => $action, + 'id' => $this->lastId, + 'message' => 'The wiki page having id='.$this->lastId.' has been '.$translations[$action].' by the user ' . $clean['user'] . ' (id_user='.$this->id_user.') ', + 'gr' => 'registered', + ); + $history->insert(); + } + } + + public function getDiffArray($oldArray, $newArray) + { + return getDiffArray($this->diffFields, $oldArray, $newArray); + } +} \ No newline at end of file diff --git a/h-source/Application/Models/WikirevisionsModel.php b/h-source/Application/Models/WikirevisionsModel.php new file mode 100644 index 0000000..fdf5558 --- /dev/null +++ b/h-source/Application/Models/WikirevisionsModel.php @@ -0,0 +1,45 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class WikirevisionsModel extends Model_Tree { + + public $id_user = 0; + + public function __construct() { + $this->_tables='wiki_revisions'; + $this->_idFields='id_rev'; + + $this->orderBy = 'id_rev desc'; + + parent::__construct(); + } + + public function getIdPage($id_rev = 0) + { + $clean['id_rev'] = (int)$id_rev; + + $res = $this->db->select('wiki_revisions','id_wiki','id_rev='.$clean['id_rev']); + + return (count($res) > 0) ? $res[0]['wiki_revisions']['id_wiki'] : 0; + } + +} \ No newline at end of file diff --git a/h-source/Application/Models/WikitalkModel.php b/h-source/Application/Models/WikitalkModel.php new file mode 100644 index 0000000..2de10ba --- /dev/null +++ b/h-source/Application/Models/WikitalkModel.php @@ -0,0 +1,50 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class WikitalkModel extends Model_Tree +{ + + public function __construct() { + $this->_tables = 'wiki_talk'; + $this->_idFields = 'id_talk'; + + $this->orderBy = 'talk.id_talk'; + + $this->strongConditions['insert'] = array( + "checkLength|99" => 'title', + "+checkLength|5000" => 'message', + ); + + parent::__construct(); + } + + public $formStruct = array( + 'entries' => array( + 'title' => array(), + 'message' => array('type'=>'Textarea'), + 'id_talk' => array( + 'type' => 'Hidden' + ) + ), + ); + +} \ No newline at end of file -- cgit v1.2.3