Login   Register  
PHP Classes
elePHPant
Icontem

File: QGoogleGraph.class.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Tom Schaefer  >  QGoogleVisualizationAPI  >  QGoogleGraph.class.php  >  Download  
File: QGoogleGraph.class.php
Role: Class source
Content type: text/plain
Description: abstract root class
Class: QGoogleVisualizationAPI
Google Visualization API (deprecated)
Author: By
Last change: some addings
Date: 2009-07-07 10:15
Size: 8,002 bytes
 

Contents

Class file image Download
<?php

/**
 * TODO
 *
 */
interface QIGoogleGraph{
    
    
/**
     * interface design for render method
     *
     */
    
public function render();
    
    
/**
     * interface design for columns setter
     *
     * @param array $columns
     */
    
public function setColumns($columns = array());

    
/**
     * interface design for values setter
     *
     * @param array $values
     */
    
public function setValues($values = array());
    
}

/**
 * Wrapper for Google Visualisation API
 * Visualisation Class
 *
 * holds generic settings for all google apis
 * @author Thomas Schäfer
 * @since 2008-06-29
 *
 */
abstract class QGoogleGraph implements QIGoogleGraph {

    
/**
     * curly opening brace
     */
    
const OC '{';
    
/**
     * curly closing brace
     */
    
const CC '}';
    
/**
     * line break
     */
    
const LB "\n";

    
/**
     * offset for context part of class's name
     *
     * @var integer
     */
    
private $contextNode 1;

    
/**
     * context holder
     *
     * @var string
     */
    
protected $context;

    
/**
     * holder of id
     *
     * @var string
     */
    
protected $id;
    
    
/**
     * working properties holder
     *
     * @var array
     */
    
protected $properties = array();

    
/**
     * holder of xml objects
     *
     * @var SimpleXMLElement
     */
    
protected $object;

    
/**
     * constructor
     *
     */
    
public function __construct(){
        
    }

    
/**
     * setter for visualisation method type function
     *
     * @param string $functionname
     * @return self
     */
    
public function setFunctionName($functionname=null){
        
        
$this->setProperty("common""function", ($functionname?$functionname:strtolower($this->vizualisationType)));
        return 
$this;
    }

    
/**
     * setter for properties
     *
     * @param  array $array
     * @return self
     */
    
public function setDrawProperties($array=array()){
        
        
$this->setProperty("drawproperties"$array);
        return 
$this;
    }
    
    
/**
     * return object
     *
     * @return array
     */
    
public function getObject() {
        
        return 
$this->object;
    }

    
/**
     * adds properties into working object
     *
     * @param unknown_type $array
     * @return unknown
     */
    
public function addDrawProperties($array=array()){
        
// last set property overwrites default
        
        
$array array_merge($this->drawProperties$array);
        foreach(
$array as $key => $value){
            
$this->putProperty("drawproperties", array(    $key => $value));
        }
        return 
$this;
    }

    
/**
     * checks attributes on existance and values on datatype
     *
     * @param string $propAttr
     * @param mixed $propValue
     * @return mixed
     */
    
protected function checkProperties($propAttr$propValue){
        
        if(
strpos($this->configuration[$propAttr]["datatype"],",")){
            
$checkProps explode(","$this->configuration[$propAttr]["datatype"]);
        } else {
            
$checkProps false;
        }

        if(
$checkProps) {
            foreach(
$checkProps as $checkProp){
                
$check     function_exists("is_" $checkProp)
                    ? 
call_user_func("is_" $checkProp,$propValue)
                    : 
false;                
                if(empty(
$check) && $checkProp=="object"){
                    
$check $this->isLiteralObject($propValue);
                    if(
$check){
                        return 
"literal";
                    }
                }
                if(
$check 
                    
and array_key_exists($propAttr$this->configuration
                    and isset(
$this->configuration[$propAttr]["values"])
                    and !
is_array($this->configuration[$propAttr]["values"])
                    and 
in_array($propValue, array($this->configuration[$propAttr]["values"]))) {
                    return 
$this->configuration[$propAttr]["values"];
                } elseif(
$check 
                    
and array_key_exists($propAttr$this->configuration
                    and isset(
$this->configuration[$propAttr]["values"])
                    and 
is_array($this->configuration[$propAttr]["values"]) 
                    and 
in_array($propValue$this->configuration[$propAttr]["values"])) {
                    return 
$this->configuration[$propAttr]["values"];
                }
            }
            return 
false;
                
        } else {
            
            
$check     function_exists("is_" $this->configuration[$propAttr]["datatype"])
                    ? 
call_user_func("is_" $this->configuration[$propAttr]["datatype"], $propValue)
                    : 
false;
            if(
$this->configuration[$propAttr]["datatype"]=='bool') {
                return 
$this->configuration[$propAttr]["datatype"];
            }
                    
            if(empty(
$check) && $this->configuration[$propAttr]["datatype"]=="array"){
                
$check $this->isLiteralArray($propValue);
                if(
$check){
                    return 
"literal";
                }
            }
            if(
$check 
                
and array_key_exists($propAttr$this->configuration
                and isset(
$this->configuration[$propAttr]["values"])
                and 
is_array($this->configuration[$propAttr]["values"]) 
                and 
in_array($propValue$this->configuration[$propAttr]["values"])) 
            {
                return 
$this->configuration[$propAttr]["datatype"];
            } elseif(
$check) {
                return 
$this->configuration[$propAttr]["datatype"];
            } else {
                return 
false;
            }
        }
    }

    
/**
     * check if value is a javascript literal object
     *
     * @param string $propValue
     * @return bool
     */
    
protected function isLiteralObject($propValue){
        
        
$c substr(trim($propValue),0,1)=="{"?1:0;
        
$c += substr(trim($propValue),-1,1)=="}"?1:0;
        
$c += substr_count(trim($propValue),':')>0?1:0;
        if(
$c==3){
            return 
true;
        } else {
            return 
false;
        }
    }
    
    
/**
     * check if values is a javascript array
     *
     * @param string $propValue
     * @return bool
     */
    
protected function isLiteralArray($propValue){
        
        
$c substr(trim($propValue),0,1)=="["?1:0;
        
$c += substr(trim($propValue),-1,1)=="]"?1:0;
        
$c += substr_count(trim($propValue),',')>0?1:0;
        if(
$c==3){
            return 
true;
        } else {
            return 
false;
        }
    }
    
/**
     * Sets an id attribute for presentation container.
     * If not set, an randomly created id will be set
     * while preparation.
     * If the self::ignoreContainer method is set then
     * the context name will be set only.
     *
     * @param string $id
     */
    
public function setId($id=null){
        
        
$id = (string) $id;
        
$newId = (strlen($id)?$id:strtolower($this->getContext()) . '_'.substr(md5(microtime()),0,4));
        if(empty(
$this->ignoreContainer)){
            
$this->setProperty("id"$newId);
            
$this->object["div"]->div->addAttribute("id",$this->getProperty("id"));
        } else {
            
$this->setProperty("id"$newId);
        }
        
$this->id $newId;
    }

    
/**
     * get id
     *
     * @return string
     */
    
public function getId() {
        return 
$this->id;    
    }
    
    
/**
     * getter of properties
     *
     * @param string $offset
     * @param string $name
     * @return mixed
     */
    
public function getProperty($offset$name=null){
        
        if(
$name) {
            return 
$this->properties[$offset][$name];
        } else {
            return 
$this->properties[$offset];
        }
    }


    
/**
     * set property
     *
     * @param string $offset
     * @param mixed $value
     * @param string $type
     */
    
public function setProperty($offset$value$type=null){
        
        if(
$type){
            
$this->properties[$offset][$type] = $value;
        } else {
            
$this->properties[$offset] = $value;
        }
    }

    
/**
     * check property
     *
     * @param string $offset
     * @return bool
     */
    
public function hasProperty($offset){
        
        if(empty(
$this->properties[$offset])){
            return 
false;
        } else {
            return 
true;
        }
    }

    
/**
     * attach value to property (concatenate)
     *
     * @param string $offset
     * @param mixed $value
     * @param string $type
     */
    
public function addProperty($offset$value$type null){
        
        if(
$type){
            
$this->properties[$offset][$type] .= $value;
        } else {
            
$this->properties[$offset] .= $value;
        }
    }

    
/**
     * put property as new array entry
     *
     * @param string $offset
     * @param mixed $value
     * @param string $type
     */
    
public function putProperty($offset$value$type null){
        
        if(
$type){
            
$this->properties[$offset][$type][] = $value;
        } else {
            
$this->properties[$offset][] = $value;
        }
    }
    
    public function 
render(){}

    public function 
setColumns($columns = array()){}

    public function 
setValues($values = array()){}


}