lib/Ajde/Crud/Options/Fields/Field.php

Summary

Maintainability
D
1 day
Test Coverage
<?php

class Ajde_Crud_Options_Fields_Field extends Ajde_Crud_Options
{
    /**
     * @return Ajde_Crud_Options_Fields
     */
    public function up($obj = false)
    {
        return parent::up($this);
    }

    // =========================================================================
    // Select functions
    // =========================================================================

    // =========================================================================
    // Set functions
    // =========================================================================

    /**
     * Set fieldtype for field (see Ajde_Crud_Field_*).
     *
     * @param string $type
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setType($type)
    {
        return $this->_set('type', $type);
    }

    /**
     * For 'file' fieldtypes, sets the dir to save the files relative to the sites root.
     *
     * @param string $saveDir
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setSaveDir($saveDir)
    {
        return $this->_set('saveDir', $saveDir);
    }

    /**
     * For 'file' fieldtypes, sets the allowed extensions of the uploaded files.
     *
     * @param array $extensions
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setExtensions($extensions)
    {
        return $this->_set('extensions', $extensions);
    }

    /**
     * For 'file' fieldtypes, can multiple files be uploaded at once?
     *
     * @param bool $multiple
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setMultiple($multiple)
    {
        return $this->_set('multiple', $multiple);
    }

    /**
     * Overrides the field label.
     *
     * @param string $label
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setLabel($label)
    {
        return $this->_set('label', $label);
    }

    /**
     * Overrides the field length.
     *
     * @param int $length
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setLength($length)
    {
        return $this->_set('length', $length);
    }

    /**
     * Sets the options for an ENUM/SET field.
     *
     * @param $array
     *
     * @return $this
     */
    public function setOptions($array)
    {
        return $this->_set('length', implode(', ', $array));
    }

    /**
     * Overrides whether the field is required.
     *
     * @param bool $isRequired
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setIsRequired($isRequired)
    {
        return $this->_set('isRequired', $isRequired);
    }

    /**
     * Overrides the default value.
     *
     * @param mixed $default
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setDefault($default)
    {
        return $this->_set('default', $default);
    }

    /**
     * Filter based on language.
     *
     * @param mixed $mode On of false|'parent'|'page'
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setFilterLang($mode)
    {
        return $this->_set('filterLang', $mode);
    }

    /**
     * Overrides whether the field has the auto increment attribute.
     *
     * @param bool $isAutoIncrement
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setIsAutoIncrement($isAutoIncrement)
    {
        return $this->_set('isAutoIncrement', $isAutoIncrement);
    }

    /**
     * Sets the helptext.
     *
     * @param string help
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setHelp($help)
    {
        return $this->_set('help', $help);
    }

    /**
     * Whether the field is read only.
     *
     * @param bool $isReadonly
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setIsReadonly($isReadonly)
    {
        return $this->_set('readonly', $isReadonly);
    }

    /**
     * Sets the field value.
     *
     * @param string $value
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setValue($value)
    {
        return $this->_set('value', $value);
    }

    /**
     * Sets the allowed values.
     *
     * @param array $filter
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setFilter($filter)
    {
        return $this->_set('filter', $filter);
    }

    /**
     * Sets an array of Ajde_Filter to apply to field.
     *
     * @param array $advancedFilter
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setAdvancedFilter($advancedFilter)
    {
        return $this->_set('advancedFilter', $advancedFilter);
    }

    /**
     * Sets the order field of the foreign table.
     *
     * @param string $field
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setOrderBy($field)
    {
        return $this->_set('orderBy', $field);
    }

    /**
     * Sets the display function of the model for the list view.
     *
     * @param string $function
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setFunction($function)
    {
        return $this->_set('function', $function);
    }

    /**
     * Sets the class of the cell for the list view.
     *
     * @param string $function
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setListClass($className)
    {
        return $this->_set('classname', $className);
    }

    /**
     * Sets the display function arguments of the model for the list view.
     *
     * @param array $arguments
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setFunctionArgs($args)
    {
        return $this->_set('functionArgs', $args);
    }

    /**
     * Sets thumbnail dimensions of images.
     *
     * @param type $width
     * @param type $height
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setThumbDim($width, $height)
    {
        return $this->_set('thumbDim', ['width' => $width, 'height' => $height]);
    }

    /**
     * Put emphasis on this field.
     *
     * @param bool $emphasis
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setEmphasis($emphasis)
    {
        return $this->_set('emphasis', $emphasis);
    }

    /**
     * Sets placeholder for this field.
     *
     * @param string $emphasis
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setPlaceholder($placeholder)
    {
        return $this->_set('placeholder', $placeholder);
    }

    /**
     * Defines a many-to-many relationshop for fields with type 'multiple'.
     *
     * @param string $table
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setCrossReferenceTable($table)
    {
        return $this->_set('crossReferenceTable', $table);
    }

    /**
     * Sets an extra constraint for the cross reference table.
     *
     * @param string $field
     * @param string $value
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function addCrossReferenceTableConstraint($field, $value)
    {
        $constraints = ($this->has('crossRefConstraints') ? $this->get('crossRefConstraints') : []);
        $constraints[$field] = $value;

        return $this->_set('crossRefConstraints', $constraints);
    }

    /**
     * Display the label?
     *
     * @param bool $display
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setShowLabel($display)
    {
        return $this->_set('showLabel', $display);
    }

    /**
     * Sets the edit route for fields with type 'multiple'.
     *
     * @param string $route
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setEditRoute($route)
    {
        return $this->_set('editRoute', $route);
    }

    /**
     * Sets the edit route for fields with type 'multiple'.
     *
     * @param bool $flag
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setDisableAddExisting($flag)
    {
        return $this->_set('disableAddExisting', $flag);
    }

    /**
     * Sets the edit route function for fields with type 'multiple'.
     *
     * @param string $function
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setEditRouteFunction($function)
    {
        return $this->_set('editRouteFunction', $function);
    }

    /**
     * Sets the list route for fields with type 'fk'.
     *
     * @param string $route
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setListRoute($route)
    {
        return $this->_set('listRoute', $route);
    }

    /**
     * Sets the list route function for fields with type 'fk'.
     *
     * @param string $function
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setListRouteFunction($function)
    {
        return $this->_set('listRouteFunction', $function);
    }

    /**
     * Disables rich text editing for text fields.
     *
     * @param bool $disable
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setDisableRichText($disable)
    {
        return $this->_set('disableRichText', $disable);
    }

    /**
     * Sets the textarea height in em for text fields.
     *
     * @param int $em
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setTextInputHeight($em)
    {
        return $this->_set('textInputHeight', $em);
    }

    /**
     * Sets the textarea width in em for text fields.
     *
     * @param int $em
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setTextInputWidth($em)
    {
        return $this->_set('textInputWidth', $em);
    }

    /**
     * Sets the model to use for fields with type 'multiple' or 'fk'.
     *
     * @param string $model
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setModelName($model)
    {
        return $this->_set('modelName', $model);
    }

    /**
     * Sets the parent field if it is different from the model name for fields with type 'multiple'.
     *
     * @param string $field
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setParent($field)
    {
        return $this->_set('parent', $field);
    }

    /**
     * Sets the child field name if it is different from the model name for fields with type 'multiple'.
     *
     * @param string $field
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setChildField($field)
    {
        return $this->_set('childField', $field);
    }

    /**
     * Hide this field in iframe (when adding from multiple field).
     *
     * @param bool $hidden
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setHideInIframe($hidden)
    {
        return $this->_set('hideInIframe', $hidden);
    }

    /**
     * Shows this field only when another field has a certain value.
     *
     * @param string $field
     * @param mixed  $value
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function addShowOnlyWhen($field, $value)
    {
        if (!is_array($value)) {
            $value = [$value];
        }
        $showOnlyWhen = ($this->has('showOnlyWhen') ? $this->get('showOnlyWhen') : []);
        if (isset($showOnlyWhen[$field])) {
            $showOnlyWhen[$field] = array_merge($showOnlyWhen[$field], $value);
        } else {
            $showOnlyWhen[$field] = $value;
        }

        return $this->_set('showOnlyWhen', $showOnlyWhen);
    }

    /**
     * Sorts this field accoding to a dynamic sorting rule.
     *
     * @param string $field
     * @param mixed  $value
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function addDynamicSort($field, $value)
    {
        if (!is_array($value)) {
            $value = [$value];
        }
        $dynamicSort = ($this->has('dynamicSort') ? $this->get('dynamicSort') : []);
        if (isset($dynamicSort[$field])) {
            $dynamicSort[$field] = array_merge($dynamicSort[$field], $value);
        } else {
            $dynamicSort[$field] = $value;
        }

        return $this->_set('dynamicSort', $dynamicSort);
    }

    /**
     * Use a simple selector for fields with type 'multiple'.
     *
     * @param bool $simple
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setSimpleSelector($simple)
    {
        return $this->_set('simpleSelector', $simple);
    }

    /**
     * Hides the main column (for fields with type 'multiple').
     *
     * @param bool $hide
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setHideMainColumn($hide)
    {
        return $this->_set('hideMainColumn', $hide);
    }

    /**
     * Adds a column to the cross reference table (for fields with type 'multiple').
     *
     * @param string $field
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function addTableField($field)
    {
        $fields = ($this->has('tableFields') ? $this->get('tableFields') : []);
        $fields[] = ['name' => $field, 'type' => 'text'];

        return $this->_set('tableFields', $fields);
    }

    /**
     * Adds an image column to the cross reference table (for fields with type 'multiple').
     *
     * @param string $field
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function addTableFileField($field, $saveDir)
    {
        $fields = ($this->has('tableFields') ? $this->get('tableFields') : []);
        $fields[] = ['name' => $field, 'type' => 'file', 'saveDir' => $saveDir];

        return $this->_set('tableFields', $fields);
    }

    /**
     * Defines a sort field on the foreign table.
     *
     * @param string $table
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function addSortField($field)
    {
        $fields = ($this->has('tableFields') ? $this->get('tableFields') : []);
        $fields[] = ['name' => $field, 'type' => 'sort'];
        $this->setSortBy($field);

        return $this->_set('tableFields', $fields);
    }

    /**
     * Adds an image column to the cross reference table (for fields with type 'multiple').
     *
     * @param string $field
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function addMetaField($metaId, $function = false)
    {
        $fields = ($this->has('tableFields') ? $this->get('tableFields') : []);
        $fields[] = ['name' => $metaId, 'type' => 'meta', 'function' => $function];

        return $this->_set('tableFields', $fields);
    }

    /**
     * Sort the foreign table by this field.
     *
     * @param string $table
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setSortBy($field)
    {
        return $this->_set('sortBy', $field);
    }

    /**
     * Prefills the foreign record with this value when adding/editing.
     *
     * @param string $field
     * @param string $value
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function addPrefillField($field, $value)
    {
        $fields = ($this->has('prefillField') ? $this->get('prefillField') : []);
        $fields[$field] = $value;

        return $this->_set('prefillField', $fields);
    }

    /**
     * Use an image for spatial field instead of Google Maps or
     * use an image in fk selected field (with setUsePopupSelector=true).
     *
     * @param bool $image
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setUseImage($image)
    {
        return $this->_set('useImage', $image);
    }

    /**
     * Use this image for spatial field instead of Google Maps.
     *
     * @param string $image
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setLayerImage($image)
    {
        return $this->_set('layerImage', $image);
    }

    /**
     * Type db column for fields with type 'media'.
     *
     * @param string $fieldname
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setTypeField($fieldname)
    {
        return $this->_set('typeField', $fieldname);
    }

    /**
     * Type db column for fields with type 'media'.
     *
     * @param string $fieldname
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setThumbField($fieldname)
    {
        return $this->_set('thumbField', $fieldname);
    }

    /**
     * Filename db column for fields with type 'media'.
     *
     * @param string $fieldname
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setFilenameField($fieldname)
    {
        return $this->_set('filenameField', $fieldname);
    }

    /**
     * Use popup list selector for fk or multiple type fields.
     *
     * @param bool $use
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setUsePopupSelector($use)
    {
        return $this->_set('usePopupSelector', $use);
    }

    /**
     * Use this package for fields with type icon.
     *
     * @param string $package
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setIconPackage($package)
    {
        return $this->_set('iconPackage', $package);
    }

    /**
     * Use max chars in list view.
     *
     * @param string $package
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setMaxChars($maxChars)
    {
        return $this->_set('maxChars', $maxChars);
    }

    /**
     * Sets the fields to clone when creating a translation.
     *
     * @param array $fields
     *
     * @return Ajde_Crud_Options_Fields_Field
     */
    public function setCloneFields($array)
    {
        return $this->_set('cloneFields', $array);
    }
}