AutorÃa | Ultima modificación | Ver Log |
<?php// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>./*** An attribute changes how a field is designated or behaves.** @package block_dash* @copyright 2019 bdecent gmbh <https://bdecent.de>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/namespace block_dash\local\data_grid\field\attribute;use block_dash\local\dash_framework\structure\field_interface;use stdClass;/*** An attribute changes how field output is formatted.** @package block_dash*/abstract class abstract_field_attribute implements field_attribute_interface {/*** @var array*/private $options = [];/*** Field.** @var field_interface*/private $field;/*** List of placeholder fields.** @var [type]*/protected $placeholders;/*** New attribute.** @param array $options*/public function __construct(array $options = []) {$this->set_options($options);}/*** Set the field this attribute is attached to.** @param field_interface $field*/public function set_field(field_interface $field) {$this->field = $field;}/*** Get the field this attribute is attached to.** @return field_interface*/public function get_field() {return $this->field;}/*** After records are relieved from database each field has a chance to transform the data.* Example: Convert unix timestamp into a human readable date format** @param mixed $data Raw data associated with this field.* @param \stdClass $record Full record from database.* @return mixed*/public function transform_data($data, \stdClass $record) {return $data;}// Region Options./*** Get a single option.** @param string $name* @return mixed|null*/public function get_option($name) {return isset($this->options[$name]) ? $this->options[$name] : null;}/*** Set option on field.** @param string $name* @param string $value*/public function set_option($name, $value) {$this->options[$name] = $value;}/*** Set options on field.** @param array $options*/public function set_options($options) {foreach ($options as $name => $value) {$this->set_option($name, $value);}}/*** Get all options for this field.** @return array*/public function get_options() {return $this->options;}/*** Add option.** @param string $name* @param string $value*/public function add_option($name, $value) {$this->options[$name] = $value;}/*** Is the attribute needs to receive the data.** @return bool*/public function is_needs_construct_data() {return false;}/*** Set the custom data options to transform the data.** @param mixed $field* @return void*/public function set_transform_field($field) {}/*** Set the placeholders, this will help to use the values of table field in developer addon.** @param array $placeholders* @return void*/public function set_placeholders(array $placeholders) {$this->placeholders = $placeholders;}/*** Update the placeholder fields values with data.** @param \stdClass $data* @param string $valuestr* @return void*/public function update_placeholders(\stdClass $data, string $valuestr) {$amethods = $this->placeholders;foreach ($amethods as $fieldname) {$replacement = "{" . $fieldname . "}";// Message text placeholder update.if (stripos($valuestr, $replacement) !== false) {$alias = str_replace('.', '_', $fieldname);$val = $data->$alias ?? '';// Placeholder found on the text, then replace with data.$valuestr = str_ireplace($replacement, $val, $valuestr);}}return $valuestr ?? '';}// Endregion.}