Location: PHPKode > projects > Streber > db/class_company.inc.php
<?php if(!function_exists('startedIndexPhp')) { header("location:../index.php"); exit();}
# streber - a php5 based project management system  (c) 2005-2007  / www.streber-pm.org
# Distributed under the terms and conditions of the GPL as stated in lang/license.html

/**
 * company object
 *
 * @includedby:     *
 *
 * @author         Thomas Mann
 * @uses:           DbProjectList
 * @usedby:
 *
 */

global $g_company_fields;
$g_company_fields=array();
addProjectItemFields(&$g_company_fields);

foreach(array(
    new FieldInternal(array(    'name'=>'id',
        'default'=>0,
        'in_db_object'=>1,
        'in_db_item'=>1,
    )),
    new FieldInternal(array(    'name'=>'state',    ### cached in project-table to speed up queries ###
        'default'=>1,
        'in_db_object'=>1,
        'in_db_item'=>1,
    )),
    new FieldString(array(
        'name'=>'name',
        'title'=>__('Name'),
        'tooltip'=>__('Required. (e.g. pixtur ag)'),
        'log_changes'=>true,
    )),
    new FieldString(array(
        'name'=>'short',
        'title'=>__('Short','form field for company'),
        'tooltip'=>__('Optional: Short name shown in lists (eg. pixtur)'),
        'log_changes'=>true,
    )),
    new FieldString(array(
        'name'=>'tagline',
        'title'=>__('Tag line','form field for company'),
        'tooltip'=>__('Optional: Additional tagline (eg. multimedia concepts)'),
        'log_changes'=>true,
    )),
    new FieldString(array(
        'name'=>'phone',
        'title'=>__('Phone','form field for company'),
        'tooltip'=>__('Optional: Phone (eg. +49-30-12345678)'),
        'log_changes'=>true,
    )),
    new FieldString(array(
        'name'=>'fax',
        'title'=>__('Fax','form field for company'),
        'tooltip'=>__('Optional: Fax (eg. +49-30-12345678)'),
        'log_changes'=>true,
    )),
    new FieldString(array(
        'name'=>'street',
        'title'=>__('Street'),
        'tooltip'=>__('Optional: (eg. Poststreet 28)'),
        'log_changes'=>true,
    )),
    new FieldString(array(
        'name'=>'zipcode',
        'title'=>__('Zipcode'),
        'tooltip'=>__('Optional: (eg. 12345 Berlin)'),
        'log_changes'=>true,
    )),
    new FieldString(array(
        'name'=>'homepage',
        'title'=>__('Website'),
        'tooltip'=>__('Optional: (eg. http://www.pixtur.de)'),
        'log_changes'=>true,
    )),
    new FieldString(array(
        'name'=>'intranet',
        'title'=>__('Intranet'),
        'tooltip'=>__('Optional: (eg. http://www.pixtur.de/login.php?name=someone)'),
        'log_changes'=>true,
    )),
    new FieldString(array(
        'name'=>'email',
        'title'=>__('E-Mail'),
        'tooltip'=>__('Optional: (eg. http://www.pixtur.de/login.php?name=someone)'),
        'log_changes'=>true,
    )),
    new FieldText(array(
        'name'=>'comments',
        'title'=>__('Comments','form label for company'),
        'tooltip'=>__('Optional'),
        'log_changes'=>true,
    )),
	### company category ###
	new FieldInternal(array(
		'name'=>'category',
		'view_in_forms' =>false,
		'default'=>0,
		'log_changes'=>true,
	)),
) as $f) {
    $g_company_fields[$f->name]=$f;
}





class Company extends DbProjectItem
{

	//=== constructor ================================================
	function __construct ($id_or_array=NULL)
    {
        global $g_company_fields;
        $this->fields= &$g_company_fields;

        parent::__construct($id_or_array);
        if(!$this->type) {
            $this->type= ITEM_COMPANY;
        }
   	}

    #------------------------------------------------------------
    # returns link to company-view with short name
    #------------------------------------------------------------
    public function getLink($show_long=false)
    {
        global $PH;
        if($show_long) {
            $out= '<span class="item company">'. $PH->getLink('companyView',$this->name, array('company'=>$this->id)).'</span>';
        }
        else {
            $out= '<span class="item company">'. $PH->getLink('companyView',$this->getShortWithTitle(),array('company'=>$this->id),'item company',true).'</span>';
        }
        return $out;
    }


    /**
    * query from db
    *
    * - returns NULL if failed
    */
    static function getById($id)
    {
        $c= new Company(intval($id));
        if($c->id) {
            return $c;
        }
        return NULL;
    }


    /**
    * query if visible for current user
    *
    * - returns NULL if failed
    * - this function is a double of validateView. Fix this
    */
    static function getVisibleById($id)
    {

        $companies= Company::getAll(array(
				    'order_str'=>NULL,
					'has_id'=>intval($id)));

        if(count($companies) == 1) {
            if($companies[0]->id) {
                return $companies[0];
            }
        }
        return NULL;
    }

    /**
    * query if editable for current user
    */
    static function getEditableById($id)
    {
        global $auth;
    	if(
    		$auth->cur_user->user_rights & RIGHT_COMPANY_EDIT
    	) {
            return Company::getById(intval($id));
        }
        return NULL;
    }


    static function queryFromDb($query_string)
	{
        $dbh = new DB_Mysql;

        $sth= $dbh->prepare($query_string);

    	$sth->execute("",1);
    	$tmp=$sth->fetchall_assoc();
    	$companies=array();
        foreach($tmp as $t) {
            $company=new Company($t);
            $companies[]=$company;
        }
        return $companies;
    }


    #------------------------------------------------------------
    # get companies from db --> old function
    #------------------------------------------------------------
    /*public static function getAll($order_str=NULL, $has_id=NULL, $search=NULL)
    {
        global $auth;
		$prefix = confGet('DB_TABLE_PREFIX');

        $has_id= intval($has_id);

        $str_has_id= $has_id
                ? ('AND c.id='.intval($has_id))
                : '';

        if($search) {
            $search= asMatchString($search);
            $AND_match= "AND (MATCH (c.name) AGAINST ('".asCleanString($search). "*') or MATCH (c.comments) AGAINST ('".asCleanString($search)."*'  IN BOOLEAN MODE))";
        }
        else {
            $AND_match= '';
        }

        ### show all ###
        if($auth->cur_user->user_rights & RIGHT_VIEWALL) {
            $str=
                "SELECT c.*, ic.* from {$prefix}company c, {$prefix}item ic
                WHERE
                      c.state = 1
                      $str_has_id
                      AND c.id = ic.id
                      $AND_match"
                . getOrderByString($order_str, 'c.name');
        }

        ### only related companies ###
        else {
               $str= "SELECT DISTINCT c.*, ic.* from {$prefix}company c, {$prefix}project p, {$prefix}projectperson upp, {$prefix}item ic
                 WHERE
                        upp.person = {$auth->cur_user->id}
                    AND upp.state = 1   /*      /* upp all user projectpersons */

                    /*AND  upp.project = p.id*/  /* all user projects */
                     /*AND  p.company = c.id*/    /* all companies */
                      /* AND  c.state = 1
                       $str_has_id
                         AND c.id = ic.id


                      $AND_match

                ". getOrderByString($order_str, 'c.name');
        }
  	    $companies = self::queryFromDb($str);               # store in variable to return by reference
  	    return $companies;
    }*/

	#------------------------------------------------------------
    # get specific companies from db
    #------------------------------------------------------------
	public static function getAll($args=NULL)
	{
		global $auth;
		$prefix = confGet('DB_TABLE_PREFIX');

		### default parameter ###
		$order_str=NULL;
		$has_id=NULL;
		$search=NULL;
		$visible_only = NULL;
		#$comcat=NULL;
		$ccategory_min = CCATEGORY_UNDEFINED;
		$ccategory_max = CCATEGORY_PARTNER;

		### filter parameter ###
        if($args) {
            foreach($args as $key=>$value) {
                if(!isset($$key) && !is_null($$key) && !$$key==="") {
                    trigger_error("unknown parameter",E_USER_NOTICE);
                }
                else {
                    $$key= $value;
                }
            }
        }

		$str_has_id= $has_id
                ? ('AND c.id='.intval($has_id))
                : '';

        if($search) {
            $search= asMatchString($search);
            $AND_match= "AND (MATCH (c.name) AGAINST ('".asCleanString($search). "*') or MATCH (c.comments) AGAINST ('".asCleanString($search)."*'  IN BOOLEAN MODE))";
        }
        else {
            $AND_match= '';
        }

		/*if(is_null($comcat))
		{
			$str_comcat = '';
		}
		else
		{
			$str_comcat = 'AND c.category=' .intval($comcat);
		}*/
		
		if(!is_null($ccategory_min) && !is_null($ccategory_max)){
			$str_ccategory = "AND (c.category BETWEEN " . $ccategory_min . " AND " . $ccategory_max . ")";
		}
		else{
			$str_ccategory = '';
		}

		### show all ###
        if($auth->cur_user->user_rights & RIGHT_COMPANY_VIEWALL) {
            $str=
                "SELECT c.*, ic.* from {$prefix}company c, {$prefix}item ic
                WHERE
                      c.state = 1
                      $str_has_id
                      AND c.id = ic.id
                      $AND_match
					  $str_ccategory "
                . getOrderByString($order_str, 'c.name');
        }

        ### only related companies ###
        else {
               $str= "SELECT DISTINCT c.*, ic.* from {$prefix}company c, {$prefix}project p, {$prefix}projectperson upp, {$prefix}item ic
                 WHERE
                        upp.person = {$auth->cur_user->id}
                    AND upp.state = 1         /* upp all user projectpersons */

                    AND  upp.project = p.id  /* all user projects */
                       AND  p.company = c.id    /* all companies */
                       AND  c.state = 1
                       $str_has_id
                         AND c.id = ic.id


                      $AND_match
					  $str_ccategory "
                . getOrderByString($order_str, 'c.name');
        }


  	    $companies = self::queryFromDb($str);               # store in variable to return by reference
  	   
		return $companies;

	}

	/*public static function getCompanies($order_str=NULL, $has_id=NULL, $search=NULL, $comcat=NULL)
    {
        global $auth;
		$prefix = confGet('DB_TABLE_PREFIX');

        $has_id= intval($has_id);

        $str_has_id= $has_id
                ? ('AND c.id='.intval($has_id))
                : '';

        if($search) {
            $search= asMatchString($search);
            $AND_match= "AND (MATCH (c.name) AGAINST ('".asCleanString($search). "*') or MATCH (c.comments) AGAINST ('".asCleanString($search)."*'  IN BOOLEAN MODE))";
        }
        else {
            $AND_match= '';
        }

		if(is_null($comcat))
		{
			$str_comcat = '';
		}
		else
		{
			$str_comcat = 'AND c.category=' .intval($comcat);
		}

        ### show all ###
        if($auth->cur_user->user_rights & RIGHT_VIEWALL) {
            $str=
                "SELECT c.*, ic.* from {$prefix}company c, {$prefix}item ic
                WHERE
                      c.state = 1
                      $str_has_id
                      AND c.id = ic.id
                      $AND_match
					  $str_comcat "
                . getOrderByString($order_str, 'c.name');
        }

        ### only related companies ###
        else {
               $str= "SELECT DISTINCT c.*, ic.* from {$prefix}company c, {$prefix}project p, {$prefix}projectperson upp, {$prefix}item ic
                 WHERE
                        upp.person = {$auth->cur_user->id}
                    AND upp.state = 1   */      /*upp all user projectpersons */

                    /*AND  upp.project = p.id*/  /* all user projects */
                    /*   AND  p.company = c.id*/    /* all companies */
                    /*   AND  c.state = 1
                       $str_has_id
                         AND c.id = ic.id


                      $AND_match
					  $str_comcat "
                . getOrderByString($order_str, 'c.name');
        }


  	    $companies = self::queryFromDb($str);               # store in variable to return by reference
  	    return $companies;
    }*/

    #---------------------------
    # get nume tasks
    #---------------------------
    function getNumOpenProjects()
	{
		$prefix= confGet('DB_TABLE_PREFIX');
        $dbh = new DB_Mysql;
        $AND_status_min= "AND status >= ".STATUS_NEW;
        $AND_status_max= "AND status <= ".STATUS_OPEN;
        $sth= $dbh->prepare("
            SELECT
            COUNT(*)
            FROM {$prefix}project
            WHERE company = \"$this->id\"
              AND state=1
              $AND_status_min
              $AND_status_max
              "

              );
    	$sth->execute("",1);
    	$tmp=$sth->fetchall_assoc();
        return $tmp[0]['COUNT(*)'];
    }

    #---------------------------
    # get projects of company
    #---------------------------
    function getProjects($f_order_by=NULL, $f_status_min=1, $f_status_max=4)
    {
        global $auth;
		$prefix= confGet('DB_TABLE_PREFIX');

        $status_min= intval($f_status_min);
        $status_max= intval($f_status_max);

       #"SELECT * FROM {$prefix}project WHERE company = \"$this->id\" AND state=1 ORDER BY name"

        ### all projects ###
        if($auth->cur_user->user_rights & RIGHT_PROJECT_ASSIGN) {
            $str=
                "SELECT p.* from {$prefix}project p
                WHERE
                       p.status <= $status_max
                   AND p.status >= $status_min
                   AND p.company =  $this->id
                   AND p.state = 1

                ". getOrderByString($f_order_by,'name');
        }

        ### only assigned projects ###
        else {
            $str=
                "SELECT p.* from {$prefix}project p, {$prefix}projectperson upp
                WHERE
                        upp.person = {$auth->cur_user->id}
                    AND upp.state = 1       /* all projectpersons of user */


                    AND   p.id  = upp.project       /* all projects of user */
                    AND   p.company = $this->id     /* all project of this company */
                    AND   p.status <= $status_max
                    AND   p.status >= $status_min
                    AND   p.state = 1

                ". getOrderByString($f_order_by, 'name');
        }

        $dbh = new DB_Mysql;
        $sth= $dbh->prepare($str);


    	$sth->execute("",1);
    	$tmp=$sth->fetchall_assoc();
        $projects=array();
        foreach($tmp as $t) {
            $projects[]=new Project($t);
        }
        return $projects;
    }

    #---------------------------
    # get Employments
    #---------------------------
    function getEmployments()
    {
		$prefix= confGet('DB_TABLE_PREFIX');
        require_once(confGet('DIR_STREBER') . 'db/class_employment.inc.php');

        $dbh = new DB_Mysql;
        $sth= $dbh->prepare(
            "SELECT em.* FROM {$prefix}employment em, {$prefix}item i
              WHERE  i.type= ".ITEM_EMPLOYMENT."
              AND    i.state=1
              AND   i.id = em.id
              AND   em.company = $this->id
              "
        );
    	$sth->execute("",1);
    	$tmp=$sth->fetchall_assoc();
        $es=array();
        foreach($tmp as $t) {
            $es[]=new Employment($t);
        }
        return $es;
    }

    /**
    * get Persons working for company
    *
    * @@@ visibilities-validation is REALLY slow
    */
    function getPersons()
    {
		$prefix= confGet('DB_TABLE_PREFIX');
        require_once(confGet('DIR_STREBER') . 'db/class_person.inc.php');
        require_once(confGet('DIR_STREBER') . 'db/class_employment.inc.php');
        $dbh = new DB_Mysql;
        $sth= $dbh->prepare(
						"SELECT p.* FROM {$prefix}person p,{$prefix}employment em, {$prefix}item i
						WHERE   i.type= ".ITEM_EMPLOYMENT."
						AND     i.state=1
						AND     i.id= em.id
						AND     em.company = \"$this->id\"
						AND     em.person= p.id
						AND     p.state=1"
		);
		
    	$sth->execute("",1);
    	$tmp=$sth->fetchall_assoc();
        $es=array();

        foreach($tmp as $t) {
            if($person = Person::getVisibleById($t['id'])) {
               $es[]=$person;
            }
        }
		
        return $es;
    }



    #---------------------------
    # get PersonLinks
    #---------------------------
    function getPersonLinks($show_max_number=3)
    {
        $ps= $this->getPersons();
        $buffer= '';
        $sep= '';
        $num=0;
        foreach($ps as $p) {
            $buffer.= $sep.$p->getLink();
            if(++$num > $show_max_number) {
                break;
            }
            $sep=", ";
        }
        return $buffer;
    }

    #---------------------------
    # is company visible to user?
    #---------------------------
    function validateView()
    {
        global $auth;
        global $PH;
		$prefix= confGet('DB_TABLE_PREFIX');

        ### all ###
        if($auth->cur_user->user_rights & RIGHT_VIEWALL) {
            return true;
        }
        
        ### all companies ###
        if($auth->cur_user->user_rights & RIGHT_COMPANY_VIEWALL) {
            return true;
        }


           $str= "SELECT COUNT(*) from {$prefix}company c, {$prefix}project p, {$prefix}projectperson upp
             WHERE
                    upp.person = {$auth->cur_user->id}
                AND upp.state = 1         /* upp all user projectpersons */

                AND  p.id = upp.project   /* all user projects */
                AND  c.id = p.company     /* all companies */
                AND  c.id = $this->id
                AND  c.state = 1
            ";

        $dbh = new DB_Mysql;
        $sth= $dbh->prepare($str);
    	$sth->execute("",1);
    	$tmp=$sth->fetchall_assoc();

        $count= $tmp[0]['COUNT(*)'];

        if($count == 1) {
            return true;
        }
        else if($count > 1) {
            $PH->abortWarning(__("not available"),ERROR_RIGHTS);
        }
        else{
            $PH->abortWarning(__("not available"),ERROR_RIGHTS);
        }
    }




}




?>
Return current item: Streber