1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/movim_ynh.git synced 2024-09-03 19:46:19 +02:00
movim_ynh/sources/lib/XMPPtoForm.php

336 lines
11 KiB
PHP
Executable file

<?php
class XMPPtoForm{
private $fieldset;
private $xmpp;
private $html;
public function __construct(){
$this->fieldset = 0;
$this->html = '';
$this->xmpp = '';
}
public function getHTML($xmpp){
$this->setXMPP($xmpp);
$this->create();
return $this->html;
}
public function setXMPP($xmpp){
$this->xmpp = $xmpp;
}
public function create(){
$this->xmpp = str_replace('xmlns=', 'ns=', $this->xmpp);
$x = new SimpleXMLElement($this->xmpp);
foreach($x->children() as $element){
switch($element->getName()){
case "title":
$this->outTitle($element);
break;
case "instructions":
$this->outP($element);
break;
case "field":
if($element['type'] != 'hidden' && $element['type'] != 'fixed')
$this->html .='<div>';
switch($element['type']){
case "boolean":
$this->outCheckbox($element);
break;
case "fixed":
$this->outBold($element);
break;
case "text-single":
$this->outInput($element, "", "");
break;
case "text-multi":
$this->outTextarea($element);
break;
case "text-private":
$this->outInput($element, "password", "");
break;
case "hidden":
$this->outHiddeninput($element);
break;
case "list-multi":
$this->outList($element, "multiple");
break;
case "list-single":
$this->outList($element, "");
break;
case "jid-multi":
$this->outInput($element, "email", "multiple");
break;
case "jid-single":
$this->outInput($element, "email", "");
break;
default:
$this->html .= "";
}
if($element['type'] != 'hidden')
$this->html .='</div>';
break;
case 'url':
break;
/*XML without <x> element*/
case 'username':
case 'email':
case 'password':
$this->html .='<div class="element">';
$this->outGeneric($element->getName());
$this->html .='</div>';
break;
default:
$this->html .= "";
}
}
if($this->fieldset>0){
$this->html .= '</fieldset>';
}
}
private function outGeneric($s){
$this->html .= '
<input id="'.$s.'" name="generic_'.$s.'" type="'.$s.'" required/>
<label for="'.$s.'">'.
$s.'
</label>
';
}
private function outTitle($s){
$this->html .= '
<ul class="thin simple">
<li>
<span>'.$s.'</span>
</li>
</ul>';
}
private function outP($s){
$this->html .= '
<ul class="thin simple">
<li>
<p>'.$s.'</p>
</li>
</ul>';
}
private function outUrl($s) {
$this->html .= '
<a href="'.$s->getName().'">'.$s->getName().'</a>';
}
private function outBold($s){
if($this->fieldset > 0){
$this->html .= '</fieldset>';
}
$this->html .= '<fieldset><legend>'.$s->value.'</legend><br />';
$this->fieldset ++;
}
private function outCheckbox($s){
$this->html .= '
<div class="select">
<select
type="'.$s['type'].'"
label="'.$s['label'].'"
id="'.$s["var"].'"
name="'.$s['var'].'" '.$multiple.' '.$s->required.'>';
$this->html .= '
<option value="true"';
if(isset($s->value) || $s->value == "true" || $s->value == "1")
$this->html .= ' selected="selected"';
$this->html .= '>'.__('button.bool_yes').'</option>';
$this->html .= '
<option value="false"';
if(!isset($s->value) || $s->value == "false" || $s->value == "0")
$this->html .= ' selected="selected"';
$this->html .= '>'.__('button.bool_no').'</option>';
$this->html .= '
</select>
</div>
<label for="'.$s["var"].'">'.$s["label"].'</label>';
}
private function outTextarea($s){
$this->html .= '
<textarea
id="'.$s["var"].'"
name="'.$s["var"].'"
type="'.$s['type'].'"
label="'.$s['label'].'"
required="'.$s->required.'">';
foreach($s->children() as $value){
if($value->getName() == "value"){
$this->html .= $value. "\n";
}
}
$this->html .= '</textarea>';
$this->html .= '
<label for="'.$s["var"].'">'.$s["label"].'</label>';
}
private function outInput($s, $type, $multiple){
if($s->required)
$req = 'required';
$this->html .= '
<input id="'.$s["var"].'" name="'.$s["var"].'" value="';
foreach($s->children() as $value){
if($value->getName() == "value"){
$this->html .= $value;
}
}
$this->html .= '"';
if($s['var'] == 'username')
$this->html .= ' pattern="[a-z0-9_-]*" ';
$this->html .= '
type="'.$type.'"
title="'.$s->desc.'"
type="'.$s['type'].'"
label="'.$s['label'].'"
'.$multiple.' '.$req.'/>
<label for="'.$s["var"].'">'.$s["label"].'</label>';
}
private function outHiddeninput($s){
$this->html .= '
<input type="hidden" name="'.$s["var"].'" value="'.$s->value.'" />';
}
private function outList($s, $multiple){
$this->html .= '
<div class="select">
<select
type="'.$s['type'].'"
label="'.$s['label'].'"
id="'.$s["var"].'"
name="'.$s['var'].'" '.$multiple.' '.$s->required.'>';
if(count($s->xpath('option')) > 0){
foreach($s->option as $option){
$this->html .= '
<option value="'.$option->value.'"';
if(in_array((string)$option->value, $s->xpath('value')))
$this->html .= ' selected';
$this->html .= '>'.
$option->value.'
</option>';
}
}
else{
foreach($s->value as $option){
$this->html .= '
<option value="'.$option['label'].'" selected>'.
$option.'
</option>';
}
}
$this->html .= '
</select>
</div>
<label for="'.$s["var"].'">'.$s["label"].'</label>';
}
}
class FormtoXMPP{
private $stream;
private $inputs;
private $dataform;
public function __construct(){
$this->stream = '';
$this->inputs = array();
$this->dataform = true;
}
public function getXMPP($stream, $inputs){
$this->setXMPP($stream);
$this->setInputs($inputs);
$this->create();
return $this->stream;
}
public function setXMPP($stream){
$this->stream = new SimpleXMLElement($stream);
}
public function setInputs($inputs){
$this->inputs = $inputs;
}
public function setDataformOff() {
$this->dataform = false;
}
public function create(){
switch($this->stream->getName()){
case "stream":
$node = $this->stream->iq->query->x;
break;
case "pubsub":
$node = $this->stream->configure->x;
break;
case "command":
$node = $this->stream->x;
break;
default:
$node = $this->stream->x;
break;
}
foreach($this->inputs as $key => $value) {
if($value === '' && $this->stream->getName() == "stream") {
RPC::call('movim_reload', Route::urlize('account','datamissing'));
RPC::commit();
exit;
} elseif(substr($key, 0, 8) == 'generic_') {
$key = str_replace('generic_', '', $key);
if (!is_string($value)) {
$value = $value->value;
}
$node->addChild($key, $value);
} elseif($value->attributes) {
$field = $node->addChild('field');
if($value == 'true' || $value === 1)
$value = '1';
if($value == 'false' || $value === 0)
$value = '0';
$field->addChild('value', trim($value->value));
if(isset($value->attributes->required))
$field->addChild('required', '');
$field->addAttribute('var', $value->attributes->name);
$field->addAttribute('type', $value->attributes->xmpptype);
$field->addAttribute('label', $value->attributes->xmpplabel);
} else{
$field = $node->addChild('field');
if($value == 'true')
$value = '1';
if($value == 'false')
$value = '0';
if(is_bool($value)) {
$value = ($value) ? '1' : '0';
}
$field->addChild('value', trim($value));
$field->addAttribute('var', trim($key));
}
}
}
}
?>