TF Learn (Tech Fry) + techfry library 1.3.4; login-gated, no repo -> deployed files. Signed-off-by: LÁZÁR Imre <imre@illusion.hu> Assisted-by: claude-code@claude-opus-4-8
412 lines
13 KiB
PHP
412 lines
13 KiB
PHP
<?php
|
|
/*
|
|
* @package Tech Fry Library
|
|
* @license https://www.gnu.org/licenses/gpl-3.0.en.html
|
|
*/
|
|
|
|
namespace TechFry\Library;
|
|
|
|
defined('_JEXEC') or die;
|
|
|
|
// Script for Xml
|
|
|
|
class TfXml
|
|
{
|
|
public static function start_field($field)
|
|
{
|
|
// name, type, label, description, required, default, hint, readonly
|
|
|
|
$output = '<field name="' . $field->name . '"';
|
|
$output .= ' type="' . $field->type . '"';
|
|
$output .= ' label="' . $field->label . '"';
|
|
$output .= ' description="' . $field->description . '"';
|
|
|
|
$output .= (isset($field->default_value)) ? ' default="' . $field->default_value . '"' : '';
|
|
|
|
$output .= (isset($field->hint)) ? ' hint="' . $field->hint . '"' : '';
|
|
|
|
$output .= (isset($field->required)) ? ' required="' . $field->required . '"' : '';
|
|
|
|
$output .= (isset($field->readonly)) ? ' readonly="' . $field->readonly . '"' : '';
|
|
|
|
return $output;
|
|
}
|
|
|
|
// Set options for list, radio, checkboxes
|
|
public static function set_field_options($options)
|
|
{
|
|
$output = '';
|
|
|
|
if (is_string($options))
|
|
{
|
|
$options_obj = explode(',', $options);
|
|
foreach ($options_obj as $opt)
|
|
{
|
|
$output .= '<option value="' . $opt . '">' . $opt . '</option>';
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach ($options as $opt)
|
|
{
|
|
if (is_array($opt))
|
|
{
|
|
$opt = (object) $opt;
|
|
}
|
|
$output .= '<option value="' . $opt->value . '">' . $opt->name . '</option>';
|
|
}
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
|
|
// A-01. Text Field
|
|
public static function field_text($field)
|
|
{
|
|
// maxlength
|
|
|
|
$output = self::start_field($field);
|
|
|
|
$output .= ' maxlength="' . $field->maxlength . '"';
|
|
|
|
$output .= '></field>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
// A-02. Email Field
|
|
public static function field_email($field)
|
|
{
|
|
$output = self::start_field($field);
|
|
|
|
$output .= '></field>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
// A-03. Url Field
|
|
public static function field_url($field)
|
|
{
|
|
// maxlength, relative
|
|
|
|
$output = self::start_field($field);
|
|
|
|
$output .= (isset($field->relative)) ? ' relative="' . $field->relative . '"' : '';
|
|
$output .= (isset($field->maxlength)) ? ' maxlength="' . $field->maxlength . '"' : '';
|
|
|
|
$output .= '></field>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
// A-04. List Field (Also used for checkboxes)
|
|
public static function field_list($field)
|
|
{
|
|
// multiple, layout
|
|
|
|
$output = self::start_field($field);
|
|
|
|
$output .= (isset($field->form_layout)) ? ' layout="' . $field->form_layout . '"' : '';
|
|
$output .= (isset($field->multiple)) ? ' multiple="' . $field->multiple . '"' : '';
|
|
|
|
$output .= '>';
|
|
|
|
// Options
|
|
$output .= self::set_field_options($field->options);
|
|
|
|
$output .= '</field>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
// A-05. Radio Field
|
|
public static function field_radio($field)
|
|
{
|
|
// layout
|
|
|
|
$output = self::start_field($field);
|
|
|
|
$output .= (isset($field->form_layout)) ? ' layout="' . $field->form_layout . '"' : '';
|
|
|
|
$output .= '>';
|
|
|
|
// Options
|
|
$output .= self::set_field_options($field->options);
|
|
|
|
$output .= '</field>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
// A-06. Integer Field
|
|
public static function field_integer($field)
|
|
{
|
|
// first, last, step
|
|
|
|
$output = self::start_field($field);
|
|
|
|
$output .= ' first="' . $field->first . '"';
|
|
$output .= ' last="' . $field->last . '"';
|
|
$output .= ' step="' . $field->step . '"';
|
|
|
|
$output .= '></field>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
// A-07. Number Field (Also used for Range)
|
|
public static function field_number($field)
|
|
{
|
|
// min, max, step
|
|
|
|
if ($field->options != '')
|
|
{
|
|
$arr = str_getcsv($field->options);
|
|
foreach ($arr as $v)
|
|
{
|
|
$a = explode(':', $v);
|
|
$var = $a[0];
|
|
$field->$var = $a[1];
|
|
}
|
|
}
|
|
|
|
$output = self::start_field($field);
|
|
|
|
$output .= ' min="' . $field->min . '"';
|
|
$output .= ' max="' . $field->max . '"';
|
|
$output .= ' step="' . $field->step . '"';
|
|
|
|
$output .= '></field>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
// A-08. Textarea Field
|
|
public static function field_textarea($field)
|
|
{
|
|
// rows, cols
|
|
|
|
$output = self::start_field($field);
|
|
|
|
$output .= ' rows="' . $field->rows . '"';
|
|
$output .= ' cols="' . $field->cols . '"';
|
|
|
|
$output .= '></field>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
// A-09. Calendar Field
|
|
public static function field_calendar($field)
|
|
{
|
|
// showtime, singleheader, todaybutton, weeknumbers, filltable, translateformat, format, minyear, maxyear
|
|
|
|
$output = self::start_field($field);
|
|
|
|
$output .= (isset($field->showtime)) ? ' showtime="' . $field->showtime . '"' : '';
|
|
$output .= (isset($field->singleheader)) ? ' singleheader="' . $field->singleheader . '"' : '';
|
|
$output .= (isset($field->todaybutton)) ? ' todaybutton="' . $field->todaybutton . '"' : '';
|
|
$output .= (isset($field->weeknumbers)) ? ' weeknumbers="' . $field->weeknumbers . '"' : '';
|
|
$output .= (isset($field->filltable)) ? ' filltable="' . $field->filltable . '"' : '';
|
|
$output .= (isset($field->translateformat)) ? ' translateformat="' . $field->translateformat . '"' : '';
|
|
$output .= (isset($field->format)) ? ' format="' . $field->format . '"' : '';
|
|
$output .= (isset($field->minyear)) ? ' minyear="' . $field->minyear . '"' : '';
|
|
$output .= (isset($field->maxyear)) ? ' maxyear="' . $field->maxyear . '"' : '';
|
|
|
|
$output .= '></field>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
// A-10. Password Field
|
|
public static function field_password($field)
|
|
{
|
|
$output = self::start_field($field);
|
|
|
|
$output .= '></field>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
// A-10. File Field
|
|
public static function field_file($field)
|
|
{
|
|
// multiple
|
|
|
|
$output = self::start_field($field);
|
|
|
|
$output .= (isset($field->multiple)) ? ' multiple="' . $field->multiple . '"' : '';
|
|
|
|
$output .= '></field>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
// A-11. Note Field
|
|
public static function field_note($field)
|
|
{
|
|
// class, close
|
|
|
|
$output = self::start_field($field);
|
|
|
|
$output .= (isset($field->class_value)) ? ' class="' . $field->class_value . '"' : '';
|
|
$output .= (isset($field->close) && $field->close == 'true') ? ' close="' . $field->close . '"' : '';
|
|
|
|
$output .= '></field>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
// A-12. Filelist Field
|
|
public static function field_filelist($field)
|
|
{
|
|
// directory, fileFilter, exclude, stripext
|
|
|
|
$output = self::start_field($field);
|
|
|
|
$output .= (isset($field->directory)) ? ' directory="' . $field->directory . '"' : '';
|
|
$output .= (isset($field->fileFilter)) ? ' fileFilter="' . $field->fileFilter . '"' : '';
|
|
$output .= (isset($field->exclude)) ? ' exclude="' . $field->exclude . '"' : '';
|
|
$output .= (isset($field->stripext)) ? ' stripext="' . $field->stripext . '"' : '';
|
|
|
|
$output .= '></field>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
// A-13. Folderlist Field
|
|
public static function field_folderlist($field)
|
|
{
|
|
// directory, folderFilter, exclude, recursive
|
|
|
|
$output = self::start_field($field);
|
|
|
|
$output .= (isset($field->directory)) ? ' directory="' . $field->directory . '"' : '';
|
|
$output .= (isset($field->folderFilter)) ? ' folderFilter="' . $field->folderFilter . '"' : '';
|
|
$output .= (isset($field->exclude)) ? ' exclude="' . $field->exclude . '"' : '';
|
|
$output .= (isset($field->recursive)) ? ' recursive="' . $field->recursive . '"' : '';
|
|
|
|
$output .= '></field>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
// A-14. Imagelist Field
|
|
public static function field_imagelist($field)
|
|
{
|
|
// directory, filter, exclude, stripext
|
|
|
|
$output = self::start_field($field);
|
|
|
|
$output .= (isset($field->directory)) ? ' directory="' . $field->directory . '"' : '';
|
|
$output .= (isset($field->filter)) ? ' filter="' . $field->filter . '"' : '';
|
|
$output .= (isset($field->exclude)) ? ' exclude="' . $field->exclude . '"' : '';
|
|
$output .= (isset($field->stripext)) ? ' stripext="' . $field->stripext . '"' : '';
|
|
|
|
$output .= '></field>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
// A-15. Color Field
|
|
public static function field_color($field)
|
|
{
|
|
// format
|
|
|
|
$output = self::start_field($field);
|
|
|
|
$output .= (isset($field->format)) ? ' class="' . $field->format . '"' : '';
|
|
|
|
$output .= '></field>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
// A-16. Subform Field
|
|
public static function field_subform($field)
|
|
{
|
|
// multiple, layout
|
|
|
|
$output = self::start_field($field);
|
|
|
|
$output .= (isset($field->form_layout)) ? ' layout="' . $field->form_layout . '"' : '';
|
|
$output .= (isset($field->multiple)) ? ' multiple="' . $field->multiple . '"' : '';
|
|
|
|
$output .= '>';
|
|
|
|
// Subform fields - field_name, field_type
|
|
$output .= '<form>';
|
|
foreach ($field->subform_fields as $subform_field)
|
|
{
|
|
$output .= '<field name="' . $subform_field->field_name . '" type="' . $subform_field->field_type . '" label="' . $subform_field->field_name . '" />';
|
|
}
|
|
$output .= '</form>';
|
|
|
|
$output .= '</field>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
// B-01. Limit field
|
|
public static function filter_limit_field()
|
|
{
|
|
$element = '<field name="limit" type="limitbox" label="JGLOBAL_LIST_LIMIT" default="25" onchange="this.form.submit();" />';
|
|
|
|
return $element;
|
|
}
|
|
|
|
// B-02. Ordering field
|
|
public static function filter_ordering_field($orderCol)
|
|
{
|
|
$element = '<field name="fullordering" type="list" label="JGLOBAL_SORT_BY" onchange="this.form.submit();" default="' . $orderCol . ' DESC" validate="options">';
|
|
|
|
$element .= '<option value="">JGLOBAL_SORT_BY</option>';
|
|
|
|
$element .= '</field>';
|
|
|
|
return $element;
|
|
}
|
|
|
|
// B-03. Published field
|
|
public static function filter_published_field()
|
|
{
|
|
$element = '<field name="published" type="list" label="JOPTION_SELECT_PUBLISHED" onchange="this.form.submit();">';
|
|
|
|
$element .= '<option value="">JOPTION_SELECT_PUBLISHED</option><option value="1">JPUBLISHED</option><option value="0">JUNPUBLISHED</option>';
|
|
$element .= '<option value="2">JARCHIVED</option><option value="-2">JTRASHED</option><option value="*">JALL</option>';
|
|
$element .= '</field>';
|
|
|
|
return $element;
|
|
}
|
|
|
|
// B-04. Access field
|
|
public static function filter_access_field()
|
|
{
|
|
$element = '<field name="access" type="accesslevel" label="JGRID_HEADING_ACCESS" multiple="true" layout="joomla.form.field.list-fancy-select"';
|
|
|
|
$element .= ' hint="JOPTION_SELECT_ACCESS" onchange="this.form.submit();" />';
|
|
|
|
return $element;
|
|
}
|
|
|
|
// B-05. Note field
|
|
public static function filter_note_field($table_name)
|
|
{
|
|
$element = '<field name="note" type="sql" query="SELECT DISTINCT note FROM #__' . $table_name . ' ORDER BY note ASC" key_field="note" value_field="note"';
|
|
|
|
$element .= ' default="" layout="joomla.form.field.list-fancy-select" onchange="this.form.submit();"><option value="0">- Select Note -</option></field>';
|
|
|
|
return $element;
|
|
}
|
|
|
|
// B-06. Language field
|
|
public static function filter_language_field()
|
|
{
|
|
$element = '<field name="language" type="contentlanguage" label="JGRID_HEADING_LANGUAGE" onchange="this.form.submit();">';
|
|
|
|
$element .= '<option value="">JOPTION_SELECT_LANGUAGE</option><option value="*">JALL</option></field>';
|
|
|
|
return $element;
|
|
}
|
|
|
|
} |