public function setReverseValues() { if (!tao_helpers_Request::isAjax()) { throw new common_exception_IsAjaxAction(__FUNCTION__); } $values = tao_helpers_form_GenerisTreeForm::getSelectedInstancesFromPost(); $resource = new core_kernel_classes_Resource($this->getRequestParameter('resourceUri')); $property = new core_kernel_classes_Property($this->getRequestParameter('propertyUri')); $currentValues = array(); foreach ($property->getDomain() as $domain) { $instances = $domain->searchInstances(array($property->getUri() => $resource), array('recursive' => true, 'like' => false)); $currentValues = array_merge($currentValues, array_keys($instances)); } $toAdd = array_diff($values, $currentValues); $toRemove = array_diff($currentValues, $values); $success = true; foreach ($toAdd as $uri) { $subject = new core_kernel_classes_Resource($uri); $success = $success && $subject->setPropertyValue($property, $resource); } foreach ($toRemove as $uri) { $subject = new core_kernel_classes_Resource($uri); $success = $success && $subject->removePropertyValue($property, $resource); } echo json_encode(array('saved' => $success)); }
/** * save the related items from the checkbox tree or from the sequence box * @return void */ public function saveItems() { if (!tao_helpers_Request::isAjax()) { throw new Exception("wrong request mode"); } $saved = false; $candidates = tao_helpers_form_GenerisTreeForm::getSelectedInstancesFromPost(); foreach ($this->getRequestParameters() as $key => $value) { if (preg_match("/^instance_/", $key)) { $candidates[] = tao_helpers_Uri::decode($value); } } $items = array(); foreach ($candidates as $uri) { $item = new core_kernel_classes_Resource($uri); $itemModel = $item->getOnePropertyValue(new core_kernel_classes_Property(TAO_ITEM_MODEL_PROPERTY)); $supported = false; if (!is_null($itemModel)) { foreach ($itemModel->getPropertyValues(new core_kernel_classes_Property(TAO_ITEM_MODELTARGET_PROPERTY)) as $targeturi) { if ($targeturi == TAO_ITEM_ONLINE_TARGET) { $supported = true; break; } } } if ($supported) { array_push($items, $item); } else { throw new common_Exception($item->getLabel() . ' cannot be added to a test'); } } if ($this->service->setTestItems($this->getCurrentInstance(), $items)) { $saved = true; } $this->returnJson(array('saved' => $saved)); }