FromKernel::uses('core/linker.lib', 'utils/ajax.lib', 'utils/input.lib'); ResourceLinker::init(); $userInput = Claro_UserInput::getInstance(); $userInput->setValidator('cmd', new Claro_Validator_AllowedList(array('getLinkList', 'getResourceList', 'resolveLocator'))); $cmd = $userInput->get('cmd', 'getResourceList'); $locator = isset($_REQUEST['crl']) && !empty($_REQUEST['crl']) ? ClarolineResourceLocator::parse(rawurldecode($_REQUEST['crl'])) : ResourceLinker::$Navigator->getCurrentLocator(array()); if ('getLinkList' == $cmd) { $linkListIt = ResourceLinker::getLinkList($locator); // FIXME : use getResourceName instead of the title recorded in database ! if (empty($linkListIt)) { $linkList = array(); } else { $linkList = array(); // $linkList = iterator_to_array( $linkListIt ); foreach ($linkListIt as $link) { $linkList[] = array('crl' => $link['crl'], 'name' => ResourceLinker::$Resolver->getResourceName(ClarolineResourceLocator::parse($link['crl']))); } } $response = new Json_Response($linkList); } elseif ('resolveLocator' == $cmd) { $resourceLinkerResolver = new ResourceLinkerResolver(); $url = $resourceLinkerResolver->resolve($locator); $response = new Json_Response(array('url' => $url)); } else { if (!ResourceLinker::$Navigator->isNavigable($locator)) { throw new Exception('Resource not navigable'); } $resourceList = ResourceLinker::$Navigator->getResourceList($locator); $elementList = $resourceList->toArray(); $resourceArr = array(); $resourceArr['name'] = ResourceLinker::$Resolver->getResourceName($locator);
public static function updateLinkList(ResourceLocator $locator, array $resourceList = array()) { $alreadyLinkedResourceList = self::getLinkList($locator); $alreadyLinkedResourceList->setFetchMode(Database_ResultSet::FETCH_COLUMN); if (count($alreadyLinkedResourceList)) { $alreadyLinkedResourceList = iterator_to_array($alreadyLinkedResourceList); } else { $alreadyLinkedResourceList = array(); } $deletedResourceList = array(); $addedResourceList = array(); foreach ($alreadyLinkedResourceList as $crl) { if (!in_array($crl, $resourceList)) { self::removeLink($locator, ClarolineResourceLocator::parse($crl)); } } foreach ($resourceList as $crl) { if (!in_array($crl, $alreadyLinkedResourceList)) { self::addLink($locator, ClarolineResourceLocator::parse($crl)); } } }