HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/confeduphaar/backip-old-files/components/com_jdbuilder/models/fields/foreignkey.php
<?php

/**
 * @package    JD Builder
 * @author     Team Joomdev <info@joomdev.com>
 * @copyright  2020 www.joomdev.com
 * @license    GNU General Public License version 2 or later; see LICENSE.txt
 */
defined('JPATH_BASE') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Form\FormField;

jimport('joomla.form.formfield');

/**
 * Supports a value from an external table
 *
 * @since  1.6
 */
class JFormFieldForeignKey extends FormField {

   /**
    * The form field type.
    *
    * @var        string
    * @since    1.6
    */
   protected $type = 'foreignkey';
   private $input_type;
   private $table;
   private $key_field;
   private $value_field;

   /**
    * Method to get the field input markup.
    *
    * @return   string  The field input markup.
    *
    * @since    1.6
    */
   protected function getInput() {
      // Type of input the field shows
      $this->input_type = $this->getAttribute('input_type');

      // Database Table
      $this->table = $this->getAttribute('table');

      // The field that the field will save on the database
      $this->key_field = (string) $this->getAttribute('key_field');

      // The column that the field shows in the input
      $this->value_field = (string) $this->getAttribute('value_field');

      // Flag to identify if the fk_value is multiple
      $this->value_multiple = (int) $this->getAttribute('value_multiple', 0);

      // Flag to identify if the fk_value hides the trashed items
      $this->hideTrashed = (int) $this->getAttribute('hide_trashed', 0);

      // Flag to identify if the fk has default order
      $this->ordering = (int) $this->getAttribute('ordering', 0);

      // Initialize variables.
      $html = '';
      $fk_value = '';

      // Load all the field options
      $db = Factory::getDbo();
      $query = $db->getQuery(true);

      // Support for multiple fields on fk_values
      if ($this->value_multiple == 1) {
         // Get the fields for multiple value
         $this->value_fields = (string) $this->getAttribute('value_field_multiple');
         $this->value_fields = explode(',', $this->value_fields);
         $this->separator = (string) $this->getAttribute('separator');

         $fk_value = ' CONCAT(';

         foreach ($this->value_fields as $field) {
            $fk_value .= $db->quoteName($field) . ', \'' . $this->separator . '\', ';
         }

         $fk_value = substr($fk_value, 0, -(strlen($this->separator) + 6));
         $fk_value .= ') AS ' . $db->quoteName($this->value_field);
      } else {
         $fk_value = $db->quoteName($this->value_field);
      }

      $query
              ->select(
                      array(
                          $db->quoteName($this->key_field),
                          $fk_value
                      )
              )
              ->from($this->table);

      if ($this->hideTrashed) {
         $query->where($db->quoteName('state') . ' != -2');
      }

      if ($this->ordering) {
         $query->order('ordering ASC');
      }

      $db->setQuery($query);
      $results = $db->loadObjectList();

      $input_options = 'class="' . $this->getAttribute('class') . '"';

      // Depends of the type of input, the field will show a type or another
      switch ($this->input_type) {
         case 'list':
         default:
            $options = array();

            // Iterate through all the results
            foreach ($results as $result) {
               $options[] = JHtml::_('select.option', $result->{$this->key_field}, $result->{$this->value_field});
            }

            $value = $this->value;

            // If the value is a string -> Only one result
            if (is_string($value)) {
               $value = array($value);
            } elseif (is_object($value)) {
               // If the value is an object, let's get its properties.
               $value = get_object_vars($value);
            }

            // If the select is multiple
            if ($this->multiple) {
               $input_options .= 'multiple="multiple"';
            } else {
               array_unshift($options, JHtml::_('select.option', '', ''));
            }

            $html = JHtml::_('select.genericlist', $options, $this->name, $input_options, 'value', 'text', $value, $this->id);
            break;
      }

      return $html;
   }

   /**
    * Wrapper method for getting attributes from the form element
    *
    * @param   string  $attr_name  Attribute name
    * @param   mixed   $default    Optional value to return if attribute not found
    *
    * @return mixed The value of the attribute if it exists, null otherwise
    */
   public function getAttribute($attr_name, $default = null) {
      if (!empty($this->element[$attr_name])) {
         return $this->element[$attr_name];
      } else {
         return $default;
      }
   }

}