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: 5 years ago
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()){}


}