Adding LP extra field see BT#7975

1.10.x
Julio Montoya 11 years ago
parent e5b5042e82
commit e8c1cdcc2b
  1. 47
      main/admin/extra_fields.php
  2. 7
      main/inc/ajax/extra_field.ajax.php
  3. 84
      main/inc/lib/extra_field.lib.php
  4. 103
      main/inc/lib/extra_field_option.lib.php
  5. 227
      main/inc/lib/extra_field_value.lib.php
  6. 6
      main/newscorm/lp_controller.php
  7. 22
      main/newscorm/lp_edit.php

@ -10,6 +10,9 @@ $language_file = array('admin');
$cidReset = true; $cidReset = true;
$cidReset = true;
require_once '../inc/global.inc.php';
$extraFieldType = isset($_REQUEST['type']) ? $_REQUEST['type'] : null; $extraFieldType = isset($_REQUEST['type']) ? $_REQUEST['type'] : null;
$this_section = SECTION_PLATFORM_ADMIN; $this_section = SECTION_PLATFORM_ADMIN;
@ -25,7 +28,6 @@ $interbreadcrumb[]=array('url' => 'index.php','name' => get_lang('PlatformAdmin'
$tool_name = null; $tool_name = null;
$action = isset($_GET['action']) ? $_GET['action'] : null; $action = isset($_GET['action']) ? $_GET['action'] : null;
if (!in_array($extraFieldType, ExtraField::getValidExtraFieldTypes())) { if (!in_array($extraFieldType, ExtraField::getValidExtraFieldTypes())) {
api_not_allowed(); api_not_allowed();
} }
@ -169,3 +171,46 @@ switch ($action) {
break; break;
} }
Display :: display_footer(); Display :: display_footer();
/*
CREATE TABLE IF NOT EXISTS lp_field(
id INT NOT NULL auto_increment,
field_type int NOT NULL DEFAULT 1,
field_variable varchar(64) NOT NULL,
field_display_text varchar(64),
field_default_value text,
field_order int,
field_visible tinyint default 0,
field_changeable tinyint default 0,
field_filter tinyint default 0,
tms DATETIME NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY(id)
);
DROP TABLE IF EXISTS lp_field_options;
CREATE TABLE IF NOT EXISTS lp_field_options (
id int NOT NULL auto_increment,
field_id int NOT NULL,
option_value text,
option_display_text varchar(64),
option_order int,
tms DATETIME NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id)
);
DROP TABLE IF EXISTS lp_field_values;
CREATE TABLE IF NOT EXISTS lp_field_values(
id bigint NOT NULL auto_increment,
lp_id int unsigned NOT NULL,
field_id int NOT NULL,
field_value text,
comment VARCHAR(100) default '',
tms DATETIME NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY(id)
);
ALTER TABLE lp_field_values ADD INDEX (lp_id, field_id);
*/

@ -16,6 +16,13 @@ switch ($action) {
echo $field_options->get_second_select_field_options_by_field($field_id, $option_value_id, true); echo $field_options->get_second_select_field_options_by_field($field_id, $option_value_id, true);
} }
break; break;
case 'search_tags':
$type = isset($_REQUEST['type']) ? $_REQUEST['type'] : null;
$fieldId = isset($_REQUEST['field_id']) ? $_REQUEST['field_id'] : null;
$tag = isset($_REQUEST['tag']) ? $_REQUEST['tag'] : null;
$extraFieldOption = new ExtraFieldOption($type);
echo $extraFieldOption->getSearchOptionsByField($tag, $fieldId, 10, 'json');
break;
default: default:
exit; exit;
break; break;

@ -104,6 +104,16 @@ class ExtraField extends Model
$this->handlerEntityId = 'questionId'; $this->handlerEntityId = 'questionId';
$this->primaryKey = 'iid'; $this->primaryKey = 'iid';
break; break;
case 'lp':
$this->table_field_options = Database::get_main_table(TABLE_MAIN_LP_FIELD_OPTIONS);
$this->table_field_values = Database::get_main_table(TABLE_MAIN_LP_FIELD_VALUES);
// Used for the model
$this->table = Database::get_main_table(TABLE_MAIN_LP_FIELD);
$this->handler_id = 'lp_id';
$this->handlerEntityId = 'lpId';
$this->primaryKey = 'id';
break;
} }
$this->pageUrl = 'extra_fields.php?type='.$this->type; $this->pageUrl = 'extra_fields.php?type='.$this->type;
// Example QuestionFields // Example QuestionFields
@ -116,7 +126,8 @@ class ExtraField extends Model
'user', 'user',
'course', 'course',
'session', 'session',
'question' 'question',
'lp'
); );
} }
@ -197,9 +208,6 @@ class ExtraField extends Model
switch ($handler) { switch ($handler) {
case 'course': case 'course':
case 'session': case 'session':
unset($types[self::FIELD_TYPE_TAG]);
unset($types[self::FIELD_TYPE_SOCIAL_PROFILE]);
break;
case 'user': case 'user':
break; break;
} }
@ -219,6 +227,7 @@ class ExtraField extends Model
if (empty($form)) { if (empty($form)) {
return false; return false;
} }
$extra_data = false; $extra_data = false;
if (!empty($item_id)) { if (!empty($item_id)) {
$extra_data = self::get_handler_extra_data($item_id); $extra_data = self::get_handler_extra_data($item_id);
@ -226,8 +235,8 @@ class ExtraField extends Model
$form->setDefaults($extra_data); $form->setDefaults($extra_data);
} }
} }
$extra_fields = $this->get_all(null, 'option_order');
$extra_fields = $this->get_all(null, 'option_order');
$extra = $this->set_extra_fields_in_form( $extra = $this->set_extra_fields_in_form(
$form, $form,
$extra_data, $extra_data,
@ -461,21 +470,22 @@ class ExtraField extends Model
/** /**
* @param FormValidator $form * @param FormValidator $form
* @param array $extra_data * @param array $extraData
* @param string $form_name * @param string $form_name
* @param bool $admin_permissions * @param bool $admin_permissions
* @param null $user_id * @param int $user_id
* @param string $type * @param array $extra
* @param null $extra * @param int $itemId
*
* @return array * @return array
*/ */
public function set_extra_fields_in_form( public function set_extra_fields_in_form(
$form, $form,
$extra_data, $extraData,
$form_name, $form_name,
$admin_permissions = false, $admin_permissions = false,
$user_id = null, $user_id = null,
$extra = null, $extra = array(),
$itemId = null $itemId = null
) { ) {
$user_id = intval($user_id); $user_id = intval($user_id);
@ -499,8 +509,8 @@ class ExtraField extends Model
$valueToFind = $field_details['field_default_value']; $valueToFind = $field_details['field_default_value'];
} }
// If a value is found we override the default value // If a value is found we override the default value
if (isset($extra_data['extra_'.$field_details['field_variable']])) { if (isset($extraData['extra_'.$field_details['field_variable']])) {
$valueToFind = $extra_data['extra_'.$field_details['field_variable']]; $valueToFind = $extraData['extra_'.$field_details['field_variable']];
} }
foreach ($field_details['options'] as $option) { foreach ($field_details['options'] as $option) {
@ -594,7 +604,7 @@ class ExtraField extends Model
); );
} }
} else { } else {
// We asume that is a switch on/off with 1 and 0 as values // We assume that is a switch on/off with 1 and 0 as values
$group[] = $form->createElement( $group[] = $form->createElement(
'checkbox', 'checkbox',
'extra_'.$field_details['field_variable'], 'extra_'.$field_details['field_variable'],
@ -838,7 +848,6 @@ class ExtraField extends Model
break; break;
case ExtraField::FIELD_TYPE_DOUBLE_SELECT: case ExtraField::FIELD_TYPE_DOUBLE_SELECT:
$first_select_id = 'first_extra_'.$field_details['field_variable']; $first_select_id = 'first_extra_'.$field_details['field_variable'];
$url = api_get_path(WEB_AJAX_PATH).'extra_field.ajax.php?1=1'; $url = api_get_path(WEB_AJAX_PATH).'extra_field.ajax.php?1=1';
$jquery_ready_content .= ' $jquery_ready_content .= '
@ -867,9 +876,9 @@ class ExtraField extends Model
$first_id = null; $first_id = null;
$second_id = null; $second_id = null;
if (!empty($extra_data)) { if (!empty($extraData)) {
$first_id = $extra_data['extra_'.$field_details['field_variable']]['extra_'.$field_details['field_variable']]; $first_id = $extraData['extra_'.$field_details['field_variable']]['extra_'.$field_details['field_variable']];
$second_id = $extra_data['extra_'.$field_details['field_variable']]['extra_'.$field_details['field_variable'].'_second']; $second_id = $extraData['extra_'.$field_details['field_variable']]['extra_'.$field_details['field_variable'].'_second'];
} }
$options = ExtraField::extra_field_double_select_convert_array_to_ordered_array( $options = ExtraField::extra_field_double_select_convert_array_to_ordered_array(
@ -927,7 +936,12 @@ class ExtraField extends Model
); );
break; break;
case ExtraField::FIELD_TYPE_TAG: case ExtraField::FIELD_TYPE_TAG:
//the magic should be here $field_variable = $field_details['field_variable'];
$field_id = $field_details['id'];
if ($this->type == 'user') {
// The magic should be here
$user_tags = UserManager::get_user_tags($user_id, $field_details['id']); $user_tags = UserManager::get_user_tags($user_id, $field_details['id']);
$tag_list = ''; $tag_list = '';
@ -936,20 +950,38 @@ class ExtraField extends Model
$tag_list .= '<option value="'.$tag['tag'].'" class="selected">'.$tag['tag'].'</option>'; $tag_list .= '<option value="'.$tag['tag'].'" class="selected">'.$tag['tag'].'</option>';
} }
} }
$url = api_get_path(WEB_AJAX_PATH).'user_manager.ajax.php?';
} else {
$extraFieldValue = new ExtraFieldValue($this->type);
$tags = array();
if (!empty($itemId)) {
$tags = $extraFieldValue->getAllValuesByItemAndField($itemId, $field_id);
}
$tag_list = '';
if (is_array($tags) && count($tags) > 0) {
$extraFieldOption = new ExtraFieldOption($this->type);
foreach ($tags as $tag) {
$option = $extraFieldOption->get($tag['field_value']);
$tag_list .= '<option value="'.$option['id'].'" class="selected">'.$option['option_display_text'].'</option>';
}
}
$url = api_get_path(WEB_AJAX_PATH).'extra_field.ajax.php';
}
$multi_select = '<select id="extra_'.$field_details['field_variable'].'" name="extra_'.$field_details['field_variable'].'"> $form->addElement('hidden', 'extra_'.$field_details['field_variable'].'__persist__', 1);
$multiSelect = '<select id="extra_'.$field_details['field_variable'].'" name="extra_'.$field_details['field_variable'].'">
'.$tag_list.' '.$tag_list.'
</select>'; </select>';
$form->addElement('label', $field_details['field_display_text'], $multi_select); $form->addElement('label', $field_details['field_display_text'], $multiSelect);
$url = api_get_path(WEB_AJAX_PATH).'user_manager.ajax.php';
$complete_text = get_lang('StartToType'); $complete_text = get_lang('StartToType');
//if cache is set to true the jquery will be called 1 time //if cache is set to true the jquery will be called 1 time
$field_variable = $field_details['field_variable'];
$field_id = $field_details['id'];
$jquery_ready_content .= <<<EOF $jquery_ready_content .= <<<EOF
$("#extra_$field_variable").fcbkcomplete({ $("#extra_$field_variable").fcbkcomplete({
json_url: "$url?a=search_tags&field_id=$field_id", json_url: "$url?a=search_tags&field_id=$field_id&type={$this->type}",
cache: false, cache: false,
filter_case: true, filter_case: true,
filter_hide: true, filter_hide: true,
@ -977,7 +1009,7 @@ EOF;
case ExtraField::FIELD_TYPE_SOCIAL_PROFILE: case ExtraField::FIELD_TYPE_SOCIAL_PROFILE:
// get the social network's favicon // get the social network's favicon
$icon_path = UserManager::get_favicon_from_url( $icon_path = UserManager::get_favicon_from_url(
$extra_data['extra_'.$field_details['field_variable']], $extraData['extra_'.$field_details['field_variable']],
$field_details['field_default_value'] $field_details['field_default_value']
); );
// special hack for hi5 // special hack for hi5

@ -32,6 +32,9 @@ class ExtraFieldOption extends Model
case 'question': case 'question':
$this->table = Database::get_main_table(TABLE_MAIN_QUESTION_FIELD_OPTIONS); $this->table = Database::get_main_table(TABLE_MAIN_QUESTION_FIELD_OPTIONS);
break; break;
case 'lp':
$this->table = Database::get_main_table(TABLE_MAIN_LP_FIELD_OPTIONS);
break;
} }
} }
@ -109,6 +112,35 @@ class ExtraFieldOption extends Model
return $r; return $r;
} }
/**
* @param array $params
*
* @return int
*/
public function saveOptions($params, $show_query = false)
{
$optionInfo = self::get_field_option_by_field_and_option($params['field_id'], $params['option_value']);
// Use URLify only for new items
//$optionValue = URLify::filter($params['option_value']);
$optionValue = replace_dangerous_char($params['option_value']);
$option = $params['option_value'];
if ($optionInfo == false) {
$order = self::get_max_order($params['field_id']);
$new_params = array(
'field_id' => $params['field_id'],
'option_value' => trim($optionValue),
'option_display_text' => trim($option),
'option_order' => $order,
'tms' => api_get_utc_datetime(),
);
return parent::save($new_params, $show_query);
}
return false;
}
/** /**
* Saves an option into the corresponding *_field_options table * Saves an option into the corresponding *_field_options table
* @param array Parameters to be considered for the insertion * @param array Parameters to be considered for the insertion
@ -257,7 +289,6 @@ class ExtraFieldOption extends Model
if ($insert_repeated) { if ($insert_repeated) {
parent::save($params, $show_query); parent::save($params, $show_query);
} else { } else {
$check = self::get_field_option_by_field_and_option($field_id, $params['option_value']); $check = self::get_field_option_by_field_and_option($field_id, $params['option_value']);
if ($check == false) { if ($check == false) {
parent::save($params, $show_query); parent::save($params, $show_query);
@ -279,7 +310,8 @@ class ExtraFieldOption extends Model
$field_id = intval($field_id); $field_id = intval($field_id);
$option_value = Database::escape_string($option_value); $option_value = Database::escape_string($option_value);
$sql = "SELECT * FROM {$this->table} WHERE field_id = $field_id AND option_value = '".$option_value."'"; $sql = "SELECT * FROM {$this->table}
WHERE field_id = $field_id AND option_value = '".$option_value."'";
$result = Database::query($sql); $result = Database::query($sql);
if (Database::num_rows($result) > 0) { if (Database::num_rows($result) > 0) {
return Database::store_result($result, 'ASSOC'); return Database::store_result($result, 'ASSOC');
@ -300,7 +332,8 @@ class ExtraFieldOption extends Model
$field_id = intval($field_id); $field_id = intval($field_id);
$option_display_text = Database::escape_string($option_display_text); $option_display_text = Database::escape_string($option_display_text);
$sql = "SELECT * FROM {$this->table} WHERE field_id = $field_id AND option_display_text = '".$option_display_text."'"; $sql = "SELECT * FROM {$this->table}
WHERE field_id = $field_id AND option_display_text = '".$option_display_text."'";
$result = Database::query($sql); $result = Database::query($sql);
if (Database::num_rows($result) > 0) { if (Database::num_rows($result) > 0) {
return Database::fetch_array($result, 'ASSOC'); return Database::fetch_array($result, 'ASSOC');
@ -326,7 +359,11 @@ class ExtraFieldOption extends Model
$option_display_text = Database::escape_string($option_display_text); $option_display_text = Database::escape_string($option_display_text);
$option_value = Database::escape_string($option_value); $option_value = Database::escape_string($option_value);
$sql = "SELECT * FROM {$this->table} WHERE field_id = $field_id AND option_display_text = '".$option_display_text."' AND option_value = '$option_value'"; $sql = "SELECT * FROM {$this->table}
WHERE
field_id = $field_id AND
option_display_text = '".$option_display_text."' AND
option_value = '$option_value'";
$result = Database::query($sql); $result = Database::query($sql);
if (Database::num_rows($result) > 0) { if (Database::num_rows($result) > 0) {
return Database::fetch_array($result, 'ASSOC'); return Database::fetch_array($result, 'ASSOC');
@ -400,7 +437,6 @@ class ExtraFieldOption extends Model
} }
return $string; return $string;
} }
return $options; return $options;
@ -461,7 +497,7 @@ class ExtraFieldOption extends Model
/** /**
* Update the option using the given params * Update the option using the given params
* @param array Parameters with the data to be saved * @param array $params data to be saved
*/ */
public function update($params) public function update($params)
{ {
@ -565,4 +601,59 @@ class ExtraFieldOption extends Model
return $form; return $form;
} }
/**
* @param string $tag
* @param int $field_id
* @param int $limit
* @return array
*/
public function searchByField($tag, $field_id, $limit = 10)
{
$field_id = intval($field_id);
$limit = intval($limit);
$tag = Database::escape_string($tag);
$sql = "SELECT DISTINCT id, option_display_text
FROM {$this->table}
WHERE
field_id = '".$field_id."' AND
option_value LIKE '%$tag%'
ORDER BY option_value
LIMIT 0, $limit
";
$result = Database::query($sql);
$values = array();
if (Database::num_rows($result)) {
$values = Database::store_result($result, 'ASSOC');
}
return $values;
}
/**
* @param string $tag
* @param int $field_id
* @param int $limit
*
* @return string
*/
public function getSearchOptionsByField($tag, $field_id, $limit = 10)
{
$result = $this->searchByField($tag, $field_id, $limit = 10);
$values = array();
$json = null;
if (!empty($result)) {
foreach ($result as $item) {
$values[] = array(
'value' => $item['id'],
'caption' => $item['option_display_text'],
);
}
$json = json_encode($values);
}
return $json;
}
} }

@ -56,6 +56,12 @@ class ExtraFieldValue extends Model
$this->author_id = 'user_id'; $this->author_id = 'user_id';
$this->entityName = 'ChamiloLMS\Entity\QuestionFieldValues'; $this->entityName = 'ChamiloLMS\Entity\QuestionFieldValues';
break; break;
case 'lp':
$this->table = Database::get_main_table(TABLE_MAIN_LP_FIELD_VALUES);
$this->table_handler_field = Database::get_main_table(TABLE_MAIN_LP_FIELD);
$this->author_id = 'lp_id';
//$this->entityName = 'ChamiloLMS\Entity\QuestionFieldValues';
break;
default: default:
//unmanaged datatype, return false to let the caller know it //unmanaged datatype, return false to let the caller know it
// didn't work // didn't work
@ -86,18 +92,71 @@ class ExtraFieldValue extends Model
public function save_field_values($params) public function save_field_values($params)
{ {
$extra_field = new ExtraField($this->type); $extra_field = new ExtraField($this->type);
if (empty($params[$this->handler_id])) { if (empty($params[$this->handler_id])) {
return false; return false;
} }
foreach ($params as $key => $value) {
$found = strpos($key, '__persist__');
if ($found) {
$tempKey = str_replace('__persist__', '', $key);
if (!isset($params[$tempKey])) {
$params[$tempKey] = array();
}
break;
}
}
// Parse params. // Parse params.
foreach ($params as $key => $value) { foreach ($params as $key => $value) {
if (substr($key, 0, 6) == 'extra_') { if (substr($key, 0, 6) == 'extra_') {
// An extra field. // An extra field.
$field_variable = substr($key, 6); $field_variable = substr($key, 6);
$extra_field_info = $extra_field->get_handler_field_info_by_field_variable($field_variable); $extra_field_info = $extra_field->get_handler_field_info_by_field_variable($field_variable);
if ($extra_field_info) { if ($extra_field_info) {
$commentVariable = 'extra_'.$field_variable.'_comment'; $commentVariable = 'extra_'.$field_variable.'_comment';
$comment = isset($params[$commentVariable]) ? $params[$commentVariable] : null; $comment = isset($params[$commentVariable]) ? $params[$commentVariable] : null;
switch ($extra_field_info['field_type']) {
case ExtraField::FIELD_TYPE_TAG :
$old = self::getAllValuesByItemAndField(
$extra_field_info['id'],
$params[$this->handler_id]
);
$deleteItems = array();
if (!empty($old)) {
$oldIds = array();
foreach ($old as $oldItem) {
$oldIds[] = $oldItem['field_value'];
}
$deleteItems = array_diff($oldIds, $value);
}
foreach ($value as $optionId) {
$new_params = array(
$this->handler_id => $params[$this->handler_id],
'field_id' => $extra_field_info['id'],
'field_value' => $optionId,
'comment' => $comment
);
self::save($new_params);
}
if (!empty($deleteItems)) {
foreach ($deleteItems as $deleteFieldValue) {
self::deleteValuesByHandlerAndFieldAndValue(
$extra_field_info['id'],
$params[$this->handler_id],
$deleteFieldValue
);
}
}
break;
default;
$new_params = array( $new_params = array(
$this->handler_id => $params[$this->handler_id], $this->handler_id => $params[$this->handler_id],
'field_id' => $extra_field_info['id'], 'field_id' => $extra_field_info['id'],
@ -109,6 +168,7 @@ class ExtraFieldValue extends Model
} }
} }
} }
}
/** /**
* Save values in the *_field_values table * Save values in the *_field_values table
@ -123,7 +183,6 @@ class ExtraFieldValue extends Model
// Setting value to insert. // Setting value to insert.
$value = $params['field_value']; $value = $params['field_value'];
$value_to_insert = null; $value_to_insert = null;
if (is_array($value)) { if (is_array($value)) {
@ -131,6 +190,7 @@ class ExtraFieldValue extends Model
} else { } else {
$value_to_insert = Database::escape_string($value); $value_to_insert = Database::escape_string($value);
} }
$params['field_value'] = $value_to_insert; $params['field_value'] = $value_to_insert;
//If field id exists //If field id exists
@ -138,8 +198,6 @@ class ExtraFieldValue extends Model
if ($extra_field_info) { if ($extra_field_info) {
switch ($extra_field_info['field_type']) { switch ($extra_field_info['field_type']) {
case ExtraField::FIELD_TYPE_TAG:
break;
case ExtraField::FIELD_TYPE_RADIO: case ExtraField::FIELD_TYPE_RADIO:
case ExtraField::FIELD_TYPE_SELECT: case ExtraField::FIELD_TYPE_SELECT:
case ExtraField::FIELD_TYPE_SELECT_MULTIPLE: case ExtraField::FIELD_TYPE_SELECT_MULTIPLE:
@ -179,7 +237,18 @@ class ExtraFieldValue extends Model
break; break;
} }
$field_values = self::get_values_by_handler_and_field_id($params[$this->handler_id], $params['field_id']); if ($extra_field_info['field_type'] == ExtraField::FIELD_TYPE_TAG) {
$field_values = self::getAllValuesByItemAndFieldAndValue(
$params[$this->handler_id],
$params['field_id'],
$value
);
} else {
$field_values = self::get_values_by_handler_and_field_id(
$params[$this->handler_id],
$params['field_id']
);
}
$params['field_value'] = $value_to_insert; $params['field_value'] = $value_to_insert;
$params['tms'] = api_get_utc_datetime(); $params['tms'] = api_get_utc_datetime();
@ -221,13 +290,30 @@ class ExtraFieldValue extends Model
$app['orm.ems']['db_write']->flush(); $app['orm.ems']['db_write']->flush();
} }
} }
} else {
if ($extra_field_info['field_type'] == ExtraField::FIELD_TYPE_TAG) {
$option = new ExtraFieldOption($this->type);
$optionExists = $option->get($params['field_value']);
if (empty($optionExists)) {
$optionParams = array(
'field_id' => $params['field_id'],
'option_value' => $params['field_value']
);
$optionId = $option->saveOptions($optionParams);
} else {
$optionId = $optionExists['id'];
}
$params['field_value'] = $optionId;
if ($optionId) {
return parent::save($params, $show_query);
}
} else { } else {
return parent::save($params, $show_query); return parent::save($params, $show_query);
} }
}
} else { } else {
//self::delete_values_by_handler_and_field_id($params[$this->handler_id], $params['field_id']);
// Update // Update
if ($extra_field_info['field_loggeable'] == 1) { if ($extra_field_info['field_loggeable'] == 1) {
global $app; global $app;
@ -283,13 +369,12 @@ class ExtraFieldValue extends Model
} }
} }
/** /**
* Returns the value of the given extra field on the given resource * Returns the value of the given extra field on the given resource
* @param int Item ID (It could be a session_id, course_id or user_id) * @param int Item ID (It could be a session_id, course_id or user_id)
* @param int Field ID (the ID from the *_field table) * @param int Field ID (the ID from the *_field table)
* @param bool Whether to transform the result to a human readable strings * @param bool Whether to transform the result to a human readable strings
* @return mixed A structured array with the field_id and field_value, or fals on error * @return mixed A structured array with the field_id and field_value, or false on error
* @assert (-1,-1) === false * @assert (-1,-1) === false
*/ */
public function get_values_by_handler_and_field_id($item_id, $field_id, $transform = false) public function get_values_by_handler_and_field_id($item_id, $field_id, $transform = false)
@ -309,7 +394,6 @@ class ExtraFieldValue extends Model
if (!empty($result['field_value'])) { if (!empty($result['field_value'])) {
switch ($result['field_type']) { switch ($result['field_type']) {
case ExtraField::FIELD_TYPE_DOUBLE_SELECT: case ExtraField::FIELD_TYPE_DOUBLE_SELECT:
$field_option = new ExtraFieldOption($this->type); $field_option = new ExtraFieldOption($this->type);
$options = explode('::', $result['field_value']); $options = explode('::', $result['field_value']);
// only available for PHP 5.4 :( $result['field_value'] = $field_option->get($options[0])['id'].' -> '; // only available for PHP 5.4 :( $result['field_value'] = $field_option->get($options[0])['id'].' -> ';
@ -322,7 +406,10 @@ class ExtraFieldValue extends Model
break; break;
case ExtraField::FIELD_TYPE_SELECT: case ExtraField::FIELD_TYPE_SELECT:
$field_option = new ExtraFieldOption($this->type); $field_option = new ExtraFieldOption($this->type);
$extra_field_option_result = $field_option->get_field_option_by_field_and_option($result['field_id'], $result['field_value']); $extra_field_option_result = $field_option->get_field_option_by_field_and_option(
$result['field_id'],
$result['field_value']
);
if (isset($extra_field_option_result[0])) { if (isset($extra_field_option_result[0])) {
$result['field_value'] = $extra_field_option_result[0]['option_display_text']; $result['field_value'] = $extra_field_option_result[0]['option_display_text'];
} }
@ -336,6 +423,34 @@ class ExtraFieldValue extends Model
} }
} }
/**
* @param string $tag
* @param int $field_id
* @param int $limit
* @return array
*/
public function searchValuesByField($tag, $field_id, $limit = 10)
{
$field_id = intval($field_id);
$limit = intval($limit);
$tag = Database::escape_string($tag);
$sql = "SELECT DISTINCT s.field_value, s.field_id
FROM {$this->table} s
INNER JOIN {$this->table_handler_field} sf ON (s.field_id = sf.id)
WHERE
field_id = '".$field_id."' AND
field_value LIKE '%$tag%'
ORDER BY field_value
LIMIT 0, $limit
";
$result = Database::query($sql);
$values = array();
if (Database::num_rows($result)) {
$values = Database::store_result($result, 'ASSOC');
}
return $values;
}
/** /**
* Gets a structured array of the original item and its extra values, using * Gets a structured array of the original item and its extra values, using
* a specific original item and a field name (like "branch", or "birthdate") * a specific original item and a field name (like "branch", or "birthdate")
@ -350,8 +465,10 @@ class ExtraFieldValue extends Model
$field_variable = Database::escape_string($field_variable); $field_variable = Database::escape_string($field_variable);
$sql = "SELECT s.*, field_type FROM {$this->table} s $sql = "SELECT s.*, field_type FROM {$this->table} s
INNER JOIN {$this->table_handler_field} sf ON (s.field_id = sf.id) INNER JOIN {$this->table_handler_field} sf
WHERE {$this->handler_id} = '$item_id' AND ON (s.field_id = sf.id)
WHERE
{$this->handler_id} = '$item_id' AND
field_variable = '".$field_variable."' field_variable = '".$field_variable."'
ORDER BY id"; ORDER BY id";
$result = Database::query($sql); $result = Database::query($sql);
@ -386,13 +503,16 @@ class ExtraFieldValue extends Model
* @return mixed Give the ID if found, or false on failure or not found * @return mixed Give the ID if found, or false on failure or not found
* @assert (-1,-1) === false * @assert (-1,-1) === false
*/ */
public function get_item_id_from_field_variable_and_field_value($field_variable, $field_value, $transform = false) { public function get_item_id_from_field_variable_and_field_value($field_variable, $field_value, $transform = false)
{
$field_value = Database::escape_string($field_value); $field_value = Database::escape_string($field_value);
$field_variable = Database::escape_string($field_variable); $field_variable = Database::escape_string($field_variable);
$sql = "SELECT {$this->handler_id} FROM {$this->table} s $sql = "SELECT {$this->handler_id} FROM {$this->table} s
INNER JOIN {$this->table_handler_field} sf ON (s.field_id = sf.id) INNER JOIN {$this->table_handler_field} sf
WHERE field_value = '$field_value' AND ON (s.field_id = sf.id)
WHERE
field_value = '$field_value' AND
field_variable = '".$field_variable."' field_variable = '".$field_variable."'
"; ";
@ -413,7 +533,10 @@ class ExtraFieldValue extends Model
*/ */
public function get_values_by_field_id($field_id) public function get_values_by_field_id($field_id)
{ {
$sql = "SELECT s.*, field_type FROM {$this->table} s INNER JOIN {$this->table_handler_field} sf ON (s.field_id = sf.id) $field_id = intval($field_id);
$sql = "SELECT s.*, field_type FROM {$this->table} s
INNER JOIN {$this->table_handler_field} sf
ON (s.field_id = sf.id)
WHERE field_id = '".$field_id."' ORDER BY id"; WHERE field_id = '".$field_id."' ORDER BY id";
$result = Database::query($sql); $result = Database::query($sql);
if (Database::num_rows($result)) { if (Database::num_rows($result)) {
@ -422,13 +545,64 @@ class ExtraFieldValue extends Model
return false; return false;
} }
/**
* @param int $itemId
* @param int $fieldId
* @return array
*/
public function getAllValuesByItemAndField($itemId, $fieldId)
{
$fieldId = intval($fieldId);
$itemId = intval($itemId);
$sql = "SELECT s.* FROM {$this->table} s
INNER JOIN {$this->table_handler_field} sf
ON (s.field_id = sf.id)
WHERE
field_id = '".$fieldId."' AND
{$this->handler_id} = '$itemId'
ORDER BY field_value";
$result = Database::query($sql);
if (Database::num_rows($result)) {
return Database::store_result($result, 'ASSOC');
}
return false;
}
/**
* @param int $itemId
* @param int $fieldId
* @param string $fieldValue
* @return array|bool
*/
public function getAllValuesByItemAndFieldAndValue($itemId, $fieldId, $fieldValue)
{
$fieldId = intval($fieldId);
$itemId = intval($itemId);
$fieldValue = Database::escape_string($fieldValue);
$sql = "SELECT s.* FROM {$this->table} s
INNER JOIN {$this->table_handler_field} sf
ON (s.field_id = sf.id)
WHERE
field_id = '".$fieldId."' AND
{$this->handler_id} = '$itemId' AND
field_value = $fieldValue
ORDER BY field_value";
$result = Database::query($sql);
if (Database::num_rows($result)) {
return Database::store_result($result, 'ASSOC');
}
return false;
}
/** /**
* Deletes all the values related to a specific field ID * Deletes all the values related to a specific field ID
* @param int Field ID * @param int Field ID
* @return void * @return void
* @assert ('a') == null * @assert ('a') == null
*/ */
public function delete_all_values_by_field_id($field_id) { public function delete_all_values_by_field_id($field_id)
{
$field_id = intval($field_id); $field_id = intval($field_id);
$sql = "DELETE FROM {$this->table} WHERE field_id = $field_id"; $sql = "DELETE FROM {$this->table} WHERE field_id = $field_id";
Database::query($sql); Database::query($sql);
@ -449,6 +623,25 @@ class ExtraFieldValue extends Model
Database::query($sql); Database::query($sql);
} }
/**
* @param int $itemId
* @param int $fieldId
* @param int $fieldValue
*/
public function deleteValuesByHandlerAndFieldAndValue($itemId, $fieldId, $fieldValue)
{
$itemId = intval($itemId);
$fieldId = intval($fieldId);
$fieldValue = Database::escape_string($fieldValue);
$sql = "DELETE FROM {$this->table}
WHERE
{$this->handler_id} = '$itemId' AND
field_id = '".$fieldId."' AND
field_value = '$fieldValue'";
Database::query($sql);
}
/** /**
* Not yet implemented - Compares the field values of two items * Not yet implemented - Compares the field values of two items
* @param int Item 1 * @param int Item 1

@ -732,6 +732,12 @@ switch ($action) {
$_SESSION['oLP']->delete_lp_image(); $_SESSION['oLP']->delete_lp_image();
} }
$extraFieldValue = new ExtraFieldValue('lp');
$params = array(
'lp_id' => $_SESSION['oLP']->id
);
$extraFieldValue->save_field_values($_REQUEST);
if ($_FILES['lp_preview_image']['size'] > 0) if ($_FILES['lp_preview_image']['size'] > 0)
$_SESSION['oLP']->upload_image($_FILES['lp_preview_image']); $_SESSION['oLP']->upload_image($_FILES['lp_preview_image']);

@ -49,11 +49,6 @@ function activate_end_date() {
</script>'; </script>';
Display::display_header(get_lang('CourseSettings'), 'Path');
echo $_SESSION['oLP']->build_action_menu();
$gradebook = isset($_GET['gradebook']) ? Security::remove_XSS($_GET['gradebook']) : null; $gradebook = isset($_GET['gradebook']) ? Security::remove_XSS($_GET['gradebook']) : null;
$defaults=array(); $defaults=array();
@ -177,6 +172,18 @@ if (api_is_platform_admin()) {
$form->addElement('checkbox', 'subscribe_users', null, get_lang('SubscribeUsersToLP')); $form->addElement('checkbox', 'subscribe_users', null, get_lang('SubscribeUsersToLP'));
$extraField = new ExtraField('lp');
$extra = $extraField->addElements($form, $_SESSION['oLP']->get_id());
$htmlHeadXtra[] = '<script src="'.api_get_path(WEB_LIBRARY_PATH).'javascript/tag/jquery.fcbkcomplete.js" type="text/javascript" language="javascript"></script>';
$htmlHeadXtra[] = '<link href="'.api_get_path(WEB_LIBRARY_PATH).'javascript/tag/style.css" rel="stylesheet" type="text/css" />';
$htmlHeadXtra[] ='<script>
$(function() {
'.$extra['jquery_ready_content'].'
});
</script>';
//Submit button //Submit button
$form->addElement('style_submit_button', 'Submit', get_lang('SaveLPSettings'),'class="save"'); $form->addElement('style_submit_button', 'Submit', get_lang('SaveLPSettings'),'class="save"');
@ -190,6 +197,11 @@ $defaults['max_attempts'] = $_SESSION['oLP']->get_max_attempts();
$defaults['subscribe_users'] = $_SESSION['oLP']->get_subscribe_users(); $defaults['subscribe_users'] = $_SESSION['oLP']->get_subscribe_users();
$form->setDefaults($defaults); $form->setDefaults($defaults);
Display::display_header(get_lang('CourseSettings'), 'Path');
echo $_SESSION['oLP']->build_action_menu();
echo '<div class="row">'; echo '<div class="row">';
if ($_SESSION['oLP']->get_hide_toc_frame() == 1) { if ($_SESSION['oLP']->get_hide_toc_frame() == 1) {

Loading…
Cancel
Save