formosite = new Formosite($name, $title, $action); $this->id = $this->formosite->id; $this->name = $this->formosite->name; $this->title = $this->formosite->title; $this->linkedForm = $this->formosite->linkedForm; $this->activePage = 1; $this->freezed = false; } /* Ajout d'une page */ public function addPage($title='') { $this->formosite->add(new Page($title)); $this->setActivePage($this->getPageCount()); return true; } /* Ajout d'un champ */ public function addField($fieldLabel, $fieldType, $fieldName, $fieldValue = '', $fieldClass = '', $fieldInfo = '', $fieldValidIf = '', $fieldOkValues = '', $fieldRequired = false, $fieldDisabled = false, $toBeSaved = true, $fieldInfobulle = '', $pageId='') { if ($pageId == ''){$pageId = 'Page#'.$this->activePage;} $page = new ComponentSearchVisitor('Page', array('id' => $pageId)); $this->formosite->accept($page); if ($page->unique()) { $parentPage = $page->matches(0); $parentPage->add(new Field($fieldLabel, $fieldType, $fieldName, $fieldValue, $fieldClass, $fieldInfo, $fieldValidIf, $fieldOkValues, $fieldRequired, $fieldDisabled, $toBeSaved, $fieldInfobulle)); return true; } else { return false; } } /* Retourne une valeur du formulaire */ public function getValue($fieldName) { $field = new ComponentSearchVisitor('Field', array('name' => $fieldName)); $this->formosite->accept($field); if ($field->unique()) { $searchedField = $field->matches(0); return $searchedField->value; } else { return false; } } /* Retourne un attribut d'un champ */ public function getAttr($fieldName, $attr) { $field = new ComponentSearchVisitor('Field', array('name' => $fieldName)); $this->formosite->accept($field); if ($field->unique()) { $searchedField = $field->matches(0); return $searchedField->$attr; } else { return false; } } /* Retourne le titre d'une page */ public function getPageTitle($pageId = '') { if ($pageId == '') {$pageId = $this->getActivePage();} $page = new ComponentSearchVisitor('Page', array('id' => 'Page#'.$pageId)); $this->formosite->accept($page); if ($page->unique()) { $searchedPage = $page->matches(0); return $searchedPage->title; } else { return false; } } /* Set active page */ public function setActivePage($numPage) { if (is_int($numPage)) { $this->activePage = $numPage; } } /* Set next page */ public function setNextPage() { if ($this->activePage < $this->getPageCount()) { $this->activePage++; return true; } else { return false; } } /* Set linked form */ public function setLinkedForm($formName) { if ($formName != '') { $this->formosite->linkedForm = $formName; $this->linkedForm = $this->formosite->linkedForm; return true; } else { return false; } } /* Get active page */ public function getActivePage() { return $this->activePage; } /* Retourne le nombre de pages */ public function getPageCount() { return $this->formosite->pageCount; } /* Mise à jour */ public function update($updateValues='', $pageNum='') { if ($updateValues == ''){$updateValues = $_POST;}; $this->formosite->accept(new UpdateVisitor($updateValues, $pageNum)); return true; } /* Validation */ public function validate($pageId = '', $autoIncr = false) { if ($pageId == ''){$pageId = $this->activePage;} $valid = new ValidateVisitor($pageId); $this->formosite->accept($valid); if ($valid->isValid()) { if ($autoIncr == true){$this->setNextPage();} return true; } else { return false; } } /* Reset de toutes les valeurs */ public function reset() { $this->formosite->accept(new ResetVisitor()); return true; } /* Initialisation */ public function init() { $this->activePage = 1; return true; } /* Freeze */ public function freeze() { $this->freezed = true; } /* Affichage */ public function display() { if ($this->freezed == false) { $dis = new DisplayVisitor($this->activePage); $this->formosite->accept($dis); return $dis->show(); } } /* Javascript du Body */ public function getBodyJs() { if ($this->freezed == false) { $dis = new DisplayVisitor($this->activePage); $this->formosite->accept($dis); return $dis->getBodyJs(); } } /* Sauvegarde XML */ public function save($file) { $xml = new XMLVisitor(); $this->formosite->accept($xml); if ($xml->toFile($file)) {return true;} } /* Chargement depuis un fichier XML */ public function load($file) { if (is_file($file)) { $xml = simplexml_load_file($file); $this->formosite->setTitle((string) $xml['title']); $this->formosite->setName((string) $xml['name']); $this->formosite->linkedForm = (string) $xml['linkedForm']; foreach ($xml->Page as $page) { $this->addPage((string) $page['title']); foreach ($page->Field as $field) { $this->addField((string) $field['label'],(string) $field['type'],(string) $field['name'],(string) $field['value'],(string) $field['class'],(string) $field['info'],(string) $field['validIf'],(string) $field['okValues'],(bool) trim($field['required']),(bool) trim($field['disabled']),(bool) trim($field['toBeSaved']), (string) $field['infobulle']); } } unset($xml); $this->id = $this->formosite->id; $this->name = $this->formosite->name; $this->title = $this->formosite->title; $this->linkedForm = $this->formosite->linkedForm; $this->init(); return true; } else { return false; } } /* Arbre XML */ public function toTree() { $tree = new TreeviewVisitor(); $this->formosite->accept($tree); return $tree->show(); } /* Génère du SQL à partir des champs du formulaire */ public function toSQL() { $sql = new SqlGenVisitor(); $this->formosite->accept($sql); return $sql->getSQL(); } /* Retourne le nom des champs à insérer en BDD */ public function getFieldsToInsert() { $fields = new ComponentSearchVisitor('Field', array('toBeSaved' => true)); $this->formosite->accept($fields); $insertFields = $fields->matches(); return $insertFields; } } ?>