bos =& $Dippler->backoffice;
		if ($identifier) {
		    $this->id = $identifier;
		}
    }
    public function setUserId($user_id) {
        $this->user_id = $user_id;
    }
    
    public function save() {
        return $this->bos->saveProfile($this->dataXML());
	}
    public function load() {      
        $loader = $this->bos->loadProfile($this->idXML());
        if ($loader) {
            $this->type = "profile";
            $this->id = $loader->id[0][0];
            $this->firstname = $loader->firstname[0][0];
            $this->lastname = $loader->lastname[0][0];
			$this->email = $loader->email[0][0];
            $this->user_id = $loader->user_id[0][0];
			if (isset($loader->description[0][0])) {
				$this->description = $loader->description[0][0];
			}
			if (isset($loader->homepage[0][0])) {
				$this->homepage = $loader->homepage[0][0];
			}
			if (isset($loader->twitter[0][0])) {
				$this->twitter = $loader->twitter[0][0];
			}
			if (isset($loader->delicious[0][0])) {
				$this->delicious = $loader->delicious[0][0];
			}
			if (isset($loader->mendeley[0][0])) {
				$this->mendeley = $loader->mendeley[0][0];
			}
			if (isset($loader->skype[0][0])) {
				$this->skype = $loader->skype[0][0];
			}
			if (isset($loader->msn[0][0])) {
				$this->msn = $loader->msn[0][0];
			}
            if (isset($loader->blogurl[0][0])) {
                $this->blogurl = $loader->blogurl[0][0];
            }
            if (isset($loader->department[0][0])) {
                $this->department = $loader->department[0][0];
            }
			if (isset($loader->curriculum[0][0]) && ($loader->curriculum[0][0] != 'null')) {
				$this->curriculum = $loader->curriculum[0][0];
			}
			if (isset($loader->university[0][0]) && ($loader->university[0][0] != 'null')) {
				$this->university = $loader->university[0][0];
			}
			if (isset($loader->institute[0][0]) && ($loader->institute[0][0] != 'null')) {
				$this->institute = $loader->institute[0][0];
			}
            if (isset($loader->approved[0][0])) {
				$this->approved = $loader->approved[0][0];
			}
        }
    }
    
	public function getURL() {
		$user = $this->getOwnerEntity();
        return WWW_ROOT."profile/view/{$user->id}";
	}
	public function getAvatarURL($size=54) {
		$default = WWW_ROOT."views/graphics/user.png";
		return "http://www.gravatar.com/avatar/".md5(strtolower(trim($this->email)))."?d=".urlencode($default)."&s={$size}";
	}
    public function getType() {
        return $this->type;
    }
    public function getOwner() {
        return $this->user_id;
	}
	public function getOwnerEntity() {
		if (!isset($this->owner_entity)) {
		    $user = new User($this->user_id);
			$user->load();
			$this->owner_entity = $user;
			
			return $user;
		}
		return $this->owner_entity;
	}
    
	public function canEdit() {
        global $Dippler;
        if (is_logged_in()) {
            if ($Dippler->is_admin()) {
                return 1;
            }
            if (get_logged_in_user_id() == $this->getOwner()) {
                if ($Dippler->is_learner()) {
                    return 1;
                }
            }
        }
        return 0;
    }
    /**
     * Checks if profile can be viewed.
     * Only administrator can see profiles for unapproved users.
     *
     * @return bool
     */
    public function canView() {
        global $Dippler;
        if ($Dippler->is_admin()) {
            return true;
        }
        if ($this->isApproved()) {
            return true;
        }
        return false;
    }
    /**
     * Checks if user is approved.
     *
     * @return bool
     */
    public function isApproved() {
        if ($this->approved == 'true') {
            return true;
        }
        return false;
    }
    /**
     * Checks if unapprove button should be shown.
     * 
     * @return bool
     */
    public function isUnapproveShown() {
        global $Dippler;
        if ($Dippler->is_logged_in() && $Dippler->is_admin()) {
            return true;
        }
        return false;
    }
    /**
     * Checks if delete button is shown.
     *
     * @return bool
     */
    public function isDeleteShown() {
        global $Dippler;
        if ($Dippler->is_logged_in() && $Dippler->is_admin()) {
            return true;
        }
        return false;
    }
    
    public function getFirstname() {
        return $this->firstname;    
    }
    
    public function getLastname() {
        return $this->lastname;    
    }
    
    public function getFullname() {
        return $this->firstname." ".$this->lastname;    
	}
    public function getEmail() {
        return $this->email;    
    }
	private function _isURL(&$url) {
		if (filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED)) {
			return true;
		}
		return false;
	}
	public function getTwitterURL() {
		if (!empty($this->twitter)) {
			if ($this->_isURL($this->twitter)) {
				return $this->twitter;
			}
			return "http://twitter.com/{$this->twitter}";
		}
		return "";
	}
	public function getDeliciousURL() {
		if (!empty($this->delicious)) {
			if ($this->_isURL($this->delicious)) {
				return $this->delicious;
			}
			return "http://www.delicious.com/{$this->delicious}";
		}
		return "";
	}
	public function getMendeleyURL() {
		if (!empty($this->mendeley)) {
			if ($this->_isURL($this->mendeley)) {
				return $this->mendeley;
			}
			return "http://www.mendeley.com/profiles/{$this->mendeley}";
		}
		return "";
	}
    
    function idXML() {
        $data = "";
        $data .= "";
		if ($this->id) {
            $data .= "{$this->id}";
		} else {
            $data .= "{$this->user_id}";
        }
		$data .= "";
		return $data;
    }
    
    function dataXML() {
        $data = "";
        $data .= "";
        $data .= "{$this->id}";
        $data .= "{$this->user_id}";
		$data .= "firstname}]]>";
		$data .= "lastname}]]>";
		$data .= "description}]]>";
		$data .= "homepage}]]>";
		$data .= "twitter}]]>";
		$data .= "delicious}]]>";
		$data .= "mendeley}]]>";
		$data .= "skype}]]>";
		$data .= "msn}]]>";
		$data .= "curriculum}]]>";
		$data .= "university}]]>";
		$data .= "institute}]]>";
        $data .= "blogurl}]]>";
        $data .= "department}]]>";
		$data .= "";
		return $data;
	}
    function getProviders() {
		global $Dippler;
		return $Dippler->getProviders();
    }
}
?>