Esempio n. 1
0
/**
 * Get a node UUID from it's complete repository path.
 *
 * @param string $path The full path on the repository to the node.
 * @return string|bool The UUID value for the end node, or False on error.
 */
function alfresco_uuid_from_path($path, $uuid = '')
{
    if ($path == '/') {
        return true;
    }
    /// Remove any extraneous slashes from the ends of the string
    $path = trim($path, '/');
    $parts = explode('/', $path);
    /// Initialize the folder structure if a structure piece wasn't passed to this function.
    $children = alfresco_read_dir($uuid);
    /// Get the first piece from the list of path elements.
    $pathpiece = array_shift($parts);
    /// This node has no child folders, which means the current part of the path we're looking
    /// for does not exist.
    if (empty($children->folders)) {
        return false;
    }
    foreach ($children->folders as $folder) {
        if ($folder->title == $pathpiece) {
            $fchildren = alfresco_read_dir($folder->uuid);
            /// If there are no more path elements, we've succeeded!
            if (empty($parts)) {
                return $folder->uuid;
                /// Otherwise, keep looking below.
            } else {
                return alfresco_uuid_from_path(implode('/', $parts), $folder->uuid);
            }
        }
    }
}
Esempio n. 2
0
 /**
  * Verify that the Alfresco repository is currently setup and ready to be
  * used with Moodle (i.e. the needed directory structure is in place).
  *
  * @uses $CFG
  * @param none
  * @return bool True if setup, False otherwise.
  */
 function verify_setup()
 {
     global $CFG, $USER;
     if (ALFRESCO_DEBUG_TRACE) {
         mtrace('verify_setup()');
     }
     if (!$this->get_defaults()) {
         return false;
     }
     if (self::is_version('3.2')) {
         if (!alfresco_get_services()) {
             return false;
         }
         // Set up the root node
         $response = alfresco_request(alfresco_get_uri('', 'sites'));
         $response = preg_replace('/(&[^amp;])+/', '&', $response);
         $dom = new DOMDocument();
         $dom->preserveWhiteSpace = false;
         $dom->loadXML($response);
         $nodes = $dom->getElementsByTagName('entry');
         $type = '';
         $this->root = alfresco_process_node($dom, $nodes->item(0), $type);
     } else {
         if (self::is_version('3.4')) {
             if (empty($this->cmis)) {
                 $this->cmis = new CMISService(alfresco_base_url() . '/api/cmis', $CFG->repository_alfresco_server_username, $CFG->repository_alfresco_server_password);
                 if (empty($this->cmis->authenticated)) {
                     return false;
                 }
                 if (!($root = $this->cmis->getObjectByPath('/'))) {
                     return false;
                 }
                 $type = '';
                 $this->root = alfresco_process_node_new($root, $type);
             }
         }
     }
     // If there is no root folder saved or it's set to default,
     // make sure there is a default '/moodle' folder.
     if (empty($CFG->repository_alfresco_root_folder) || $CFG->repository_alfresco_root_folder == '/moodle') {
         $root = $this->get_root();
         if ($root == false || !isset($root->uuid)) {
             return false;
         }
         $dir = $this->read_dir($root->uuid, true);
         if (!empty($dir->folders)) {
             foreach ($dir->folders as $folder) {
                 if ($folder->title == 'moodle') {
                     $muuid = $folder->uuid;
                 }
             }
         }
         // Create the main Moodle directory.
         if (empty($muuid)) {
             $muuid = $this->create_dir('moodle', $root->uuid, '', true);
             if ($muuid === false) {
                 return false;
             }
         }
         if (empty($muuid)) {
             debugging(get_string('invalidpath', 'repository_alfresco'));
             return false;
         }
         $this->muuid = $muuid;
         $this->node_inherit($muuid, false);
         // Otherwise, use the folder that the plug-in has been configured with.
     } else {
         if (!($uuid = alfresco_uuid_from_path($CFG->repository_alfresco_root_folder))) {
             debugging(get_string('invalidpath', 'repository_alfresco'));
             return false;
         }
         $this->muuid = $uuid;
         $this->node_inherit($uuid, false);
     }
     // Attempt to find the UUID of the main storage folders within the root.
     $dir = $this->read_dir($this->muuid, true);
     if (!empty($dir->folders)) {
         foreach ($dir->folders as $folder) {
             if ($folder->title == 'shared') {
                 $this->suuid = $folder->uuid;
             } else {
                 if ($folder->title == 'course') {
                     $this->cuuid = $folder->uuid;
                 } else {
                     if ($folder->title == 'user') {
                         $this->uuuid = $folder->uuid;
                     } else {
                         if ($folder->title == 'organization') {
                             $this->ouuid = $folder->uuid;
                         }
                     }
                 }
             }
         }
     }
     // Create the shared storage directory.
     if (empty($this->suuid)) {
         $suuid = $this->create_dir('shared', $this->muuid, true);
         if ($suuid === false) {
             return false;
         }
         $this->suuid = $suuid;
         $this->node_inherit($suuid, false);
     }
     // Create the course space directory.
     if (empty($this->cuuid)) {
         $cuuid = $this->create_dir('course', $this->muuid, true);
         if ($cuuid === false) {
             return false;
         }
         $this->cuuid = $cuuid;
         $this->node_inherit($cuuid, false);
     }
     // Create the organization shared storage directory.
     if (empty($this->ouuid)) {
         $ouuid = $this->create_dir('organization', $this->muuid, true);
         if ($ouuid === false) {
             return false;
         }
         $this->ouuid = $ouuid;
         $this->node_inherit($ouuid, false);
     }
     // We no longer will automatically create the course space directory as it's no longer needed.
     // Make sure the temp directory is enabled.
     if (!is_dir($CFG->dataroot . '/temp/alfresco')) {
         mkdir($CFG->dataroot . '/temp/alfresco', $CFG->directorypermissions, true);
     }
     return true;
 }