cmis.module in CMIS API 7
Same filename and directory in other branches
File
cmis.moduleView source
<?php
/**
* Returns a CMIS repository properties, based on local configuration.
*
* Config sample:
* $conf['cmis_repositories'] = array(
* 'default' => array (
* 'label' => 'Local',
* 'url' => 'http://127.0.0.1:8080/alfresco/cmisatom',
* 'transport' => 'cmis_headerswing',
* 'headerswing_headers' => array (
* // headers copied from $_SERVER[] to CMIS repository curl call
* 'HTTP_HOST' => 'FRONTENT_HOST',
* 'HTTP_HOST' => 'FRONTENT_HOST_AGAIN',
* 'HTTP_USER' => 'FRONTENT_USER',
* 'PHP_AUTH_USER' => 'FRONTENT_USER'
* 'PHP_AUTH_DIGEST' => 'FRONTEND_AUTH'
* )
* ),
*
* 'demo cmis alfresco' => array(
* 'label' => 'cmis.alfresco.com',
* 'user' => 'admin',
* 'password' => 'admin',
* 'url' => 'http://cmis.alfresco.com/cmisatom'
* ),
*
* 'demo cmis nuxeo' => array(
* 'label' => 'cmis.demo.nuxeo.org',
* 'user' => 'Administrator',
* 'password' => 'Administrator',
* 'url' => 'http://cmis.demo.nuxeo.org/nuxeo/site/cmis',
* 'repository_id' => '8006e8e1-2298-4764-998c-5800383ac88a'
* )
* );
*
* Usage:
* // get default CMIS repository info
* $cmis_repo = cmis_get_repository();
*
* // get CMIS repository info based on config alias
* $cmis_repo = cmis_get_repository('demo cmis alfresco');
*
* // get CMIS repository info based on repository id.
* // INTERNAL USE ONLY!
* $cmis_repo = cmis_get_repository('8006e8e1-22...');
*
* // CMIS getRepositoryInfo result
* print_r($cmis_repo->info)
*
* // repository id
* print $cmis_repo->repositoryId
*
* // config settings
* print_r($cmis_repo->settings)
*
* @param $id_or_alias
* @return stdClass
*/
function cmis_get_repository($id_or_alias = NULL) {
static $repositories_cache;
$cmis_repository = NULL;
if (empty($id_or_alias)) {
global $user;
$id_or_alias = isset($user->cmis_repository) ? $user->cmis_repository : 'default';
}
// init repository cache
if (is_null($repositories_cache)) {
$repositories_cache = array();
}
// lookup repository in cache
if (array_key_exists($id_or_alias, $repositories_cache)) {
$cmis_repository = $repositories_cache[$id_or_alias];
}
else {
$config_cmis_repos = variable_get('cmis_repositories', array());
if (array_key_exists($id_or_alias, $config_cmis_repos)) {
// setup temp repository details
$cmis_repository = new stdClass();
$repositories_cache[$id_or_alias] = $cmis_repository;
// setup settings
$cmis_repository->settings = $config_cmis_repos[$id_or_alias];
// merge in defaults.
$cmis_repository->settings += array(
'transport' => 'cmis_common',
);
// init cmis repository
$cmis_repository->info = cmisapi_getRepositoryInfo($id_or_alias);
$cmis_repository->repositoryId = $cmis_repository->info->repositoryInfo['cmis:repositoryId'];
// save repo description in cache
$repositories_cache[$cmis_repository->repositoryId] =& $repositories_cache[$id_or_alias];
}
else {
throw new CMISException(t('Unable to lookup CMIS repository [@cmis_id_or_alias]', array(
'@cmis_id_or_alias' => $id_or_alias,
)));
}
}
return $cmis_repository;
}
/**
* CMIS invoke service. This method should return a stdClass with
* the following form:
* $return = new stdClass();
* $return->code = 200; // HTTP return code
* $return->body = 'data'; // result body
* $return->content_type = 'text/html'; //result content type
* $return->content_lenght = 200;
*
* @return stdClass
*/
function cmis_invoke($repositry_id, $url = '', $properties = array()) {
// merge in defaults
$properties += array(
'headers' => array(),
'method' => 'GET',
'data' => NULL,
'retry' => 3,
);
$cmis_repository = cmis_get_repository((string) $repositry_id);
// If the conf array has specified a transport, then we should use that and not look for modules implementing cmis_invoke
$cmis_transport = $cmis_repository->settings['transport'];
// If the default is in use, check that another module isn't implementing cmis_invoke
if ($cmis_transport == 'cmis_common') {
foreach (module_implements('cmis_invoke') as $module) {
//Determine which module to use and change the cmis_transport mechanism from the default set in cmis_get_repository
if ($module != $cmis_transport) {
$cmis_transport = $module;
break;
}
}
}
// invoke hook_cmis()
if (module_exists($cmis_transport)) {
return module_invoke($cmis_transport, 'cmis_invoke', $url, $properties, $cmis_repository->settings);
}
else {
throw new CMISException(t('Unable to lookup CMIS transport [@cmis_transport] for [@cmis_id_or_alias]', array(
'@cmis_id_or_alias' => $repositry_id,
'@cmis_transport' => $cmis_transport,
)));
}
}
/**
* Utility function that returns all known vendors
*
* @return array
*/
function cmis_get_vendors() {
$vendors = array();
$info_array = module_invoke_all('cmis_info');
foreach ($info_array as $type => $info) {
$info['type'] = $type;
$vendors[$type] = $info;
}
return $vendors;
}
/**
* Utility function used to call a CMIS method,
* using the CMIS vendor selected in config.
*
* @return mixed
*/
function cmis_vendor_invoke() {
$vendor = variable_get('cmis_vendor', 'cmis_common');
$args = func_get_args();
$cmis_method = $args[0];
$vendors = cmis_get_vendors();
if (array_key_exists($vendor, $vendors)) {
if (function_exists($vendor . '_cmisapi_invoke')) {
return call_user_func_array($vendor . '_cmisapi_invoke', $args);
}
else {
unset($args[0]);
$function = $vendor . '_cmisapi_' . $cmis_method;
if (function_exists($function)) {
return call_user_func_array($function, $args);
}
throw new CMISException(t('@function not implemented by @vendor CMIS vendor', array(
'@function' => $function,
'@vendor' => $vendor,
)));
}
}
throw new CMISException(t('Unknown CMIS vendor: @vendor', array(
'@vendor' => $vendor,
)));
}
/**
* Return permissions for the CMIS module.
*
*/
function cmis_permission() {
$perms = array(
'administer cmis' => array(
'title' => 'Administer CMIS',
'description' => 'Perform administrative tasks related to the CMIS module',
),
'access cmis' => array(
'title' => 'Access CMIS data',
'description' => 'Access data from the CMIS repository',
),
);
return $perms;
}
/**
* CMIS Exception class.
*
*/
class CMISException extends Exception {
}
/**
* Utility for handling CMIS errors.
*
* @param $e Exception
*/
function cmis_error_handler($type, $e) {
watchdog($type, $e
->getMessage(), NULL, WATCHDOG_ERROR);
// Do we really want end users to see error returned from the CMIS server?
//drupal_set_message($e->getMessage(), 'error');
drupal_set_message(t("There has been an problem contacting the CMIS server, please see the logs."), 'error');
}
/**
* Implements hook_block_info
*/
function cmis_block_info() {
$blocks['cmis_switcher'] = array(
'info' => t('CMIS repository switcher'),
'cache' => DRUPAL_CACHE_GLOBAL,
);
return $blocks;
}
/**
* Implements hook_block_info
*/
function cmis_block_view($delta = '') {
$block = array();
switch ($delta) {
case 'cmis_switcher':
$block['subject'] = t('CMIS repositories');
$block['content'] = drupal_get_form('cmis_repository_switcher_form');
break;
}
return $block;
}
/**
* Implementation of hook_boot()
*
*/
function cmis_boot() {
if (isset($_SESSION['cmis_repository'])) {
global $user;
$user->cmis_repository = $_SESSION['cmis_repository'];
}
}
/**
* CMIS repository switcher form.
*
*/
function cmis_repository_switcher_form($form, &$form_state) {
$repositories = array();
foreach (variable_get('cmis_repositories', array()) as $repository_name => $repository_info) {
$repositories[$repository_name] = array_key_exists('label', $repository_info) ? $repository_info['label'] : $repository_name;
}
$form = array();
$form['cmis_repository'] = array(
'#type' => 'select',
'#title' => t('CMIS repositories'),
'#default_value' => isset($_SESSION['cmis_repository']) ? $_SESSION['cmis_repository'] : '',
'#options' => $repositories,
);
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('OK'),
);
return $form;
}
/**
* CMIS repository switcher form submit.
*
*/
function cmis_repository_switcher_form_submit($form, &$form_state) {
// saving current CMIS repository
$_SESSION['cmis_repository'] = $form_state['values']['cmis_repository'];
// redirect to the source page
$form_state['redirect'] = $_GET['q'];
}
Functions
Name | Description |
---|---|
cmis_block_info | Implements hook_block_info |
cmis_block_view | Implements hook_block_info |
cmis_boot | Implementation of hook_boot() |
cmis_error_handler | Utility for handling CMIS errors. |
cmis_get_repository | Returns a CMIS repository properties, based on local configuration. |
cmis_get_vendors | Utility function that returns all known vendors |
cmis_invoke | CMIS invoke service. This method should return a stdClass with the following form: $return = new stdClass(); $return->code = 200; // HTTP return code $return->body = 'data'; // result body $return->content_type =… |
cmis_permission | Return permissions for the CMIS module. |
cmis_repository_switcher_form | CMIS repository switcher form. |
cmis_repository_switcher_form_submit | CMIS repository switcher form submit. |
cmis_vendor_invoke | Utility function used to call a CMIS method, using the CMIS vendor selected in config. |
Classes
Name | Description |
---|---|
CMISException | CMIS Exception class. |