Sfoglia il codice sorgente

Add 'split_users_upload_directory' setting when creating the certificate path (1.10.x) - refs BT#9022

Imanol Losada 10 anni fa
parent
commit
8e8d1313c1

+ 5 - 3
main/cron/add_gradebook_certificates.php

@@ -1,7 +1,5 @@
 <?php
-require_once __DIR__.'/../inc/global.inc.php';
-require_once api_get_path(LIBRARY_PATH).'database.lib.php';
-require_once api_get_path(SYS_CODE_PATH).'gradebook/lib/gradebook_functions.inc.php';
+/* For licensing terms, see /license.txt */
 
 /**
  * Adds gradebook certificates to gradebook_certificate table from users
@@ -10,6 +8,10 @@ require_once api_get_path(SYS_CODE_PATH).'gradebook/lib/gradebook_functions.inc.
  * @author Imanol Losada <imanol.losada@beeznest.com>
  */
 
+require_once __DIR__.'/../inc/global.inc.php';
+require_once api_get_path(LIBRARY_PATH).'database.lib.php';
+require_once api_get_path(SYS_CODE_PATH).'gradebook/lib/gradebook_functions.inc.php';
+
 /**
  * Get all categories and users ids from gradebook
  * @return array Categories and users ids

+ 82 - 0
main/webservices/registration.soap.php

@@ -5745,6 +5745,88 @@ function WSFetchSession($params)
 
 /* Fetch session Web Service end */
 
+/* Register WSCertificatesList function */
+// Register the data structures used by the service
+$server->wsdl->addComplexType(
+    'certificateDetails',
+    'complexType',
+    'struct',
+    'all',
+    '',
+    array(
+        'id' => array('name' => 'id', 'type' => 'xsd:int'),
+        'username' => array('name' => 'username', 'type' => 'xsd:string'),
+        'course_code' => array('name' => 'course_code', 'type' => 'xsd:string'),
+        'session_id' => array('name' => 'session_id', 'type' => 'xsd:int'),
+        'cat_id' => array('name' => 'cat_id', 'type' => 'xsd:int'),
+        'created_at' => array('name' => 'created_at', 'type' => 'xsd:string'),
+        'path_certificate' => array('name' => 'path_certificate', 'type' => 'xsd:string')
+    )
+);
+
+$server->wsdl->addComplexType(
+    'certificatesList',
+    'complexType',
+    'array',
+    '',
+    'SOAP-ENC:Array',
+    array(),
+    array(
+        array('ref'=>'SOAP:ENC:arrayType',
+            'wsdl:arrayType'=>'tns:certificateDetails[]')
+    ),
+    'tns:certificateDetails'
+);
+// Register the method to expose
+$server->register(
+    'WSCertificatesList',                           // method name
+    array(
+        'startingDate' => 'xsd:string',             // input parameters
+        'endingDate' => 'xsd:string'
+    ),
+    array('return' => 'tns:certificatesList'),      // output parameters
+    'urn:WSRegistration',                           // namespace
+    'urn:WSRegistration#WSCertificatesList',        // soapaction
+    'rpc',                                          // style
+    'encoded',                                      // use
+    'This service returns a list of certificates'   // documentation
+);
+
+function WSCertificatesList($startingDate = '', $endingDate = '')
+{
+    global $_configuration;
+    if ($_configuration['add_gradebook_certificates_cron_task_enabled']) {
+        require_once api_get_path(SYS_CODE_PATH).'cron/add_gradebook_certificates.php';
+    }
+    $result = array();
+    $certificateTable = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CERTIFICATE);
+    $userTable = Database::get_main_table(TABLE_MAIN_USER);
+    $categoryTable = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CATEGORY);
+    $query = "SELECT certificate.id, user.username, category.course_code, category.session_id,
+    certificate.user_id, certificate.cat_id, certificate.created_at, certificate.path_certificate
+    FROM $certificateTable AS certificate
+    JOIN $userTable AS user ON certificate.user_id = user.user_id
+    JOIN $categoryTable AS category ON certificate.cat_id = category.id";
+    if (!empty($startingDate) && !empty($endingDate)) {
+        $query .= " WHERE certificate.created_at BETWEEN '$startingDate' AND '$endingDate'";
+    } else if (!empty($startingDate)) {
+        $query .= " WHERE certificate.created_at >= '$startingDate'";
+    } else if (!empty($endingDate)) {
+        $query .= " WHERE certificate.created_at <= '$endingDate'";
+    }
+    $queryResult = Database::query($query);
+    $basePath = api_get_path(WEB_CODE_PATH).'upload/users/';
+    while ($row = Database::fetch_array($queryResult)) {
+        $certificatePath = $basePath;
+        if (api_get_setting('split_users_upload_directory') === 'true') {
+            $certificatePath .= substr((string) $row['user_id'], 0, 1).'/';
+        }
+        $row['path_certificate'] = $certificatePath.$row['user_id'].'/certificate'.$row['path_certificate'];
+        $result[] = $row;
+    }
+    return $result;
+}
+
 // Add more webservices by Hooks
 if (!empty($hook)) {
     $hook->setEventData(array('server' => $server));