X-Git-Url: https://dev.renevier.net/?p=syj.git;a=blobdiff_plain;f=application%2Fforms%2FGeom.php;h=4515f016e10956722deb89114579a1eee7bd009d;hp=3d99a87bd6014b7522b2bee84c7bef81439be960;hb=c1aeb7538786d8c9f3b3337c0b71e21ef89d9c77;hpb=69cbaf628f5576754d4553c021315188e22d24af diff --git a/application/forms/Geom.php b/application/forms/Geom.php index 3d99a87..4515f01 100644 --- a/application/forms/Geom.php +++ b/application/forms/Geom.php @@ -2,25 +2,39 @@ /* This file is part of Syj, Copyright (c) 2010 Arnaud Renevier, and is published under the AGPL license. */ -class Syj_Form_Geom extends Zend_Form +class Syj_Form_Geom extends Zend_Form implements Syj_Processor_Interface { - protected $_elementDecorators = array( 'ViewHelper', 'Errors',); - protected $_decorators = array( 'FormElements' => array('decorator' => 'FormElements', 'options' => null), 'Form' => array('decorator' => 'Form', 'options' => null) ); - public function init() { - $data = array('Hidden', 'geom_data', array('required' => true)); + public function __construct($options = null) { + $translator = $this->getTranslator(); + + $data = array('Hidden', 'geom_data', array('required' => true, 'decorators' => array('ViewHelper', 'Errors'))); + + $upload = array('File', 'geom_upload', array("label" => $translator->translate("choose route from a file"), + 'validators' => array(), + 'ignoreNoFile' => true, + 'decorators' => array( + 'File', + 'Errors', + array('Label', array('separator' => '
')), + array('HtmlTag', array('tag' => 'div', 'id' => 'geom_upload_container')), + ))); $title = array('Text', 'geom_title', array( 'label' => __("optional title for this journey"), 'attribs' => array('maxlength' => '40', 'size' => '20'), - 'validators' => array(new Zend_Validate_StringLength(0, 40)) - )); + 'validators' => array(new Zend_Validate_StringLength(0, 40)), + 'decorators' => array( + 'ViewHelper', + 'Errors', + array('Label', array('separator' => '
')), + array('HtmlTag', array('tag' => 'div', 'id' => 'geom_title_container')), + ))); - $translator = $this->getTranslator(); $anchor = $this->getView()->Anchor("termsofuse?format=raw", $translator->translate("terms of use"), array('id' => 'geom_termsofuse_anchor')); @@ -33,16 +47,44 @@ class Syj_Form_Geom extends Zend_Form 'label', array('HtmlTag', array('tag' => 'div', 'id' => 'geom_accept_container', 'class' => 'logged-hide'))))); - $submit = array('Submit', 'geom_submit', array('label' => __("save"))); - - $this->addElements(array($data, $title, $touaccept, $submit)); + $submit = array('Submit', 'geom_submit', array('label' => __("save"), 'decorators' => array( + 'ViewHelper', + 'Errors', + array('HtmlTag', array('tag' => 'br', 'openOnly' => true))))); + $this->addElements(array($data, $upload, $title, $touaccept, $submit)); $decorator = $this->geom_accept->getDecorator('Zend_Form_Decorator_Label'); $decorator->setOption('escape', false); - $this->geom_title->addDecorator('HtmlTag', array('tag' => 'br', 'openOnly' => true))-> - addDecorator('label'); - $this->geom_submit->addDecorator('HtmlTag', array('tag' => 'br', 'openOnly' => true)); + parent::__construct($options); + } + + public function process(&$data) { + $upload = null; + if ($this->getValue("geom_upload")) { + $file = $this->geom_upload; + $upload = $file->getDestination() . DIRECTORY_SEPARATOR . $file->getValue(); + if (!isset($data["geom_data"]) || !$data["geom_data"]) { + if (!file_exists($upload)) { + throw new Zend_Exception(); + } + if (!@filesize($upload)) { + throw new Syj_Exception_InvalidGeomUpload(); + } + $content = @file_get_contents ($upload); + if ($content == false) { + throw new Zend_Exception(); + } + $data['geom_data'] = $content; + } + @unlink ($upload); + } else if (isset($_FILES['geom_upload']) and ($_FILES['geom_upload']['error']) == UPLOAD_ERR_INI_SIZE) { + throw new Syj_Exception_ToolargeGeomUpload(); + } else { + $this->removeElement("geom_upload"); + } + return $this; } + }