From ff96e6db5eaf6f643dc0ca8a1a63e418008cf1f9 Mon Sep 17 00:00:00 2001 From: Quitta Date: Sat, 6 Jul 2013 06:09:47 +0200 Subject: [PATCH] Added ticket class | added ticket_user class| added ticket_category class. These aren't tested yet, so expect errors and changes! :D --HG-- branch : quitta-gsoc-2013 --- .../ryzom_ams/ams_lib/autoload/ticket.php | 89 ++++++++++++++++ .../ams_lib/autoload/ticket_category.php | 70 ++++++++++++ .../ams_lib/autoload/ticket_user.php | 100 ++++++++++++++++++ .../server/ryzom_ams/www/html/sql/install.php | 15 +-- .../ryzom_ams/www/html/sql/ticketsql.sql | 12 +-- .../www/html/sql/ticketsystemmodel.mwb | Bin 12386 -> 12381 bytes 6 files changed, 273 insertions(+), 13 deletions(-) create mode 100644 code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php create mode 100644 code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_category.php create mode 100644 code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_user.php diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php new file mode 100644 index 000000000..ff2412b16 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php @@ -0,0 +1,89 @@ +db = $db_data; + } + + + //Set ticket object + public function setTicket($ts,$t,$s,$q,$t_c,$a){ + $this->timestamp = $ts; + $this->title = $t; + $this->status = $s; + $this->queue = $q; + $this->ticket_category = $t_c; + $this->author = $a; + } + + //create ticket by writing private data to DB. + public function create(){ + $dbl = new DBLayer($this->db); + $query = "INSERT INTO ticket (Timestamp, Title, Status, Queue, Ticket_Category, Author) VALUES (:timestamp, :title, :status, :queue, :tcat, :author)"; + $values = Array('timestamp' => $this->timestamp, 'title' => $this->title, 'status' => $this->status, 'queue' => $this->queue, 'tcat' => $this->ticket_category, 'author' => $this->author); + $dbl->execute($query, $values); + } + + //return constructed element based on TId + public function load_With_TId( $id) { + $dbl = new DBLayer($this->db); + $statement = $dbl->execute("SELECT * FROM ticket WHERE TId=:id", array('id' => $id)); + $row = $statement->fetch(); + $this->tId = $row['TId']; + $this->timestamp = $row['Timestamp']; + $this->title = $row['Title']; + $this->status = $row['Status']; + $this->queue = $row['Queue']; + $this->ticket_category = $row['Ticket_Category']; + $this->author = $row['Author']; + } + + + //update private data to DB. + public function update(){ + $dbl = new DBLayer($this->db); + $query = "UPDATE ticket SET Timestamp = :timestamp, Title = :title, Status = :status, Queue = :queue, Ticket_Category = :tcat, Author = :author WHERE TId=:id"; + $values = Array('id' => $this->tId, 'timestamp' => $this->timestamp, 'title' => $this->title, 'status' => $this->status, 'queue' => $this->queue, 'tcat' => $this->ticket_category, 'author' => $this->author); + $statement = $dbl->execute($query, $values); + } + + //Getters + public function getPermission(){ + return $this->permission; + } + + + public function getExternId(){ + return $this->externId; + } + + + public function getTUserId(){ + return $this->tUserId; + } + + //setters + public function setPermission($perm){ + $this->permission = $perm; + } + + + public function setExternId($id){ + $this->externId = $id; + } + + + public function setTUserId($id){ + $this->tUserId = $id; + } +} \ No newline at end of file diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_category.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_category.php new file mode 100644 index 000000000..2de93a867 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_category.php @@ -0,0 +1,70 @@ +db = $db_data; + } + + + //Creates a ticket_Catergory in the DB + public static function createTicketCategory( $name ,$db ) { + $dbl = new DBLayer($db); + $query = "INSERT INTO ticket_category (Name) VALUES (:name)"; + $values = Array('name' => $name); + $dbl->execute($query, $values); + + } + + + //return constructed element based on TCategoryId + public static function constr_TCategoryId( $id, $db_data) { + $instance = new self($db_data); + $instance->setTCategoryId($id); + return $instance; + + } + + //return constructed element based on TCategoryId + public function load_With_TCategoryId( $id) { + $dbl = new DBLayer($this->db); + $statement = $dbl->execute("SELECT * FROM ticket_category WHERE TCategoryId=:id", array('id' => $id)); + $row = $statement->fetch(); + $instance->tCategoryId = $row['TCategoryId']; + $instance->name = $row['Name']; + return $instance; + } + + //update private data to DB. + public function update(){ + $dbl = new DBLayer($this->db); + $query = "UPDATE ticket_category SET Name = :name WHERE TCategoryId=:id"; + $values = Array('id' => $this->tCategoryId, 'name' => $this->name); + $statement = $dbl->execute($query, $values); + } + + //Getters + public function getName(){ + if ($this->name == ""){ + $this->load_With_TCategoryId($this->tCategoryId); + } + return $this->name; + } + + + public function getTCategoryId(){ + return $this->tCategoryId; + } + + + //setters + public function setName($n){ + $this->name = $n; + } + + +} \ No newline at end of file diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_user.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_user.php new file mode 100644 index 000000000..544f047b9 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_user.php @@ -0,0 +1,100 @@ +db = $db_data; + } + + + //Creates a ticket_user in the DB + public static function createTicketUser( $extern_id, $permission,$db ) { + $dbl = new DBLayer($db); + $query = "INSERT INTO ticket_user (Permission, ExternId) VALUES (:perm, :ext_id)"; + $values = Array('perm' => $permission, 'ext_id' => $extern_id); + $dbl->execute($query, $values); + + } + + + //return constructed element based on TUserId + public static function constr_TUserId( $id, $db_data) { + $instance = new self($db_data); + $instance->setTUserId($id); + return $instance; + + } + + //return constructed element based on TUserId + public function load_With_TUserId( $id) { + $dbl = new DBLayer($this->db); + $statement = $dbl->execute("SELECT * FROM ticket_user WHERE TUserId=:id", array('id' => $id)); + $row = $statement->fetch(); + $instance->tUserId = $row['TUserId']; + $instance->permission = $row['Permission']; + $instance->externId = $row['ExternId']; + return $instance; + } + + + //return constructed element based on ExternId + public static function constr_ExternId( $id, $db_data ) { + $instance = new self($db_data); + $dbl = new DBLayer($this->db); + $statement = $dbl->execute("SELECT * FROM ticket_user WHERE ExternId=:id", array('id' => $id)); + $row = $statement->fetch(); + $instance->tUserId = $row['TUserId']; + $instance->permission = $row['Permission']; + $instance->externId = $row['ExternId']; + return $instance; + + } + + + //update private data to DB. + public function update(){ + $dbl = new DBLayer($this->db); + $query = "UPDATE ticket_user SET Permission = :perm, ExternId = :ext_id WHERE TUserId=:id"; + $values = Array('id' => $this->tUserId, 'perm' => $this->permission, 'ext_id' => $this->externId); + $statement = $dbl->execute($query, $values); + } + + //Getters + public function getPermission(){ + if ($this->permission == ""){ + $this->load_With_TUserId($this->tUserId); + } + return $this->permission; + } + + + public function getExternId(){ + if ($this->ExternId == ""){ + $this->load_With_TUserId($this->tUserId); + } + return $this->externId; + } + + + public function getTUserId(){ + return $this->tUserId; + } + + + //setters + public function setPermission($perm){ + $this->permission = $perm; + } + + + public function setExternId($id){ + $this->externId = $id; + } + +} \ No newline at end of file diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php b/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php index a20bdc20a..e233bb322 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php @@ -58,17 +58,17 @@ ENGINE = InnoDB; INSERT IGNORE INTO `" . $cfg['db']['lib']['name'] ."`.`ticket_category` (`Name`) VALUES ('Hacking'),('Ingame-Bug'),('Website-Bug'),('Installation'); - + -- ----------------------------------------------------- -- Table `" . $cfg['db']['lib']['name'] ."`.`ticket_user` -- ----------------------------------------------------- DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`ticket_user` ; CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`ticket_user` ( - `UId` INT(10) NOT NULL AUTO_INCREMENT , + `TUserId` INT(10) NOT NULL AUTO_INCREMENT , `Permission` INT(3) NOT NULL DEFAULT 1 , - `Extern_Id` INT(10) NOT NULL , - PRIMARY KEY (`UId`) ) + `ExternId` INT(10) NOT NULL , + PRIMARY KEY (`TUserId`) ) ENGINE = InnoDB; @@ -95,7 +95,7 @@ ON UPDATE NO ACTION, CONSTRAINT `fk_ticket_ams_user` FOREIGN KEY (`Author` ) - REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket_user` (`UId` ) + REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket_user` (`TUserId` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -119,7 +119,7 @@ ON UPDATE NO ACTION, CONSTRAINT `fk_assigned_ams_user` FOREIGN KEY (`User` ) - REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket_user` (`UId` ) + REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket_user` (`TUserId` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -196,7 +196,7 @@ ON UPDATE NO ACTION, CONSTRAINT `fk_ticket_reply_ams_user` FOREIGN KEY (`Author` ) - REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket_user` (`UId` ) + REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket_user` (`TUserId` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_ticket_reply_ticket_content` @@ -244,6 +244,7 @@ ENGINE = InnoDB; + "; $dbl->executeWithoutParams($sql); print "The Lib & Web database were correctly installed!
"; diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsql.sql b/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsql.sql index 67b5112ec..0f22a9741 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsql.sql +++ b/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsql.sql @@ -24,10 +24,10 @@ ENGINE = InnoDB; DROP TABLE IF EXISTS `mydb`.`ticket_user` ; CREATE TABLE IF NOT EXISTS `mydb`.`ticket_user` ( - `UId` INT(10) NOT NULL AUTO_INCREMENT , + `TUserId` INT(10) NOT NULL AUTO_INCREMENT , `Permission` INT(3) NOT NULL DEFAULT 1 , - `Extern_Id` INT(10) NOT NULL, - PRIMARY KEY (`UId`) ) + `ExternId` INT(10) NOT NULL , + PRIMARY KEY (`TUserId`) ) ENGINE = InnoDB; @@ -54,7 +54,7 @@ CREATE TABLE IF NOT EXISTS `mydb`.`ticket` ( ON UPDATE NO ACTION, CONSTRAINT `fk_ticket_ams_user` FOREIGN KEY (`Author` ) - REFERENCES `mydb`.`ticket_user` (`UId` ) + REFERENCES `mydb`.`ticket_user` (`TUserId` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -78,7 +78,7 @@ CREATE TABLE IF NOT EXISTS `mydb`.`assigned` ( ON UPDATE NO ACTION, CONSTRAINT `fk_assigned_ams_user` FOREIGN KEY (`User` ) - REFERENCES `mydb`.`ticket_user` (`UId` ) + REFERENCES `mydb`.`ticket_user` (`TUserId` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -155,7 +155,7 @@ CREATE TABLE IF NOT EXISTS `mydb`.`ticket_reply` ( ON UPDATE NO ACTION, CONSTRAINT `fk_ticket_reply_ams_user` FOREIGN KEY (`Author` ) - REFERENCES `mydb`.`ticket_user` (`UId` ) + REFERENCES `mydb`.`ticket_user` (`TUserId` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_ticket_reply_ticket_content` diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsystemmodel.mwb b/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsystemmodel.mwb index ba70ad4b2b5cbb526948168fb985efbcdda97782..53f58f0371074bb0e1fc828a87e13229d3ac9720 100644 GIT binary patch delta 10721 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%0ABY@g{>S~j6>q$1e`D_ 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 Tlj<)q0mhRYFdhMXlRGdcDF*D& delta 10707 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