Renato Lazaro Renato Lazaro - 1 month ago 4
Javascript Question

How to put mandatory field in PHP form?

I'm working on this PHP code to add a justification when the vote is less than or equal to 3, that is, not help save the form if you are within this rule. I want to return the message to the user when it is not done the justification "Please put the justification."

But I do not command PHP ask this way helps here to find the best way to make base the adjustment in the code.

enter image description here



<?php

if (!defined('GLPI_ROOT')) {
die("Sorry. You can't access directly to this file");
}

class TicketSatisfaction extends CommonDBTM {

public $dohistory = true;
public $history_blacklist = array('date_answered');


static function getTypeName($nb=0) {
return __('Satisfaction');
}


/**
* for use showFormHeader
**/
static function getIndexName() {
return 'tickets_id';
}


function getLogTypeID() {
return array('Ticket', $this->fields['tickets_id']);
}


static function canUpdate() {
return (Session::haveRight('ticket', READ));
}


/**
* Is the current user have right to update the current satisfaction
*
* @return boolean
**/
function canUpdateItem() {

$ticket = new Ticket();
if (!$ticket->getFromDB($this->fields['tickets_id'])) {
return false;
}

// you can't change if your answer > 12h
if (!is_null($this->fields['date_answered'])
&& ((strtotime("now") - strtotime($this->fields['date_answered'])) > (12*HOUR_TIMESTAMP))) {
return false;
}

if ($ticket->isUser(CommonITILActor::REQUESTER,Session::getLoginUserID())
|| ($ticket->fields["users_id_recipient"] === Session::getLoginUserID())
|| (isset($_SESSION["glpigroups"])
&& $ticket->haveAGroup(CommonITILActor::REQUESTER, $_SESSION["glpigroups"]))) {
return true;
}
return false;
}


/**
* form for satisfaction
*
* @param $ticket Object : the ticket
**/
function showForm($ticket) {

$tid = $ticket->fields['id'];
$options = array();
$options['colspan'] = 1;

// for external inquest => link
if ($this->fields["type"] == 2) {
$url = Entity::generateLinkSatisfaction($ticket);
echo "<div class='center spaced'>".
"<a href='$url'>".__('External survey')."</a><br>($url)</div>";

// for internal inquest => form
} else {
$this->showFormHeader($options);

// Set default satisfaction to 3 if not set
if (is_null($this->fields["satisfaction"])) {
/* Aqui eu mudo a estrelas da pesquisa de satisfação*/
$this->fields["satisfaction"] = 3;
}
echo "<tr class='tab_bg_2'>";
echo "<td>".__('Satisfaction with the resolution of the ticket')."</td>";
echo "<td>";
echo "<input type='hidden' name='tickets_id' value='$tid'>";

echo "<select id='satisfaction_data' name='satisfaction'>";

for ($i=0 ; $i<=5 ; $i++) {
echo "<option value='$i' ".(($i == $this->fields["satisfaction"])?'selected':'').
">$i</option>";
}
echo "</select>";
echo "<div class='rateit' id='stars'></div>";
echo "<script type='text/javascript'>\n";
echo "$('#stars').rateit({value: ".$this->fields["satisfaction"].",
min : 0,
max : 5,
step: 1,
backingfld: '#satisfaction_data',
ispreset: true,
resetable: false});";
echo "</script>";

echo "</td></tr>";

echo "<tr class='tab_bg_2'>";
echo "<td rowspan='1'>".__('Comments')."</td>";
echo "<td rowspan='1' class='middle'>";
echo "<textarea cols='45' rows='7' name='comment' >".$this->fields["comment"]."</textarea>";
echo "</td></tr>\n";

if ($this->fields["date_answered"] > 0) {
echo "<tr class='tab_bg_2'>";
echo "<td>".__('Response date to the satisfaction survey')."</td><td>";
echo Html::convDateTime($this->fields["date_answered"])."</td></tr>\n";
}

$options['candel'] = false;
$this->showFormButtons($options);
}
}


function prepareInputForUpdate($input) {
global $CFG_GLPI;

if ($input['satisfaction'] >= 0) {
$input["date_answered"] = $_SESSION["glpi_currenttime"];
}

return $input;
}


function post_addItem() {
global $CFG_GLPI;

if ($CFG_GLPI["use_mailing"]) {
$ticket = new Ticket();
if ($ticket->getFromDB($this->fields['tickets_id'])) {
NotificationEvent::raiseEvent("satisfaction", $ticket);
}
}
}


/**
* @since version 0.85
**/
function post_UpdateItem($history=1) {
global $CFG_GLPI;

if ($CFG_GLPI["use_mailing"]) {
$ticket = new Ticket();
if ($ticket->getFromDB($this->fields['tickets_id'])) {
NotificationEvent::raiseEvent("replysatisfaction", $ticket);
}
}
}


/**
* display satisfaction value
*
* @param $value decimal between 0 and 5
**/
static function displaySatisfaction($value) {

if ($value < 0) {
$value = 0;
}
if ($value > 5) {
$value = 5;
}

$out = "<div class='rateit' data-rateit-value='$value' data-rateit-ispreset='true'
data-rateit-readonly='true'></div>";

return $out;
}


/**
* Get name of inquest type
*
* @param $value status ID
**/
static function getTypeInquestName($value) {

switch ($value) {
case 1 :
return __('Internal survey');

case 2 :
return __('External survey');

default :
// Get value if not defined
return $value;
}
}


/**
* @since version 0.84
*
* @param $field
* @param $values
* @param $options array
**/
static function getSpecificValueToDisplay($field, $values, array $options=array()) {

if (!is_array($values)) {
$values = array($field => $values);
}
switch ($field) {
case 'type':
return self::getTypeInquestName($values[$field]);
}
return parent::getSpecificValueToDisplay($field, $values, $options);
}


/**
* @since version 0.84
*
* @param $field
* @param $name (default '')
* @param $values (default '')
* @param $options array
**/
static function getSpecificValueToSelect($field, $name='', $values='', array $options=array()) {

if (!is_array($values)) {
$values = array($field => $values);
}
$options['display'] = false;

switch ($field) {
case 'type' :
$options['value'] = $values[$field];
$typeinquest = array(1 => __('Internal survey'),
2 => __('External survey'));
return Dropdown::showFromArray($name, $typeinquest, $options);
}
return parent::getSpecificValueToSelect($field, $name, $values, $options);
}

}
?>




Answer

Simple solution to make this field as required is to add attribute "required", therefore:

echo "<textarea cols='45' rows='7' name='comment' required>".$this->fields["comment"]."</textarea>";

And the browser will inform user to fill in this <textarea> field.

Comments