Unit.inc 8.69 KB
<?php
/**
* Class Unit
* Represents a unit as per the database table units
*
* @author Mukhtar Dharsey
* @date 28 January 2003
* @package lib.unitmanagement
*/

class Unit {

    /** object's primary key */
    var $iId;
    /** unit's name */
    var $sName;


    function Unit($sNewName) {
        //object has not been created in database yet
        $this->iId = -1;
        $this->sName = $sNewName;
    }

    /**
    * Get the object's primary key
    *
    * @return int object's primary key
    *
    */
    function getID() {
        return $this->iId;
    }

    /**
    * Get the unit's name
    *
    * @return String unit's name
    *
    */
    function getName() {
        return $this->sName;
    }

    /**
    * Set the unit's name
    *
    * @param  String  Unit's name
    *
    */
    function setName($sNewValue) {
        $this->sName = $sNewValue;
    }


    /**
    * Create the current object in the database
    *
    * @return boolean on successful store, false otherwise and set $_SESSION["errorMessage"]
    *
    */
    function create() {
        global $default, $lang_err_database, $lang_err_object_exists;
        //if the object hasn't been created
        if ($this->iId < 0) { //check to see if name exsits
            $sql = $default->db;
            $query = "SELECT name FROM ". $default->owl_units_table ." WHERE name = '" . $this->sName . "'";
            $sql->query($query);
            $rows = $sql->num_rows($sql);

            if ($rows > 0) {
                // duplicate unit name
                $_SESSION["errorMessage"] = "Unit::The name " . $this->sName . " is already in use!";
                return false;
            } else {
                $result = $sql->query("INSERT INTO " . $default->owl_units_table . " (name) VALUES ('" . addslashes($this->sName) . "')");
                if ($result) {
                    $this->iId = $sql->insert_id();
                    // create a new unit root folder
                    // FIXME: lookup the organisation for this unit and use the appropriate folder id for the org root folder
                    $oFolder = new Folder($this->sName, $this->sName . " Unit Root Folder", 1, $_SESSION["userID"], $this->iId);
                    if ($oFolder->create()) {
                        return true;
                    } else {
                        return false;
                    }
                }
                $_SESSION["errorMessage"] = $lang_err_database;
                return false;
            }
        }
        $_SESSION["errorMessage"] = $lang_err_object_exists . "id = " . $this->iId . " table = $default->owl_units_table";
        return false;
    }

    /**
    * Update the values in the database table with the object's current values
    *
    * @return boolean true on successful update, false otherwise and set $_SESSION["errorMessage"]
    *
    */
    function update() {
        global $default, $lang_err_database, $lang_err_object_key;
        //only update if the object has been stored
        if ($this->iId > 0) {
            $sql = $default->db;
            // lookup current name before updating
            $sOldName = lookupField($default->owl_units_table, "name", "id", $this->iId);
            $result = $sql->query("UPDATE " . $default->owl_units_table . " SET name = '" . addslashes($this->sName) . "' WHERE id = $this->iId");
            if ($result) {
                // need to update the units root folder also
                $iFolderID = Folder::getFolderID($sOldName);
                // lookup the folder with the old unit name
                $oFolder = Folder::get($iFolderID);
		        // folder name has changed, update the full_path
				$sOldPath = $default->documentRoot . "/" . $oFolder->getFullPath() . "/" . $oFolder->getName();
                // update the folder name
                $oFolder->setName($this->sName);
                $oFolder->setDescription($this->sName . " Unit Root Folder");
                $sNewPath = $default->documentRoot . "/" . $oFolder->getFullPath() . "/" . $oFolder->getName();
                if ($oFolder->update(true)) {
                    if (!PhysicalFolderManagement::renameFolder($sOldPath, $sNewPath)) {
                        //reverse the database changes if the physical rename failed
                        $oFolder->setName($sOldName);
                        $oFolder->update(true);
                        return false;
                    }
                }
                return true;
            }
            $_SESSION["errorMessage"] = $lang_err_database;
            return false;
        }
        $_SESSION["errorMessage"] = $lang_err_object_key;
        return false;
    }

    /**
    * Delete the current object from the database
    *
    * @return boolean true on successful deletion, false otherwise and set $_SESSION["errorMessage"]
    *
    */
    function delete() {
        global $default, $lang_err_database, $lang_err_object_key;
        //only delete the object if it exists in the database

        if ($this->iId >= 0) {
            //check to see if group is linked to a unit
            $sql = $default->db;
            $query = "SELECT unit_id FROM ". $default->owl_groups_units_table ." WHERE unit_id = '" . $this->iId . "'";
            $sql->query($query);
            $rows = $sql->num_rows($sql);



            if ($rows > 0) {
                // duplicate link exists
                $_SESSION["errorMessage"] = "Group::The Group " . $this->sName . " exits!";
                return false;

            } else {
                $sql = $default->db;
                $result = $sql->query("DELETE FROM $default->owl_units_table WHERE id = $this->iId");
                if ($result) {
                    return true;
                }
                $_SESSION["errorMessage"] = $lang_err_database;
                return false;
            }
        }
        $_SESSION["errorMessage"] = $lang_err_object_key;
        return false;
    }

    /**
    * Static function.
    * Given a web_documents primary key it will create a 
    * Unit object and populate it with the 
    * corresponding database values
    *
    * @return Unit populated Unit object on successful query, false otherwise and set $_SESSION["errorMessage"]
    */
    function & get($iUnitID) {
        global $default;
        $sql = $default->db;
        $result = $sql->query("SELECT * FROM $default->owl_units_table WHERE id = $iUnitID");
        if ($result) {
            if ($sql->next_record()) {
                $oUnit = & new Unit(stripslashes($sql->f("name")));
                $oUnit->iId = $iUnitID;
                return $oUnit;
            }
            $_SESSION["errorMessage"] = $lang_err_object_not_exist . "id = " . $iUnitID . " table = $default->owl_units_table";
            return false;
        }
        $_SESSION["errorMessage"] = $lang_err_database;
        return false;
    }

    /**
     * static function
     *
     * gets the id of a unit using their name
     *
     * @param   String  The unit name
     */
    function getUnitID($name) {
        global $default;
        $id = lookupID($default->owl_units_table, "name",  $name);
        $this->iId= $id;
    }

    /**
     * static function
     *
     * gets the name of a unit using their id
     *
     * @param   String The name
     *   
     */
    function getUnitName($id) {
        global $default;
        $name = lookupField("$default->owl_units_table", "name", "id", $id );
        $this->sName= $name;
    }

    /**
    * Static function
    * Get a list of web documents
    *
    * @param  String  Where clause (not required)
    *
    * @return Array array of Unit objects, false otherwise and set $_SESSION["errorMessage"]
    */
    function getList($sWhereClause = null) {
        global $default, $lang_err_database;
        $aUnitArray;
        settype($aUnitArray, "array");
        $sql = $default->db;
        $result = $sql->query("SELECT * FROM " . $default->owl_units_table  . (isset($sWhereClause) ? " " . $sWhereClause : ""));
        if ($result) {
            $iCount = 0;
            while ($sql->next_record()) {
                $oUnit = & Unit::get($sql->f("id"));
                $aUnitArray[$iCount] = $oUnit;
                $iCount++;
            }
            return $aUnitArray;
        }
        $_SESSION["errorMessage"] = $lang_err_database;
        return false;
    }

}
/**
* Static function
*
* Creates a unit object from an array
*
* @param  Array  Array of parameters.  Must match order of parameters in constructor
*
* @return User user object
*/
function & unitCreateFromArray($aParameters) {
    $oUnit = & new Unit($aParameters[0], $aParameters[1], $aParameters[2], $aParameters[3], $aParameters[4], $aParameters[5], $aParameters[6], $aParameters[7], $aParameters[8], $aParameters[9], $aParameters[10]);
    return $oUnit;
}
?>