Added elements alignment support (#121)
This commit is contained in:
parent
80dc7395c3
commit
383054be39
9 changed files with 109 additions and 3 deletions
|
@ -37,6 +37,21 @@ defined('MOODLE_INTERNAL') || die();
|
||||||
*/
|
*/
|
||||||
abstract class element {
|
abstract class element {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string The left alignment constant.
|
||||||
|
*/
|
||||||
|
const ALIGN_LEFT = 'L';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string The centered alignment constant.
|
||||||
|
*/
|
||||||
|
const ALIGN_CENTER = 'C';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string The right alignment constant.
|
||||||
|
*/
|
||||||
|
const ALIGN_RIGHT = 'R';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var \stdClass $element The data for the element we are adding - do not use, kept for legacy reasons.
|
* @var \stdClass $element The data for the element we are adding - do not use, kept for legacy reasons.
|
||||||
*/
|
*/
|
||||||
|
@ -97,6 +112,11 @@ abstract class element {
|
||||||
*/
|
*/
|
||||||
protected $refpoint;
|
protected $refpoint;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string The alignment.
|
||||||
|
*/
|
||||||
|
protected $alignment;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var bool $showposxy Show position XY form elements?
|
* @var bool $showposxy Show position XY form elements?
|
||||||
*/
|
*/
|
||||||
|
@ -130,6 +150,7 @@ abstract class element {
|
||||||
$this->width = $element->width;
|
$this->width = $element->width;
|
||||||
$this->refpoint = $element->refpoint;
|
$this->refpoint = $element->refpoint;
|
||||||
$this->showposxy = isset($showposxy) && $showposxy;
|
$this->showposxy = isset($showposxy) && $showposxy;
|
||||||
|
$this->set_alignment(isset($element->alignment) ? $element->alignment : element::ALIGN_LEFT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -231,6 +252,30 @@ abstract class element {
|
||||||
return $this->refpoint;
|
return $this->refpoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the alignment.
|
||||||
|
*
|
||||||
|
* @return string The current alignment value.
|
||||||
|
*/
|
||||||
|
public function get_alignment() {
|
||||||
|
return isset($this->alignment) ? $this->alignment : element::ALIGN_LEFT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the alignment.
|
||||||
|
*
|
||||||
|
* @param string $alignment The new alignment.
|
||||||
|
*
|
||||||
|
* @throws InvalidArgumentException if the provided new alignment is not valid.
|
||||||
|
*/
|
||||||
|
protected function set_alignment($alignment) {
|
||||||
|
$valid_values = array(element::ALIGN_LEFT, element::ALIGN_CENTER, element::ALIGN_RIGHT);
|
||||||
|
if (!in_array($alignment, $valid_values)) {
|
||||||
|
throw new \InvalidArgumentException("'$alignment' is not a valid alignment value. It has to be one of " . implode(', ', $valid_values));
|
||||||
|
}
|
||||||
|
$this->alignment = $alignment;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function renders the form elements when adding a customcert element.
|
* This function renders the form elements when adding a customcert element.
|
||||||
* Can be overridden if more functionality is needed.
|
* Can be overridden if more functionality is needed.
|
||||||
|
@ -246,6 +291,7 @@ abstract class element {
|
||||||
}
|
}
|
||||||
element_helper::render_form_element_width($mform);
|
element_helper::render_form_element_width($mform);
|
||||||
element_helper::render_form_element_refpoint($mform);
|
element_helper::render_form_element_refpoint($mform);
|
||||||
|
element_helper::render_form_element_alignment($mform);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -265,7 +311,8 @@ abstract class element {
|
||||||
'posx' => $this->posx,
|
'posx' => $this->posx,
|
||||||
'posy' => $this->posy,
|
'posy' => $this->posy,
|
||||||
'width' => $this->width,
|
'width' => $this->width,
|
||||||
'refpoint' => $this->refpoint
|
'refpoint' => $this->refpoint,
|
||||||
|
'alignment' => $this->get_alignment()
|
||||||
];
|
];
|
||||||
foreach ($properties as $property => $value) {
|
foreach ($properties as $property => $value) {
|
||||||
if (!is_null($value) && $mform->elementExists($property)) {
|
if (!is_null($value) && $mform->elementExists($property)) {
|
||||||
|
@ -320,6 +367,7 @@ abstract class element {
|
||||||
}
|
}
|
||||||
$element->width = (isset($data->width)) ? $data->width : null;
|
$element->width = (isset($data->width)) ? $data->width : null;
|
||||||
$element->refpoint = (isset($data->refpoint)) ? $data->refpoint : null;
|
$element->refpoint = (isset($data->refpoint)) ? $data->refpoint : null;
|
||||||
|
$element->alignment = (isset($data->alignment)) ? $data->alignment : element::ALIGN_LEFT;
|
||||||
$element->timemodified = time();
|
$element->timemodified = time();
|
||||||
|
|
||||||
// Check if we are updating, or inserting a new element.
|
// Check if we are updating, or inserting a new element.
|
||||||
|
|
|
@ -59,6 +59,7 @@ class element_factory {
|
||||||
$data->posy = $element->posy ?? null;
|
$data->posy = $element->posy ?? null;
|
||||||
$data->width = $element->width ?? null;
|
$data->width = $element->width ?? null;
|
||||||
$data->refpoint = $element->refpoint ?? null;
|
$data->refpoint = $element->refpoint ?? null;
|
||||||
|
$data->alignment = $element->alignment ?? null;
|
||||||
|
|
||||||
// Ensure the necessary class exists.
|
// Ensure the necessary class exists.
|
||||||
if (class_exists($classname)) {
|
if (class_exists($classname)) {
|
||||||
|
|
|
@ -74,6 +74,7 @@ class element_helper {
|
||||||
$w = $element->get_width();
|
$w = $element->get_width();
|
||||||
$refpoint = $element->get_refpoint();
|
$refpoint = $element->get_refpoint();
|
||||||
$actualwidth = $pdf->GetStringWidth($content);
|
$actualwidth = $pdf->GetStringWidth($content);
|
||||||
|
$alignment = $element->get_alignment();
|
||||||
|
|
||||||
if ($w and $w < $actualwidth) {
|
if ($w and $w < $actualwidth) {
|
||||||
$actualwidth = $w;
|
$actualwidth = $w;
|
||||||
|
@ -104,7 +105,7 @@ class element_helper {
|
||||||
$w += 0.0001;
|
$w += 0.0001;
|
||||||
}
|
}
|
||||||
$pdf->setCellPaddings(0, 0, 0, 0);
|
$pdf->setCellPaddings(0, 0, 0, 0);
|
||||||
$pdf->writeHTMLCell($w, 0, $x, $y, $content, 0, 0, false, true);
|
$pdf->writeHTMLCell($w, 0, $x, $y, $content, 0, 0, false, true, $alignment);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -205,6 +206,23 @@ class element_helper {
|
||||||
$mform->addHelpButton('refpoint', 'refpoint', 'customcert');
|
$mform->addHelpButton('refpoint', 'refpoint', 'customcert');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper function to render the alignment form element.
|
||||||
|
*
|
||||||
|
* @param \MoodleQuickForm $mform the edit_form instance.
|
||||||
|
*/
|
||||||
|
public static function render_form_element_alignment($mform) {
|
||||||
|
$alignmentoptions = array();
|
||||||
|
$alignmentoptions[element::ALIGN_LEFT] = get_string('alignleft', 'customcert');
|
||||||
|
$alignmentoptions[element::ALIGN_CENTER] = get_string('aligncenter', 'customcert');
|
||||||
|
$alignmentoptions[element::ALIGN_RIGHT] = get_string('alignright', 'customcert');
|
||||||
|
|
||||||
|
$mform->addElement('select', 'alignment', get_string('alignment', 'customcert'), $alignmentoptions);
|
||||||
|
$mform->setType('alignment', PARAM_ALPHA);
|
||||||
|
$mform->setDefault('alignment', element::ALIGN_LEFT);
|
||||||
|
$mform->addHelpButton('alignment', 'alignment', 'customcert');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper function to performs validation on the colour element.
|
* Helper function to performs validation on the colour element.
|
||||||
*
|
*
|
||||||
|
|
|
@ -85,6 +85,7 @@
|
||||||
<FIELD NAME="posy" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
|
<FIELD NAME="posy" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
|
||||||
<FIELD NAME="width" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
|
<FIELD NAME="width" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
|
||||||
<FIELD NAME="refpoint" TYPE="int" LENGTH="4" NOTNULL="false" SEQUENCE="false"/>
|
<FIELD NAME="refpoint" TYPE="int" LENGTH="4" NOTNULL="false" SEQUENCE="false"/>
|
||||||
|
<FIELD NAME="alignment" TYPE="char" LENGTH="1" NOTNULL="true" DEFAULT="L" SEQUENCE="false"/>
|
||||||
<FIELD NAME="sequence" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
|
<FIELD NAME="sequence" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
|
||||||
<FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
<FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||||
<FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
<FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||||
|
|
|
@ -178,5 +178,14 @@ function xmldb_customcert_upgrade($oldversion) {
|
||||||
upgrade_mod_savepoint(true, 2020110901, 'customcert');
|
upgrade_mod_savepoint(true, 2020110901, 'customcert');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($oldversion < 2021051702) {
|
||||||
|
$table = new xmldb_table('customcert_elements');
|
||||||
|
$field = new xmldb_field('alignment', XMLDB_TYPE_CHAR, '1', null, XMLDB_NOTNULL, null, 'L', 'refpoint');
|
||||||
|
|
||||||
|
$dbman->add_field($table, $field);
|
||||||
|
|
||||||
|
upgrade_mod_savepoint(true, 2021051702, 'customcert'); // Replace with the actual version number.
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,11 @@
|
||||||
$string['activity'] = 'Activity';
|
$string['activity'] = 'Activity';
|
||||||
$string['addcertpage'] = 'Add page';
|
$string['addcertpage'] = 'Add page';
|
||||||
$string['addelement'] = 'Add element';
|
$string['addelement'] = 'Add element';
|
||||||
|
$string['aligncenter'] = 'Centered';
|
||||||
|
$string['alignleft'] = 'Left alignment';
|
||||||
|
$string['alignment'] = 'Alignment';
|
||||||
|
$string['alignment_help'] = 'This property sets the horizontal alignment of the element. Some elements may not support this, while the behaviour of others may differ.';
|
||||||
|
$string['alignright'] = 'Right alignment';
|
||||||
$string['awardedto'] = 'Awarded to';
|
$string['awardedto'] = 'Awarded to';
|
||||||
$string['cannotverifyallcertificates'] = 'You do not have the permission to verify all certificates on the site.';
|
$string['cannotverifyallcertificates'] = 'You do not have the permission to verify all certificates on the site.';
|
||||||
$string['certificate'] = 'Certificate';
|
$string['certificate'] = 'Certificate';
|
||||||
|
|
|
@ -112,6 +112,18 @@ if ($elements) {
|
||||||
default:
|
default:
|
||||||
$class = 'element refpoint-left';
|
$class = 'element refpoint-left';
|
||||||
}
|
}
|
||||||
|
switch ($element->alignment) {
|
||||||
|
case \mod_customcert\element::ALIGN_CENTER:
|
||||||
|
$class .= ' align-center';
|
||||||
|
break;
|
||||||
|
case \mod_customcert\element::ALIGN_RIGHT:
|
||||||
|
$class .= ' align-right';
|
||||||
|
break;
|
||||||
|
case \mod_customcert\element::ALIGN_LEFT:
|
||||||
|
default:
|
||||||
|
$class .= ' align-left';
|
||||||
|
break;
|
||||||
|
}
|
||||||
$html .= html_writer::tag('div', $e->render_html(), array('class' => $class,
|
$html .= html_writer::tag('div', $e->render_html(), array('class' => $class,
|
||||||
'data-refpoint' => $element->refpoint, 'id' => 'element-' . $element->id));
|
'data-refpoint' => $element->refpoint, 'id' => 'element-' . $element->id));
|
||||||
}
|
}
|
||||||
|
|
12
styles.css
12
styles.css
|
@ -57,6 +57,18 @@
|
||||||
margin: -4px -5px -5px 4px;
|
margin: -4px -5px -5px 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#page-mod-customcert-rearrange .element.align-left {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#page-mod-customcert-rearrange .element.align-center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#page-mod-customcert-rearrange .element.align-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
#page-mod-customcert-rearrange #pdf {
|
#page-mod-customcert-rearrange #pdf {
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
border-width: 1px;
|
border-width: 1px;
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
|
|
||||||
defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
||||||
|
|
||||||
$plugin->version = 2021051701; // The current module version (Date: YYYYMMDDXX).
|
$plugin->version = 2021051702; // The current module version (Date: YYYYMMDDXX).
|
||||||
$plugin->requires = 2021051700; // Requires this Moodle version (3.11).
|
$plugin->requires = 2021051700; // Requires this Moodle version (3.11).
|
||||||
$plugin->cron = 0; // Period for cron to check this module (secs).
|
$plugin->cron = 0; // Period for cron to check this module (secs).
|
||||||
$plugin->component = 'mod_customcert';
|
$plugin->component = 'mod_customcert';
|
||||||
|
|
Loading…
Reference in a new issue