Create web service to search sessions - refs BT#9418

1.10.x
Angel Fernando Quiroz Campos 10 years ago
parent d9d07693f3
commit 207a27cdb9
  1. 83
      main/inc/lib/sessionmanager.lib.php
  2. 107
      main/webservices/registration.soap.php

@ -5430,4 +5430,87 @@ class SessionManager
));
}
/**
* Get a session list filtered by name, description or short description extra field
* @param string $term The term to search
* @param array $extraFieldsToInclude Extra fields to include in the session data
* @return array The list
*/
public static function searchSession($term, $extraFieldsToInclude = array())
{
$sTable = Database::get_main_table(TABLE_MAIN_SESSION);
$sfvTable = Database::get_main_table(TABLE_MAIN_SESSION_FIELD_VALUES);
$term = Database::escape_string($term);
$resultData = Database::select('id, name, date_start, date_end, duration, description', $sTable, array(
'where' => array(
"name LIKE %?% " => $term,
"OR description LIKE %?% " => $term,
"OR id IN (
SELECT session_id
FROM $sfvTable
WHERE field_value LIKE %?%
) " => $term
)
));
if (empty($extraFieldsToInclude)) {
return $resultData;
}
$variables = array();
$variablePlaceHolders = array();
foreach ($extraFieldsToInclude as $sessionExtraField) {
$variablePlaceHolders[] = "?";
$variables[] = Database::escape_string($sessionExtraField);
}
$sessionExtraField = new ExtraField('session');
$fieldList = $sessionExtraField->get_all(array(
"field_variable IN ( " . implode(", ", $variablePlaceHolders) . " ) " => $variables
));
$fields = array();
// Index session fields
foreach ($fieldList as $field) {
$fields[$field['id']] = $field['field_variable'];
}
// Get session field values
$extra = new ExtraFieldValue('session');
$sessionFieldValueList = $extra->get_all(
array(
"field_id IN ( " . implode(", ", $variablePlaceHolders) . " )" => array_keys($fields)
)
);
// Add session fields values to session list
foreach ($resultData as $id => &$session) {
foreach ($sessionFieldValueList as $sessionFieldValue) {
// Match session field values to session
if ($sessionFieldValue['session_id'] != $id) {
continue;
}
// Check if session field value is set in session field list
if (!isset($fields[$sessionFieldValue['field_id']])) {
continue;
}
$extrafieldVariable = $fields[$sessionFieldValue['field_id']];
$extrafieldValue = $sessionFieldValue['field_value'];
$session['extra'][] = array(
'variable' => $extrafieldVariable,
'value' => $extrafieldValue
);
}
}
return $resultData;
}
}

@ -5533,6 +5533,113 @@ function WSUserSubscribedInCourse ($params)
return (CourseManager::is_user_subscribed_in_course($userId,$courseCode));
}
/* Search session Web Service start */
// Input params for WSSearchSession
$server->wsdl->addComplexType(
'SearchSession',
'complexType',
'struct',
'all',
'',
array(
'term' => array('name' => 'term', 'type' => 'xsd:string'),
'extrafields' => array('name' => 'extrafields', 'type' => 'xsd:string')
)
);
//Output params for WSSearchSession
$server->wsdl->addComplexType(
'searchedSessionExtra',
'complexType',
'struct',
'all',
'',
array(
'variable' => array('name'=>'variable','type'=>'xsd:string'),
'value' => array('name'=>'value','type'=>'xsd:string')
)
);
$server->wsdl->addComplexType(
'searchedSessionExtras',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(
array('ref' => 'SOAP-ENC:arrayType', 'wsdl:arrayType' => 'tns:searchedSessionExtra[]')
),
'tns:searchedSessionExtra'
);
$server->wsdl->addComplexType(
'searchedSession',
'complexType',
'struct',
'all',
'',
array(
'id' => array('name' => 'id', 'type' => 'xsd:int'),
'name' => array('name' => 'name', 'type' => 'xsd:string'),
'date_start' => array('name' => 'date_start', 'type' => 'xsd:string'),
'date_end' => array('name' => 'date_end', 'type' => 'xsd:string'),
'duration' => array('name' => 'duration', 'type' => 'xsd:string'),
'description' => array('name' => 'description', 'type' => 'xsd:string'),
'extra' => array('name' => 'extra', 'type' => 'tns:searchedSessionExtras'),
)
);
$server->wsdl->addComplexType(
'searchedSessionList',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(
array('ref' => 'SOAP-ENC:arrayType',
'wsdl:arrayType' => 'tns:searchedSession[]')
),
'tns:searchedSession'
);
//Reister WSSearchSession
$server->register(
'WSSearchSession',
array('SearchSession' => 'tns:SearchSession'), // input parameters
array('return' => 'tns:searchedSessionList'), // output parameters
'urn:WSRegistration', // namespace
'urn:WSRegistration#WSSearchSession', // soapaction
'rpc', // style
'encoded', // use
'This service to get a session list filtered by name, description or short description extra field' // documentation
);
/**
* Web service to get a session list filtered by name, description or short description extra field
* @param string Secret key
* @param string $extraFields Extrafields to include in request result
* @return array The list
*/
function WSSearchSession($term, $extraFields)
{
$fieldsToInclude = explode(',', $extraFields);
foreach ($fieldsToInclude as &$field) {
if (empty($field)) {
continue;
}
$field = trim($field);
}
return SessionManager::searchSession($term, $fieldsToInclude);
}
/* Search session Web Service end */
// Add more webservices by Hooks
if (!empty($hook)) {
$hook->setEventData(array('server' => $server));

Loading…
Cancel
Save