Icontem

File: lib/php/wajaf.lib

Recommend this page to a friend!
  Classes of philippe thomassigny  >  WAJAF  >  lib/php/wajaf.lib  >  Download  
File: lib/php/wajaf.lib
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: WAJAF
Build single page applications
Author: By
Last change: patch 3.0.4
Date: 1 year ago
Size: 28,825 bytes
 

Contents

Class file image Download
<?php

/* @@copyright:Begin@@ */
/*
    wajaf.lib, WAJAF, the WebAbility(r) Javascript Application Framework
    Contains the WAJAF classes to build WAJAF applications in PHP
    (c) 2008-2010 Philippe Thomassigny

    This file is part of WAJAF

    WAJAF is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    WAJAF is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with WAJAF.  If not, see <http://www.gnu.org/licenses/>.
*/
/* @@copyright:End@@ */


/* The @@xxx:Begin@@ and @@xxx:End@@ keywords have been placed for WebAbility installation purpose. They have no other function. */

// ====================================================================
// Error class

namespace wajaf;

/* @@wajafError:Begin:throwables@@ */
class wajafError extends \Exception
{
  private $trace = null;
  public $message = null;

  function __construct($message = null)
  {
    $this->message = $message;
    $this->trace = debug_backtrace();
  }

  public function __toString()
  {
    $error = "<table border=\"1\"><tr><td bgcolor=\"#FFDDDD\"><b>ERROR: </b></td><td bgcolor=\"#FFDDDD\">$this->message</td></tr>\n".
     "<tr><td><b>THROWN: </b></td><td>$this->file (<b>$this->line</b>)</td></tr>\n".
     "<tr><td valign=\"top\"><b>TRACE: </b></td><td valign=\"top\">";
    foreach($this->trace as $k => $t)
    {
      if ($k) // we dont write 1rst errror since it is where we threw the object
        $error .= "".(isset($t["file"])?$t["file"]:"No file")." (<b>".(isset($t["line"])?$t["line"]:"No line")."</b>) :: calling <font color=\"blue\">".(isset($t["class"])?$t["class"]:"").(isset($t["type"])?$t["type"]:"").(isset($t["function"])?$t["function"]:"No function")."</font><br />\n";
    }
    $error .= "</td></tr>\n</table>";
    return $error;
  }
}
/* @@wajafError:End@@ */

// ====================================================================
// Main Builder class

/* @@wajaf:Begin:wajaf@@ */
class wajaf extends \core\WAClass
{
  protected $tagname = '';
  protected $attributes = array();
  protected $data = null;
  protected $isnottext = false;
  protected $children = array();
  protected $summary = null;
  protected $title = null;
  protected $description = null;
  protected $events = array();
  protected $possiblechildren = array();
  protected $messages = array();
  protected $possiblemessages = array();

  public function __construct($tagname)
  {
    $this->tagname = $tagname;
  }

  protected function registerAttributes($params)
  {
    foreach ($params as $p)
      $this->attributes[$p] = null;
  }

  public function size($width, $height)
  {
    $this->attributes['width'] = $width;
    $this->attributes['height'] = $height;
    return $this;
  }

  public function position($left, $top, $right = null, $bottom = null)
  {
    $this->attributes['left'] = $left;
    $this->attributes['top'] = $top;
    $this->attributes['right'] = $right;
    $this->attributes['bottom'] = $bottom;
    return $this;
  }

  protected function getTagName()
  {
    return $this->tagname;
  }

  public function __call($name, $vars)
  {
    $var = strtolower(substr($name, 3));
    if (array_key_exists($var, $this->attributes))
    {
      if ($name == 'get'.ucfirst($var))
        return $this->attributes[$var];
      elseif ($name == 'set'.ucfirst($var))
      {
        $this->attributes[$var] = $vars[0];
        return $this;
      }
    }
    throw new wajafError('Error, ' . $name . '(' . $vars . ') is not a valid function.');
  }

  protected function registerPossibleChildren($tags)
  {
    foreach ($tags as $t)
      $this->possiblechildren[$t] = true;
  }

  protected function registerPossibleMessages($entries)
  {
    foreach ($entries as $e)
      $this->possiblemessages[$e] = true;
  }

  public function setData($data, $isnottext = false)
  {
    $this->isnottext = $isnottext;
    $this->data = $data;
    return $this;
  }

  public function setHelp($summary, $title, $description)
  {
    $this->summary = $summary;
    $this->title = $title;
    $this->description = $description;
    return $this;
  }

  public function setMessages($messages)
  {
    foreach($messages as $e => $message)
    {
      $this->messages[$e] = $message;
    }
  }

  public function setMessage($entry, $message)
  {
    $this->messages[$entry] = $message;
  }

  public function add($object)
  {
    if (!($object instanceof wajaf))
      throw new wajafError('Error, ' . $object->getTagName() . ' is not an instance of wajaf.');
    if (!isset($this->possiblechildren[$object->getTagName()]))
      throw new wajafError('Error, '.$this->tagname.' cannot have '.$object->getTagName() . ' as child.');
    $this->children[] = $object;
    return $this;
  }

  public function setEvent($event, $code)
  {
    $this->events[$event] = $code;
    return $this;
  }

  protected function compilepre()
  {
    $txt = '<'.$this->tagname;
    foreach($this->attributes as $a => $v)
      if (isset($v))
        $txt .= ' '.$a.'="'.$v.'"';
    $txt .= '>';
    if ($this->data !== null && !$this->isnottext)
      $txt .= '<![CDATA['.$this->data.']]>';
    else if ($this->data !== null && $this->isnottext)
      $txt .= $this->data;
    foreach($this->children as $c)
      $txt .= $c->compile();
    if ($this->summary || $this->title || $this->description)
    {
      $txt .= '<help>';
      if ($this->summary)
        $txt .= '<summary><![CDATA['.$this->summary.']]></summary>';
      if ($this->title)
        $txt .= '<title><![CDATA['.$this->title.']]></title>';
      if ($this->description)
        $txt .= '<description><![CDATA['.$this->description.']]></description>';
      $txt .= '</help>';
    }
    foreach($this->events as $e => $c)
      $txt .= '<event type="'.$e.'"><code><![CDATA['.$c.']]></code></event>';
    return $txt;
  }

  protected function compilemessages()
  {
    $txt = '';
    foreach($this->messages as $k => $m)
      $txt .= '<'.$k.'><![CDATA['.$m.']]></'.$k.'>';
    return $txt;
  }

  protected function compilelocal()
  { }

  protected function compilepost()
  {
    $txt = '</'.$this->tagname.'>';
    return $txt;
  }

  public function compile()
  {
    return $this->compilepre() . $this->compilemessages() . $this->compilelocal() . $this->compilepost();
  }

}
/* @@wajaf:End@@ */

// ====================================================================
// Builder classes

/* @@Xapplication:Begin:wajaf@@ */
class Xapplication extends wajaf
{
  public function __construct($id)
  {
    parent::__construct('application');
    $this->registerAttributes( array('id', 'enforce', 'style') );
    $this->setId($id);
    $this->registerPossibleChildren( array('container', 'element') );
  }
}
/* @@Xapplication:End@@ */

/* @@Xcontainer:Begin:wajaf@@ */
class Xcontainer extends wajaf
{
  public function __construct($type, $id = null)
  {
    parent::__construct('container');
    $this->registerAttributes( array('type', 'id', 'display', 'style', 'classname', 'classnamezone', 'left', 'width', 'right', 'top', 'height', 'bottom', 'haslistener') );
    $this->registerPossibleChildren( array('zone') );

    $this->setType($type);
    $this->setId($id);
  }
}
/* @@Xcontainer:End@@ */

/* @@Xzone:Begin:wajaf@@ */
class Xzone extends wajaf
{
  public function __construct($id = null)
  {
    parent::__construct('zone');
    $this->registerAttributes( array('id', 'style', 'classname', 'application', 'params') );
    $this->registerPossibleChildren( array('container', 'element') );

    $this->setId($id);
  }
}
/* @@Xzone:End@@ */

/* @@Xtemplate:Begin:wajaf@@ */
class Xtemplate extends wajaf
{
  public function __construct($name)
  {
    parent::__construct('template');
    $this->registerAttributes( array('name') );
    $this->setName($name);
    $this->registerPossibleChildren( array('container', 'element') );
  }
}
/* @@Xtemplate:End@@ */

/* @@Xdataset:Begin:wajaf@@ */
class Xdataset extends wajaf
{
  public function __construct($data)
  {
    parent::__construct('dataset');
    $this->setData($data);
  }
}
/* @@Xdataset:End@@ */

/* @@Xelement:Begin:wajaf@@ */
class Xelement extends wajaf
{
  public function __construct($type, $id = null)
  {
    parent::__construct('element');
    $this->registerAttributes( array('type', 'id', 'display', 'style', 'classname', 'left', 'width', 'right', 'top', 'height', 'bottom') );

    $this->setType($type);
    $this->setId($id);
  }
}
/* @@Xelement:End@@ */

// ====================================================================
// The containers

/* @@simpleContainer:Begin:wajaf@@ */
class simpleContainer extends Xcontainer
{
  public function __construct($id = null)
  {
    parent::__construct('simpleContainer', $id);
  }
}
/* @@simpleContainer:End@@ */

/* @@expandableContainer:Begin:wajaf@@ */
class expandableContainer extends Xcontainer
{
  public function __construct($id = null)
  {
    parent::__construct('expandableContainer', $id);
  }
}
/* @@expandableContainer:End@@ */

/* @@separatorContainer:Begin:wajaf@@ */
class separatorContainer extends Xcontainer
{
  public function __construct($id = null)
  {
    parent::__construct('separatorContainer', $id);
    $this->registerAttributes( array('mode', 'auto') );
  }
}
/* @@separatorContainer:End@@ */





/* @@tabContainer:Begin:wajaf@@ */
class tabContainer extends Xcontainer
{
  public function __construct($id = null)
  {
    parent::__construct('tabContainer', $id);
    $this->registerAttributes( array('mode') );
  }
}
/* @@tabContainer:End@@ */

/* @@treeContainer:Begin:wajaf@@ */
class treeContainer extends Xcontainer
{
  public function __construct($id = null)
  {
    parent::__construct('treeContainer', $id);
    $this->registerPossibleChildren( array('template', 'dataset') );
  }
}
/* @@treeContainer:End@@ */

/* @@accordionContainer:Begin:wajaf@@ */
class accordionContainer extends Xcontainer
{
  public function __construct()
  {
    parent::__construct('accordionContainer');
  }
}
/* @@accordionContainer:End@@ */

/* @@barContainer:Begin:wajaf@@ */
class barContainer extends Xcontainer
{
  public function __construct()
  {
    parent::__construct('barContainer');
  }
}
/* @@barContainer:End@@ */

/* @@dblistContainer:Begin:wajaf@@ */
class dblistContainer extends Xcontainer
{
  public function __construct()
  {
    parent::__construct('dblistContainer');
    $this->registerPossibleChildren( array('template', 'dataset') );
  }
}
/* @@dblistContainer:End@@ */

/* @@dockContainer:Begin:wajaf@@ */
class dockContainer extends Xcontainer
{
  public function __construct()
  {
    parent::__construct('dockContainer');
  }
}
/* @@dockContainer:End@@ */

/* @@floatingContainer:Begin:wajaf@@ */
class floatingContainer extends Xcontainer
{
  public function __construct()
  {
    parent::__construct('floatingContainer');
  }
}
/* @@floatingContainer:End@@ */

/* @@gridContainer:Begin:wajaf@@ */
class gridContainer extends Xcontainer
{
  public function __construct($id = null)
  {
    parent::__construct('gridContainer', $id);
    $this->registerAttributes( array('pagination', 'maxperpage', 'mode', 'selectable', 'insertable', 'deletable', 'change', 'params') );
    $this->registerPossibleChildren( array('template', 'dataset') );
  }
}
/* @@gridContainer:End@@ */

/* @@groupContainer:Begin:wajaf@@ */
class groupContainer extends Xcontainer
{
  public function __construct($id = null)
  {
    parent::__construct('groupContainer', $id);
    $this->registerAttributes( array('mode', 'authmodes', 'varkey', 'key', 'varorder', 'varmode') );
    $this->registerPossibleMessages( array('alertmessage', 'servermessage', 'titleinsert', 'titleupdate', 'titledelete', 'titleview', 'insertok', 'updateok', 'deleteok') );
    $this->registerPossibleChildren( array('dataset') );
  }
}
/* @@groupContainer:End@@ */

/* @@listContainer:Begin:wajaf@@ */
class listContainer extends Xcontainer
{
  public function __construct()
  {
    parent::__construct('listContainer');
    $this->registerPossibleChildren( array('template', 'dataset') );
  }
}
/* @@listContainer:End@@ */

/* @@matrixContainer:Begin:wajaf@@ */
class matrixContainer extends Xcontainer
{
  public function __construct($id = null)
  {
    parent::__construct('matrixContainer', $id);
    $this->registerAttributes( array('columns', 'mode', 'classnamezone', 'preidbutton', 'defaultwidth', 'defaultheight') );
    $this->registerPossibleChildren( array('template', 'dataset') );
  }
}
/* @@matrixContainer:End@@ */

/* @@matrixZone:Begin:wajaf@@ */
class matrixZone extends Xzone
{
  public function __construct($id = null)
  {
    parent::__construct($id);
    $this->registerAttributes();
  }
}
/* @@matrixZone:End@@ */

/* @@tableContainer:Begin:wajaf@@ */
class tableContainer extends Xcontainer
{
  public function __construct($id = null)
  {
    parent::__construct('tableContainer', $id);
  }
}
/* @@tableContainer:End@@ */

/* @@widgetContainer:Begin:wajaf@@ */
class widgetContainer extends Xcontainer
{
  public function __construct($id = null)
  {
    parent::__construct('widgetContainer', $id);
    $this->registerAttributes( array('columns', 'classnamezone') );
    $this->registerPossibleChildren( array('template', 'dataset') );
  }
}
/* @@widgetContainer:End@@ */

/* @@windowContainer:Begin:wajaf@@ */
class windowContainer extends Xcontainer
{
  public function __construct($id = null)
  {
    parent::__construct('windowContainer', $id);
  }
}
/* @@windowContainer:End@@ */

// ====================================================================
// Zones

/* @@simpleZone:Begin:wajaf@@ */
class simpleZone extends Xzone
{
  public function __construct($id = null)
  {
    parent::__construct($id);
  }
}
/* @@simpleZone:End@@ */

/* @@expandableZone:Begin:wajaf@@ */
class expandableZone extends Xzone
{
  public function __construct($id = null)
  {
    parent::__construct($id);
    $this->registerAttributes( array('title', 'closed', 'classnameselectoropen', 'classnameselectorclose', 'display') );
  }
}
/* @@expandableZone:End@@ */

/* @@separatorZone:Begin:wajaf@@ */
class separatorZone extends Xzone
{
  public function __construct($id = null)
  {
    parent::__construct($id);
    $this->registerAttributes( array('size', 'classnameseparator', 'display') );
  }
}
/* @@separatorZone:End@@ */

/* @@tabZone:Begin:wajaf@@ */
class tabZone extends Xzone
{
  public function __construct($id = null)
  {
    parent::__construct($id);
    $this->registerAttributes( array('title') );
  }
}
/* @@tabZone:End@@ */

/* @@groupZone:Begin:wajaf@@ */
class groupZone extends Xzone
{
  public function __construct($id = null)
  {
    parent::__construct($id);
    $this->registerAttributes( array('type') );
  }
}
/* @@groupZone:End@@ */



/* @@gridZone:Begin:wajaf@@ */
class gridZone extends Xzone
{
  public function __construct($id = null)
  {
    parent::__construct('zone');
    $this->registerAttributes( array('title', 'application', 'size', 'sizemin', 'sizemax') );
    $this->registerAttributes( array('selectable', 'sortable', 'sizeable', 'maskable', 'editable', 'type', 'editor') );
    $this->registerAttributes( array('render', 'format', 'align') );

    $this->setId($id);
  }
}
/* @@gridZone:End@@ */

/* @@widgetZone:Begin:wajaf@@ */
class widgetZone extends Xzone
{
  public function __construct($id = null)
  {
    parent::__construct('zone');
    $this->registerAttributes( array('id', 'classname', 'title', 'application', 'size', 'column','params') );
    $this->registerAttributes( array('closeable', 'sizeable', 'maskable', 'editable', 'editor') );
    $this->registerPossibleChildren( array('container', 'element') );

    $this->setId($id);
  }
}
/* @@widgetZone:End@@ */

// ====================================================================
// Datasets

/* @@treeDataset:Begin:wajaf@@ */
class treeDataset extends Xdataset
{
  public function __construct($data)
  {
    parent::__construct($data);
  }
}
/* @@treeDataset:End@@ */

/* @@gridDataset:Begin:wajaf@@ */
class gridDataset extends Xdataset
{
  public function __construct($data)
  {
    parent::__construct($data);
  }
}
/* @@gridDataset:End@@ */

/* @@groupDataset:Begin:wajaf@@ */
class groupDataset extends Xdataset
{
  public function __construct($data)
  {
    parent::__construct($data);
  }
}
/* @@groupDataset:End@@ */

// ====================================================================
// Templates

/* @@treeTemplate:Begin:wajaf@@ */
class treeTemplate extends Xtemplate
{
  public function __construct($name)
  {
    parent::__construct($name);
  }
}
/* @@treeTemplate:End@@ */

/* @@listTemplate:Begin:wajaf@@ */
class listTemplate extends Xtemplate
{
  public function __construct($name)
  {
    parent::__construct($name);
  }
}
/* @@listTemplate:End@@ */

/* @@gridTemplate:Begin:wajaf@@ */
class gridTemplate extends Xtemplate
{
  public function __construct($name)
  {
    parent::__construct('template');
    $this->registerAttributes( array('name') );
    $this->setName($name);
    $this->registerPossibleChildren( array('container', 'element') );
  }
}
/* @@gridTemplate:End@@ */

/* @@matrixTemplate:Begin:wajaf@@ */
class matrixTemplate extends Xtemplate
{
  public function __construct($name)
  {
    parent::__construct('template');
    $this->registerAttributes( array('name') );
    $this->setName($name);
    $this->registerPossibleChildren( array('container', 'element') );
  }
}
/* @@matrixTemplate:End@@ */

// ====================================================================
// Elements

/* @@htmlElement:Begin:wajaf@@ */
class htmlElement extends Xelement
{
  public function __construct($text, $id = null)
  {
    parent::__construct('htmlElement', $id);

    $this->setData($text);
  }
}
/* @@htmlElement:End@@ */

/* @@textElement:Begin:wajaf@@ */
class textElement extends Xelement
{
  public function __construct($text, $id = null)
  {
    parent::__construct('textElement', $id);

    $this->setData($text);
  }
}
/* @@textElement:End@@ */

/* @@linkElement:Begin:wajaf@@ */
class linkElement extends Xelement
{
  public function __construct($id = null)
  {
    parent::__construct('linkElement', $id);
  }
}
/* @@linkElement:End@@ */

/* @@imageElement:Begin:wajaf@@ */
class imageElement extends Xelement
{
  public function __construct($src, $title = null, $id = null)
  {
    parent::__construct('imageElement', $id);
    $this->registerAttributes( array('src') );

    $this->setSrc($src);
    $this->setData($title);
  }
}
/* @@imageElement:End@@ */

/* @@codeElement:Begin:wajaf@@ */
class codeElement extends Xelement
{
  public function __construct($code, $id = null)
  {
    parent::__construct('codeElement', $id);

    $this->setData($code);
  }
}
/* @@codeElement:End@@ */

/* @@buttonElement:Begin:wajaf@@ */
class buttonElement extends Xelement
{
  public function __construct($text, $id = null)
  {
    parent::__construct('buttonElement', $id);
    $this->registerAttributes( array('visible', 'action', 'status', 'extra') );
    $this->registerPossibleMessages( array('titleinsert', 'titleupdate', 'titledelete', 'titleview') );

    $this->setData($text);
  }
}
/* @@buttonElement:End@@ */






/* @@dateselectorElement:Begin:wajaf@@ */
class dateselectorElement extends Xelement
{
  public function __construct($id = null)
  {
    parent::__construct('dateselectorElement');
    $this->registerAttributes( array('link') );

    $this->setId($id);
//    $this->registerData($text);
  }
}
/* @@dateselectorElement:End@@ */

/* @@hiddenElement:Begin:wajaf@@ */
class hiddenElement extends Xelement
{
  public function __construct($id = null)
  {
    parent::__construct('hiddenElement');
//    $this->registerAttributes( array('classnameover', 'classnamedown', 'classnamedisabled', 'action', 'link') );

    $this->setId($id);
//    $this->registerData($text);
  }
}
/* @@hiddenElement:End@@ */

/* @@hiddenfieldElement:Begin:wajaf@@ */
class hiddenfieldElement extends Xelement
{
  public function __construct($id = null, $text = null)
  {
    parent::__construct('hiddenfieldElement');
//    $this->registerAttributes( array('size', 'minlength', 'maxlength', 'minwords', 'maxwords', 'format', 'visible', 'info', 'disabled', 'readonly', 'notnull', 'help') );
//    $this->registerPossibleMessages( array() );
    $this->setId($id);
    $this->setData($text);
  }
}
/* @@hiddenfieldElement:End@@ */

/* @@textfieldElement:Begin:wajaf@@ */
class textfieldElement extends Xelement
{
  public function __construct($id = null, $text = null)
  {
    parent::__construct('textfieldElement');
    $this->registerAttributes( array('size', 'minlength', 'maxlength', 'minwords', 'maxwords', 'format', 'visible', 'info', 'disabled', 'readonly', 'notnull', 'helpmode') );
    $this->registerPossibleMessages( array('defaultvalue', 'helpdescription', 'statusnotnull', 'statusbadformat', 'statustooshort', 'statustoolong', 'statustoofewwords', 'statustoomanywords', 'statuscheck') );
    $this->setId($id);
    $this->setData($text);
  }
}
/* @@textfieldElement:End@@ */

/* @@textareafieldElement:Begin:wajaf@@ */
class textareafieldElement extends Xelement
{
  public function __construct($id = null, $text = null)
  {
    parent::__construct('textareafieldElement');
    $this->registerAttributes( array('areawidth', 'areaheight', 'minlength', 'maxlength', 'minwords', 'maxwords', 'format', 'visible', 'info', 'disabled', 'readonly', 'notnull', 'helpmode') );
    $this->registerPossibleMessages( array('defaultvalue', 'helpdescription', 'statusnotnull', 'statusbadformat', 'statustooshort', 'statustoolong', 'statustoofewwords', 'statustoomanywords', 'statuscheck') );
    $this->setId($id);
    $this->setData($text);
  }
}
/* @@textareafieldElement:End@@ */

/* @@lovfieldElement:Begin:wajaf@@ */
class lovfieldElement extends Xelement
{
  protected $Options = null;

  public function __construct($id = null, $text = null)
  {
    parent::__construct('lovfieldElement');
    $this->registerAttributes( array('size', 'visible', 'info', 'disabled', 'readonly', 'notnull', 'helpmode') );
    $this->registerPossibleMessages( array('defaultvalue', 'helpdescription', 'statusnotnull', 'statuscheck') );
    $this->setId($id);
    $this->setData($text);
  }

  public function setOptions($options)
  {
    $this->Options = $options;
  }

  protected function compilelocal()
  {
    $txt = '';
    if ($this->Options)
    {
      $txt .= '<options>';
      foreach($this->Options as $k => $m)
        $txt .= '<option key="'.htmlentities($k, ENT_COMPAT, 'UTF-8').'"><![CDATA['.$m.']]></option>';
      $txt .= '</options>';
    }
    return $txt;
  }
}
/* @@lovfieldElement:End@@ */

/* @@filefieldElement:Begin:wajaf@@ */
class filefieldElement extends Xelement
{
  private $ExtensionsImages = array('.gif', '.jpg', '.png');
  private $ExtensionsAudios = array('.mp3', '.wma');
  private $ExtensionsVideos = array('.mp4', '.avi', '.wmv', '.mov');
  private $ExtensionsDocuments = array('.pdf', '.doc', '.xls', '.ppt', '.zip', '.txt', '.csv');

  private $ExtensionsAuth = null;
  private $ExtensionsDir = '/skins/clean/extensions/'; // directory where the extensions gifs are
  private $ExtensionsOther = 'other.png';       // put a gif link if we accept other extensions, or NULL if not

  public function __construct($id = null)
  {
    parent::__construct('filefieldElement');
//    $this->registerAttributes( array('classnameover', 'classnamedown', 'classnamedisabled', 'action', 'link') );

    $this->setId($id);
//    $this->registerData($text);
  }

  public function setExtensions($auth, $dir, $other = null)
  {
    if ( is_string($auth) )
    {
      switch($auth)
      {
        case 'images': $this->ExtensionsAuth = $this->ExtensionsImages; break;
        case 'audios': $this->ExtensionsAuth = $this->ExtensionsAudios; break;
        case 'videos': $this->ExtensionsAuth = $this->ExtensionsVideos; break;
        case 'documents': $this->ExtensionsAuth = $this->ExtensionsDocuments; break;
        default: $this->ExtensionsAuth = null; break;
      }
    }
    else
      $this->ExtensionsAuth = $auth;
    $this->ExtensionsDir = $dir;
    $this->ExtensionsOther = $other;
  }

  public function getExtension($name)
  {
    if ($this->ExtensionsAuth)
    {
      foreach ($this->ExtensionsAuth as $ext)
      {
        if (strtolower(substr($name, -strlen($ext))) == $ext)
        {
          return $ext;
        }
      }
    }
    if ($this->ExtensionsOther)
    {
      $pos = strrpos($name,'.');
      if ($pos === false)
        return null;
      return substr($name, $pos);
    }
    return null;
  }

  // returns the gif of the extensionm or null
  public function getExtensionImage($extension)
  {
    if ($this->ExtensionsAuth && in_array($extension, $this->ExtensionsAuth))
      return substr($extension,1).'.png';
    return substr($extension,1).'.png';
    return $this->ExtensionsOther;
  }

  public function processFile($temporarydir, $temporarypath)
  {
    $Context = $this->base->HTTPRequest->getParameter('ApplicationContext');

    $tempname = $this->base->createKey(10);
    $extension = $this->getExtension(strtolower($_FILES[$this->getId()]['name']));
    $id = $this->getId();
    if ($extension)
    {
      // 1. save the file in a temporary public directory
      DB_File::createDirectory($temporarydir, $temporarypath);
      move_uploaded_file($_FILES[$this->getId()]['tmp_name'], $temporarydir . $temporarypath . $tempname . $extension);
      // 2. return the javascript to show this file, and keep the name in a temporary field
      $gif = $this->getExtensionImage($extension);
      $tempfullname = $tempname.$extension;
      $truefullname = $_FILES[$this->getId()]['name'];

      return <<<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript">
<!--

window.parent.\$E('$Context{$id}').setFile('{$this->ExtensionsDir}', '$gif', '$tempfullname', '$truefullname');

// -->
</script>
</head>
</html>
EOF;
    }
    else
    {
      // 2. return the javascript to notify error
      return <<<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript">
<!--

window.parent.\$E('$Context{$id}').setFile('/pics/', 'dot.gif', null, null);
alert('Error: el archivo que subiĆ³ no es un archivo autorizado.');

// -->
</script>
</head>
</html>
EOF;
    }
  }

}
/* @@filefieldElement:End@@ */

/* @@datefieldElement:Begin:wajaf@@ */
class datefieldElement extends Xelement
{
  public function __construct($id = null)
  {
    parent::__construct('datefieldElement');
//    $this->registerAttributes( array('classnameover', 'classnamedown', 'classnamedisabled', 'action', 'link') );

    $this->setId($id);
//    $this->registerData($text);
  }
}
/* @@datefieldElement:End@@ */

/* @@settextfieldElement:Begin:wajaf@@ */
class settextfieldElement extends Xelement
{
  public function __construct($id = null)
  {
    parent::__construct('settextfieldElement');
//    $this->registerAttributes( array('classnameover', 'classnamedown', 'classnamedisabled', 'action', 'link') );

    $this->setId($id);
//    $this->registerData($text);
  }
}
/* @@settextfieldElement:End@@ */

/* @@paginationElement:Begin:wajaf@@ */
class paginationElement extends Xelement
{
  public function __construct($text, $id = null)
  {
    parent::__construct('paginationElement');
    $this->setId($id);
    $this->setData($text);
  }
}
/* @@paginationElement:End@@ */

/* @@mmcfieldElement:Begin:wajaf@@ */
class mmcfieldElement extends Xelement
{
  public function __construct($id = null)
  {
    parent::__construct('mmcfieldElement');
//    $this->registerAttributes( array('classnameover', 'classnamedown', 'classnamedisabled', 'action', 'link') );

    $this->setId($id);
//    $this->registerData($text);
  }
}
/* @@mmcfieldElement:End@@ */

/* @@ggraphElement:Begin:wajaf@@ */
class ggraphElement extends Xelement
{
  public function __construct($id = null)
  {
    parent::__construct('ggraphElement', $id);
    $this->registerAttributes( array('haslistener') );
    $this->registerPossibleChildren( array('dataset') );
  }
}
/* @@ggraphElement:End@@ */


?>