コード例 #1
0
 /**
  * Enable you to map an rdf property to a form element using the Widget
  *
  * @access public
  * @author Bertrand Chevrier, <*****@*****.**>
  * @param  Property property
  * @return tao_helpers_form_FormElement
  */
 public static function elementMap(core_kernel_classes_Property $property)
 {
     $returnValue = null;
     //create the element from the right widget
     $property->feed();
     $widgetResource = $property->getWidget();
     if (is_null($widgetResource)) {
         return null;
     }
     //authoring widget is not used in standalone mode
     if ($widgetResource->getUri() == 'http://www.tao.lu/datatypes/WidgetDefinitions.rdf#Authoring' && tao_helpers_Context::check('STANDALONE_MODE')) {
         return null;
     }
     // horrible hack to fix file widget
     if ($widgetResource->getUri() == 'http://www.tao.lu/datatypes/WidgetDefinitions.rdf#AsyncFile') {
         $widgetResource = new core_kernel_classes_Resource('http://www.tao.lu/datatypes/WidgetDefinitions.rdf#GenerisAsyncFile');
     }
     $element = tao_helpers_form_FormFactory::getElementByWidget(tao_helpers_Uri::encode($property->getUri()), $widgetResource);
     if (!is_null($element)) {
         if ($element->getWidget() != $widgetResource->getUri()) {
             common_Logger::w('Widget definition differs from implementation: ' . $element->getWidget() . ' != ' . $widgetResource->getUri());
             return null;
         }
         //use the property label as element description
         $propDesc = strlen(trim($property->getLabel())) > 0 ? $property->getLabel() : str_replace(LOCAL_NAMESPACE, '', $property->getUri());
         $element->setDescription($propDesc);
         //multi elements use the property range as options
         if (method_exists($element, 'setOptions')) {
             $range = $property->getRange();
             if ($range != null) {
                 $options = array();
                 if ($element instanceof tao_helpers_form_elements_Treeview) {
                     if ($property->getUri() == RDFS_RANGE) {
                         $options = self::rangeToTree(new core_kernel_classes_Class(RDFS_RESOURCE));
                     } else {
                         $options = self::rangeToTree($range);
                     }
                 } else {
                     foreach ($range->getInstances(true) as $rangeInstance) {
                         $options[tao_helpers_Uri::encode($rangeInstance->getUri())] = $rangeInstance->getLabel();
                     }
                     //set the default value to an empty space
                     if (method_exists($element, 'setEmptyOption')) {
                         $element->setEmptyOption(' ');
                     }
                 }
                 //complete the options listing
                 $element->setOptions($options);
             }
         }
         $returnValue = $element;
     }
     return $returnValue;
 }
コード例 #2
0
 /**
  * Generates a form to define the values of a specific property for a resource
  * 
  * @param core_kernel_classes_Resource $resource
  * @param core_kernel_classes_Property $property
  * @return tao_helpers_form_GenerisTreeForm
  */
 public static function buildTree(core_kernel_classes_Resource $resource, core_kernel_classes_Property $property)
 {
     $tree = new self($resource, $property);
     $range = $property->getRange();
     $tree->setData('rootNode', $range->getUri());
     $tree->setData('dataUrl', _url('getData', 'GenerisTree', 'tao'));
     $tree->setData('saveUrl', _url('setValues', 'GenerisTree', 'tao'));
     $values = $resource->getPropertyValues($property);
     $tree->setData('values', $values);
     $openNodeUris = tao_models_classes_GenerisTreeFactory::getNodesToOpen($values, $range);
     $tree->setData('openNodes', $openNodeUris);
     return $tree;
 }
コード例 #3
0
 /**
  * @param \core_kernel_classes_Triple $triple
  * @return bool
  */
 public static function isFileReference(\core_kernel_classes_Triple $triple)
 {
     $prop = new \core_kernel_classes_Property($triple->predicate);
     $range = $prop->getRange();
     $rangeUri = is_null($range) ? '' : $range->getUri();
     switch ($rangeUri) {
         case CLASS_GENERIS_FILE:
             return true;
         case RDFS_RESOURCE:
             $object = new \core_kernel_classes_Resource($triple->object);
             return $object->hasType(new \core_kernel_classes_Class(CLASS_GENERIS_FILE));
         default:
             return false;
     }
 }
コード例 #4
0
 /**
  * Initialize the form elements
  *
  * @access protected
  * @author Bertrand Chevrier, <*****@*****.**>
  * @return mixed
  */
 protected function initElements()
 {
     $property = new core_kernel_classes_Property($this->instance->getUri());
     isset($this->options['index']) ? $index = $this->options['index'] : ($index = 1);
     $propertyProperties = array_merge(tao_helpers_form_GenerisFormFactory::getDefaultProperties(), array(new core_kernel_classes_Property(PROPERTY_IS_LG_DEPENDENT), new core_kernel_classes_Property(TAO_GUIORDER_PROP)));
     $elementNames = array();
     foreach ($propertyProperties as $propertyProperty) {
         //map properties widgets to form elements
         $element = tao_helpers_form_GenerisFormFactory::elementMap($propertyProperty);
         if (!is_null($element)) {
             //take property values to populate the form
             $values = $property->getPropertyValuesCollection($propertyProperty);
             foreach ($values->getIterator() as $value) {
                 if (!is_null($value)) {
                     if ($value instanceof core_kernel_classes_Resource) {
                         $element->setValue($value->getUri());
                     }
                     if ($value instanceof core_kernel_classes_Literal) {
                         $element->setValue((string) $value);
                     }
                 }
             }
             $element->setName("{$index}_{$element->getName()}");
             $element->addClass('property');
             if ($propertyProperty->getUri() == TAO_GUIORDER_PROP) {
                 $element->addValidator(tao_helpers_form_FormFactory::getValidator('Integer'));
             }
             if ($propertyProperty->getUri() == RDFS_LABEL) {
                 $element->addValidator(tao_helpers_form_FormFactory::getValidator('NotEmpty'));
             }
             $this->form->addElement($element);
             $elementNames[] = $element->getName();
         }
     }
     //build the type list from the "widget/range to type" map
     $typeElt = tao_helpers_form_FormFactory::getElement("{$index}_type", 'Combobox');
     $typeElt->setDescription(__('Type'));
     $typeElt->addAttribute('class', 'property-type property');
     $typeElt->setEmptyOption(' --- ' . __('select') . ' --- ');
     $options = array();
     $checkRange = false;
     foreach (tao_helpers_form_GenerisFormFactory::getPropertyMap() as $typeKey => $map) {
         $options[$typeKey] = $map['title'];
         $widget = $property->getWidget();
         if ($widget instanceof core_kernel_classes_Resource) {
             if ($widget->getUri() == $map['widget']) {
                 $typeElt->setValue($typeKey);
                 $checkRange = is_null($map['range']);
             }
         }
     }
     $typeElt->setOptions($options);
     $this->form->addElement($typeElt);
     $elementNames[] = $typeElt->getName();
     //list drop down
     $listService = tao_models_classes_ListService::singleton();
     $listElt = tao_helpers_form_FormFactory::getElement("{$index}_range", 'Combobox');
     $listElt->setDescription(__('List values'));
     $listElt->addAttribute('class', 'property-listvalues property');
     $listElt->setEmptyOption(' --- ' . __('select') . ' --- ');
     $listOptions = array();
     foreach ($listService->getLists() as $list) {
         $listOptions[tao_helpers_Uri::encode($list->getUri())] = $list->getLabel();
         $range = $property->getRange();
         if (!is_null($range)) {
             if ($range->getUri() == $list->getUri()) {
                 $listElt->setValue($list->getUri());
             }
         }
     }
     $listOptions['new'] = ' + ' . __('Add / Edit lists');
     $listElt->setOptions($listOptions);
     if ($checkRange) {
         $listElt->addValidator(tao_helpers_form_FormFactory::getValidator('NotEmpty'));
     }
     $this->form->addElement($listElt);
     $elementNames[] = $listElt->getName();
     //index part
     $indexes = $property->getPropertyValues(new \core_kernel_classes_Property(INDEX_PROPERTY));
     foreach ($indexes as $i => $indexUri) {
         $indexProperty = new \oat\tao\model\search\Index($indexUri);
         $indexFormContainer = new tao_actions_form_IndexProperty($this->getClazz(), $indexProperty, array('property' => $property->getUri(), 'propertyindex' => $index, 'index' => $i));
         /** @var tao_helpers_form_Form $indexForm */
         $indexForm = $indexFormContainer->getForm();
         foreach ($indexForm->getElements() as $element) {
             $this->form->addElement($element);
             $elementNames[] = $element->getName();
         }
     }
     //add this element only when the property is defined (type)
     if (!is_null($property->getRange())) {
         $addIndexElt = tao_helpers_form_FormFactory::getElement("index_{$index}_add", 'Free');
         $addIndexElt->setValue("<a href='#' class='btn-info index-adder small index'><span class='icon-add'></span> " . __('Add index') . "</a><div class='clearfix'></div>");
         $this->form->addElement($addIndexElt);
         $elementNames[] = $addIndexElt;
     } else {
         $addIndexElt = tao_helpers_form_FormFactory::getElement("index_{$index}_p", 'Free');
         $addIndexElt->setValue("<p class='index' >" . __('Choose a type for your property first') . "</p>");
         $this->form->addElement($addIndexElt);
         $elementNames[] = $addIndexElt;
     }
     //add an hidden elt for the property uri
     $encodedUri = tao_helpers_Uri::encode($property->getUri());
     $propUriElt = tao_helpers_form_FormFactory::getElement("{$index}_uri", 'Hidden');
     $propUriElt->addAttribute('class', 'property-uri property');
     $propUriElt->setValue($encodedUri);
     $this->form->addElement($propUriElt);
     $elementNames[] = $propUriElt;
     if (count($elementNames) > 0) {
         $groupTitle = $this->getGroupTitle($property);
         $this->form->createGroup("property_{$encodedUri}", $groupTitle, $elementNames);
     }
 }
コード例 #5
0
 /**
  * Enable you to map an rdf property to a form element using the Widget
  *
  * @access public
  * @author Bertrand Chevrier, <*****@*****.**>
  * @param  core_kernel_classes_Property $property
  * @return tao_helpers_form_FormElement
  */
 public static function elementMap(core_kernel_classes_Property $property)
 {
     $returnValue = null;
     //create the element from the right widget
     $property->feed();
     $widgetResource = $property->getWidget();
     if (is_null($widgetResource)) {
         return null;
     }
     //authoring widget is not used in standalone mode
     if ($widgetResource->getUri() === 'http://www.tao.lu/datatypes/WidgetDefinitions.rdf#Authoring' && tao_helpers_Context::check('STANDALONE_MODE')) {
         return null;
     }
     // horrible hack to fix file widget
     if ($widgetResource->getUri() === 'http://www.tao.lu/datatypes/WidgetDefinitions.rdf#AsyncFile') {
         $widgetResource = new core_kernel_classes_Resource('http://www.tao.lu/datatypes/WidgetDefinitions.rdf#GenerisAsyncFile');
     }
     $element = tao_helpers_form_FormFactory::getElementByWidget(tao_helpers_Uri::encode($property->getUri()), $widgetResource);
     if (!is_null($element)) {
         if ($element->getWidget() !== $widgetResource->getUri()) {
             common_Logger::w('Widget definition differs from implementation: ' . $element->getWidget() . ' != ' . $widgetResource->getUri());
             return null;
         }
         //use the property label as element description
         $propDesc = strlen(trim($property->getLabel())) > 0 ? $property->getLabel() : str_replace(LOCAL_NAMESPACE, '', $property->getUri());
         $element->setDescription($propDesc);
         //multi elements use the property range as options
         if (method_exists($element, 'setOptions')) {
             $range = $property->getRange();
             if ($range !== null) {
                 $options = array();
                 if ($element instanceof TreeAware) {
                     $sortedOptions = $element->rangeToTree($property->getUri() === RDFS_RANGE ? new core_kernel_classes_Class(RDFS_RESOURCE) : $range);
                 } else {
                     /** @var core_kernel_classes_Resource $rangeInstance */
                     foreach ($range->getInstances(true) as $rangeInstance) {
                         $level = $rangeInstance->getOnePropertyValue(new core_kernel_classes_Property(TAO_LIST_LEVEL_PROP));
                         if (is_null($level)) {
                             $options[tao_helpers_Uri::encode($rangeInstance->getUri())] = array(tao_helpers_Uri::encode($rangeInstance->getUri()), $rangeInstance->getLabel());
                         } else {
                             $level = $level instanceof core_kernel_classes_Resource ? $level->getUri() : (string) $level;
                             $options[$level] = array(tao_helpers_Uri::encode($rangeInstance->getUri()), $rangeInstance->getLabel());
                         }
                     }
                     ksort($options);
                     $sortedOptions = array();
                     foreach ($options as $id => $values) {
                         $sortedOptions[$values[0]] = $values[1];
                     }
                     //set the default value to an empty space
                     if (method_exists($element, 'setEmptyOption')) {
                         $element->setEmptyOption(' ');
                     }
                 }
                 //complete the options listing
                 $element->setOptions($sortedOptions);
             }
         }
         foreach (ValidationRuleRegistry::getRegistry()->getValidators($property) as $validator) {
             $element->addValidator($validator);
         }
         $returnValue = $element;
     }
     return $returnValue;
 }
コード例 #6
0
 /**
  * Render the add index sub form.
  * @throws Exception
  * @return void
  */
 public function addPropertyIndex()
 {
     if (!tao_helpers_Request::isAjax()) {
         throw new Exception("wrong request mode");
     }
     if (!$this->hasRequestParameter('uri')) {
         throw new Exception("wrong request Parameter");
     }
     $uri = $this->getRequestParameter('uri');
     $clazz = $this->getCurrentClass();
     $index = 1;
     if ($this->hasRequestParameter('index')) {
         $index = $this->getRequestParameter('index');
     }
     $propertyIndex = 1;
     if ($this->hasRequestParameter('propertyIndex')) {
         $propertyIndex = $this->getRequestParameter('propertyIndex');
     }
     //create and attach the new index property to the property
     $property = new core_kernel_classes_Property(tao_helpers_Uri::decode($uri));
     $class = new \core_kernel_classes_Class("http://www.tao.lu/Ontologies/TAO.rdf#Index");
     //get property range to select a default tokenizer
     /** @var core_kernel_classes_Class $range */
     $range = $property->getRange();
     //range is empty select item content
     $tokenizer = null;
     if (is_null($range)) {
         $tokenizer = new core_kernel_classes_Resource('http://www.tao.lu/Ontologies/TAO.rdf#RawValueTokenizer');
     } else {
         $tokenizer = $range->getUri() === RDFS_LITERAL ? new core_kernel_classes_Resource('http://www.tao.lu/Ontologies/TAO.rdf#RawValueTokenizer') : new core_kernel_classes_Resource('http://www.tao.lu/Ontologies/TAO.rdf#LabelTokenizer');
     }
     $indexClass = new core_kernel_classes_Class('http://www.tao.lu/Ontologies/TAO.rdf#Index');
     $i = 0;
     $indexIdentifierBackup = preg_replace('/[^a-z_0-9]/', '_', strtolower($property->getLabel()));
     $indexIdentifierBackup = ltrim(trim($indexIdentifierBackup, '_'), '0..9');
     $indexIdentifier = $indexIdentifierBackup;
     do {
         if ($i !== 0) {
             $indexIdentifier = $indexIdentifierBackup . '_' . $i;
         }
         $resources = $indexClass->searchInstances(array(INDEX_PROPERTY_IDENTIFIER => $indexIdentifier), array('like' => false));
         $count = count($resources);
         $i++;
     } while ($count !== 0);
     $indexProperty = $class->createInstanceWithProperties(array(RDFS_LABEL => preg_replace('/_/', ' ', ucfirst($indexIdentifier)), INDEX_PROPERTY_IDENTIFIER => $indexIdentifier, INDEX_PROPERTY_TOKENIZER => $tokenizer, INDEX_PROPERTY_FUZZY_MATCHING => GENERIS_TRUE, INDEX_PROPERTY_DEFAULT_SEARCH => GENERIS_FALSE));
     $property->setPropertyValue(new core_kernel_classes_Property(INDEX_PROPERTY), $indexProperty);
     //generate form
     $indexFormContainer = new tao_actions_form_IndexProperty($clazz, $indexProperty, array('index' => $index, 'propertyindex' => $propertyIndex));
     $myForm = $indexFormContainer->getForm();
     $form = trim(preg_replace('/\\s+/', ' ', $myForm->renderElements()));
     echo json_encode(array('form' => $form));
 }
コード例 #7
0
 /**
  * 
  * @author Lionel Lecaque, lionel@taotesting.com
  * @param core_kernel_classes_Resource $source
  * @param core_kernel_classes_Resource $destination
  * @param core_kernel_classes_Property $property
  */
 protected function cloneInstanceProperty(core_kernel_classes_Resource $source, core_kernel_classes_Resource $destination, core_kernel_classes_Property $property)
 {
     $range = $property->getRange();
     // Avoid doublons, the RDF TYPE property will be set by the implementation layer
     if ($property->getUri() != RDF_TYPE) {
         foreach ($source->getPropertyValuesCollection($property)->getIterator() as $propertyValue) {
             if (!is_null($range) && $range->getUri() == CLASS_GENERIS_FILE) {
                 $file = new core_kernel_versioning_File($propertyValue->getUri());
                 $newFile = $file->getRepository()->spawnFile($file->getAbsolutePath(), $file->getLabel());
                 $destination->setPropertyValue($property, $newFile);
             } else {
                 $destination->setPropertyValue($property, $propertyValue);
             }
         }
     }
 }
コード例 #8
0
    /**
     * Short description of method setPropertyValue
     *
     * @access public
     * @author Joel Bout, <*****@*****.**>
     * @param  Resource resource
     * @param  Property property
     * @param  string object
     * @param  string lg
     * @return boolean
     */
    public function setPropertyValue(\core_kernel_classes_Resource $resource, \core_kernel_classes_Property $property, $object, $lg = null)
    {
        $returnValue = (bool) false;
        // Get the table name
        $referencer = ResourceReferencer::singleton();
        $tableName = $referencer->resourceLocation($resource);
        if (empty($tableName)) {
            \common_Logger::i('resourceLocation failed');
            return $returnValue;
        }
        $dbWrapper = \core_kernel_classes_DbWrapper::singleton();
        $object = $object instanceof \core_kernel_classes_Resource ? $object->getUri() : (string) $object;
        $instanceId = null;
        $propertyValue = null;
        $propertyForeignUri = null;
        $propertyRange = $property->getRange();
        // Get property instance
        $instanceId = Utils::getInstanceId($resource);
        // Get the property value or property foreign id
        if (!is_null($propertyRange)) {
            // Foregin resource
            if ($propertyRange->getUri() != RDFS_LITERAL) {
                $propertyForeignUri = $object;
            } else {
                $propertyValue = $object;
            }
        } else {
            // We assume the property value is a literal.
            $propertyValue = $object;
        }
        $propertyLocation = $referencer->propertyLocation($property);
        if (in_array("{$tableName}props", $propertyLocation) || !$referencer->isPropertyReferenced($property)) {
            $lang = "";
            // Define language if required
            if ($property->isLgDependent()) {
                if ($lg != null) {
                    $lang = $lg;
                } else {
                    $lang = \common_session_SessionManager::getSession()->getDataLanguage();
                }
            }
            try {
                $query = 'INSERT INTO "' . $tableName . 'props"
	        		("instance_id", "property_uri", "property_value", "property_foreign_uri", "l_language") 
	        		VALUES (?, ?, ?, ?, ?)';
                $result = $dbWrapper->exec($query, array($instanceId, $property->getUri(), $propertyValue, $propertyForeignUri, $lang));
                $returnValue = true;
            } catch (\PDOException $e) {
                throw new Exception("Unable to set property (multiple) Value for the instance {$resource->getUri()} in {$tableName} : " . $e->getMessage());
            }
        } else {
            try {
                $propertyName = HardapiUtils::getShortName($property);
                $queryUpdate = 'UPDATE "' . $tableName . '" SET "' . $propertyName . '" = ? WHERE id = ?';
                $result = $dbWrapper->exec($queryUpdate, array($propertyValue != null ? $propertyValue : $propertyForeignUri, $instanceId));
                $returnValue = true;
            } catch (\PDOException $e) {
                throw new Exception("Unable to set property (single) Value for the instance {$resource->getUri()} in {$tableName} : " . $e->getMessage());
            }
        }
        return (bool) $returnValue;
    }
コード例 #9
0
 /**
  * Short description of method initElements
  *
  * @access protected
  * @author Joel Bout, <*****@*****.**>
  * @return mixed
  */
 protected function initElements()
 {
     if (!isset($this->options['mode'])) {
         throw new Exception("Please set a mode into container options ");
     }
     parent::initElements();
     //login field
     $loginElement = $this->form->getElement(tao_helpers_Uri::encode(PROPERTY_USER_LOGIN));
     $loginElement->setDescription($loginElement->getDescription() . ' *');
     if ($this->options['mode'] == 'add') {
         $loginElement->addValidators(array(tao_helpers_form_FormFactory::getValidator('NotEmpty'), tao_helpers_form_FormFactory::getValidator('Callback', array('object' => tao_models_classes_UserService::singleton(), 'method' => 'loginAvailable', 'message' => __('This Login is already in use')))));
     } else {
         $loginElement->setAttributes(array('readonly' => 'readonly', 'disabled' => 'disabled'));
     }
     //set default lang to the languages fields
     $langService = tao_models_classes_LanguageService::singleton();
     $dataLangElt = $this->form->getElement(tao_helpers_Uri::encode(PROPERTY_USER_DEFLG));
     $dataLangElt->addValidator(tao_helpers_form_FormFactory::getValidator('NotEmpty'));
     $dataLangElt->setDescription($dataLangElt->getDescription() . ' *');
     $dataUsage = new core_kernel_classes_Resource(INSTANCE_LANGUAGE_USAGE_DATA);
     $dataOptions = array();
     foreach ($langService->getAvailableLanguagesByUsage($dataUsage) as $lang) {
         $dataOptions[tao_helpers_Uri::encode($lang->getUri())] = $lang->getLabel();
     }
     $dataLangElt->setOptions($dataOptions);
     $uiLangElt = $this->form->getElement(tao_helpers_Uri::encode(PROPERTY_USER_UILG));
     $uiLangElt->addValidator(tao_helpers_form_FormFactory::getValidator('NotEmpty'));
     $uiLangElt->setDescription($uiLangElt->getDescription() . ' *');
     $guiUsage = new core_kernel_classes_Resource(INSTANCE_LANGUAGE_USAGE_GUI);
     $guiOptions = array();
     foreach ($langService->getAvailableLanguagesByUsage($guiUsage) as $lang) {
         $guiOptions[tao_helpers_Uri::encode($lang->getUri())] = $lang->getLabel();
     }
     $uiLangElt->setOptions($guiOptions);
     // roles field
     $property = new core_kernel_classes_Property(PROPERTY_USER_ROLES);
     $roles = $property->getRange()->getInstances(true);
     $rolesOptions = array();
     foreach ($roles as $r) {
         $rolesOptions[tao_helpers_Uri::encode($r->getUri())] = $r->getLabel();
     }
     asort($rolesOptions);
     $rolesElt = $this->form->getElement(tao_helpers_Uri::encode($property->getUri()));
     $rolesElt->setDescription($rolesElt->getDescription() . ' *');
     $rolesElt->addValidator(tao_helpers_form_FormFactory::getValidator('NotEmpty'));
     $rolesElt->setOptions($rolesOptions);
     // password field
     $this->form->removeElement(tao_helpers_Uri::encode(PROPERTY_USER_PASSWORD));
     if ($this->options['mode'] == 'add') {
         $pass1Element = tao_helpers_form_FormFactory::getElement('password1', 'Hiddenbox');
         $pass1Element->setDescription(__('Password *'));
         $pass1Element->addValidators(array(tao_helpers_form_FormFactory::getValidator('NotEmpty'), tao_helpers_form_FormFactory::getValidator('Length', array('min' => 3))));
         $this->form->addElement($pass1Element);
         $pass2Element = tao_helpers_form_FormFactory::getElement('password2', 'Hiddenbox');
         $pass2Element->setDescription(__('Repeat password *'));
         $pass2Element->addValidators(array(tao_helpers_form_FormFactory::getValidator('NotEmpty'), tao_helpers_form_FormFactory::getValidator('Password', array('password2_ref' => $pass1Element))));
         $this->form->addElement($pass2Element);
     } else {
         if (helpers_PlatformInstance::isDemo()) {
             $warning = tao_helpers_form_FormFactory::getElement('warningpass', 'Label');
             $warning->setValue(__('Unable to change passwords in demo mode'));
             $this->form->addElement($warning);
             $this->form->createGroup("pass_group", __("Change the password"), array('warningpass'));
         } else {
             $pass2Element = tao_helpers_form_FormFactory::getElement('password2', 'Hiddenbox');
             $pass2Element->setDescription(__('New password'));
             $pass2Element->addValidators(array(tao_helpers_form_FormFactory::getValidator('Length', array('min' => 3))));
             $this->form->addElement($pass2Element);
             $pass3Element = tao_helpers_form_FormFactory::getElement('password3', 'Hiddenbox');
             $pass3Element->setDescription(__('Repeat new password'));
             $pass3Element->addValidators(array(tao_helpers_form_FormFactory::getValidator('Password', array('password2_ref' => $pass2Element))));
             $this->form->addElement($pass3Element);
             $this->form->createGroup("pass_group", __("Change the password"), array('password1', 'password2', 'password3'));
             if (empty($_POST[$pass2Element->getName()]) && empty($_POST[$pass3Element->getName()])) {
                 $pass2Element->setForcedValid();
                 $pass3Element->setForcedValid();
             }
         }
     }
     /**/
 }
コード例 #10
0
 public static function elementMap(core_kernel_classes_Property $property, $displayCode = false)
 {
     $returnValue = null;
     //create the element from the right widget
     $widgetResource = $property->getWidget();
     if (is_null($widgetResource)) {
         return null;
     }
     $widget = ucfirst(strtolower(substr($widgetResource->getUri(), strrpos($widgetResource->getUri(), '#') + 1)));
     $element = tao_helpers_form_FormFactory::getElementByWidget(tao_helpers_Uri::encode($property->getUri()), $widgetResource);
     if (!is_null($element)) {
         if ($element->getWidget() != $widgetResource->getUri()) {
             return null;
         }
         //use the property label as element description
         strlen(trim($property->getLabel())) > 0 ? $propDesc = tao_helpers_Display::textCleaner($property->getLabel(), ' ') : ($propDesc = 'field ' . (count($myForm->getElements()) + 1));
         $element->setDescription($propDesc);
         //multi elements use the property range as options
         if (method_exists($element, 'setOptions')) {
             $range = $property->getRange();
             if ($range != null) {
                 $options = array();
                 foreach ($range->getInstances(true) as $rangeInstance) {
                     $value = $rangeInstance->getLabel();
                     if ($displayCode) {
                         //get the code of the process variable:
                         $code = $rangeInstance->getOnePropertyValue(new core_kernel_classes_Property(PROPERTY_PROCESSVARIABLES_CODE));
                         if (!empty($code) && $code instanceof core_kernel_classes_Literal) {
                             $value .= " (code:{$code->literal})";
                         }
                     }
                     $options[tao_helpers_Uri::encode($rangeInstance->getUri())] = $value;
                 }
                 //set the default value to an empty space
                 if (method_exists($element, 'setEmptyOption')) {
                     $element->setEmptyOption(' ');
                 }
                 //complete the options listing
                 $element->setOptions($options);
             }
         }
         $returnValue = $element;
     }
     return $returnValue;
 }
コード例 #11
0
 /**
  * Initialize the form elements
  *
  * @access protected
  * @author Bertrand Chevrier, <*****@*****.**>
  * @return mixed
  */
 protected function initElements()
 {
     $property = new core_kernel_classes_Property($this->instance->getUri());
     isset($this->options['index']) ? $index = $this->options['index'] : ($index = 1);
     $propertyProperties = array_merge(tao_helpers_form_GenerisFormFactory::getDefaultProperties(), array(new core_kernel_classes_Property(PROPERTY_IS_LG_DEPENDENT), new core_kernel_classes_Property(TAO_GUIORDER_PROP)));
     $elementNames = array();
     foreach ($propertyProperties as $propertyProperty) {
         //map properties widgets to form elements
         $element = tao_helpers_form_GenerisFormFactory::elementMap($propertyProperty);
         if (!is_null($element)) {
             //take property values to populate the form
             $values = $property->getPropertyValuesCollection($propertyProperty);
             foreach ($values->getIterator() as $value) {
                 if (!is_null($value)) {
                     if ($value instanceof core_kernel_classes_Resource) {
                         $element->setValue($value->getUri());
                     }
                     if ($value instanceof core_kernel_classes_Literal) {
                         $element->setValue((string) $value);
                     }
                 }
             }
             $element->setName("{$index}_{$element->getName()}");
             $element->addClass('property');
             $this->form->addElement($element);
             $elementNames[] = $element->getName();
             if ($propertyProperty->getUri() == TAO_GUIORDER_PROP) {
                 $element->addValidator(tao_helpers_form_FormFactory::getValidator('Integer'));
             }
         }
     }
     //build the type list from the "widget/range to type" map
     $typeElt = tao_helpers_form_FormFactory::getElement("{$index}_type", 'Combobox');
     $typeElt->setDescription(__('Type'));
     $typeElt->addAttribute('class', 'property-type property');
     $typeElt->setEmptyOption(' --- ' . __('select') . ' --- ');
     $options = array();
     $checkRange = false;
     foreach (tao_helpers_form_GenerisFormFactory::getPropertyMap() as $typeKey => $map) {
         $options[$typeKey] = $map['title'];
         $widget = $property->getWidget();
         if ($widget instanceof core_kernel_classes_Resource) {
             if ($widget->getUri() == $map['widget']) {
                 $typeElt->setValue($typeKey);
                 $checkRange = is_null($map['range']);
             }
         }
     }
     $typeElt->setOptions($options);
     $this->form->addElement($typeElt);
     $elementNames[] = $typeElt->getName();
     //list drop down
     $listService = tao_models_classes_ListService::singleton();
     $listElt = tao_helpers_form_FormFactory::getElement("{$index}_range", 'Combobox');
     $listElt->setDescription(__('List values'));
     $listElt->addAttribute('class', 'property-listvalues property');
     $listElt->setEmptyOption(' --- ' . __('select') . ' --- ');
     $listOptions = array();
     foreach ($listService->getLists() as $list) {
         $listOptions[tao_helpers_Uri::encode($list->getUri())] = $list->getLabel();
         $range = $property->getRange();
         if (!is_null($range)) {
             if ($range->getUri() == $list->getUri()) {
                 $listElt->setValue($list->getUri());
             }
         }
     }
     $listOptions['new'] = ' + ' . __('Add / Edit lists');
     $listElt->setOptions($listOptions);
     if ($checkRange) {
         $listElt->addValidator(tao_helpers_form_FormFactory::getValidator('NotEmpty'));
     }
     $this->form->addElement($listElt);
     $elementNames[] = $listElt->getName();
     //add an hidden elt for the property uri
     $encodedUri = tao_helpers_Uri::encode($property->getUri());
     $propUriElt = tao_helpers_form_FormFactory::getElement("{$index}_uri", 'Hidden');
     $propUriElt->addAttribute('class', 'property-uri property');
     $propUriElt->setValue($encodedUri);
     $this->form->addElement($propUriElt);
     $elementNames[] = $propUriElt;
     if (count($elementNames) > 0) {
         $groupTitle = $this->getGroupTitle($property);
         $this->form->createGroup("property_{$encodedUri}", $groupTitle, $elementNames);
     }
 }
コード例 #12
0
 /**
  * Evaluates the raw values provided by the csv file into
  * the actual values to be assigned to  the resource
  * 
  * @param string $column
  * @param core_kernel_classes_Property $property
  * @param mixed $value
  * @return array
  */
 protected function evaluateValues($column, core_kernel_classes_Property $property, $value)
 {
     $range = $property->getRange();
     // assume literal if no range defined
     $range = is_null($range) ? new core_kernel_classes_Class(RDFS_LITERAL) : $range;
     $evaluatedValue = $this->applyCallbacks($value, $this->options, $property);
     // ensure it's an array
     $evaluatedValue = is_array($evaluatedValue) ? $evaluatedValue : array($evaluatedValue);
     if ($range->getUri() != RDFS_LITERAL) {
         // validate resources
         foreach ($evaluatedValue as $key => $eVal) {
             $resource = new core_kernel_classes_Resource($eVal);
             if ($resource->exists()) {
                 if (!$resource->hasType($range)) {
                     // value outside of range
                     unset($evaluatedValue[$key]);
                 }
             } else {
                 // value not found
                 unset($evaluatedValue[$key]);
             }
         }
     }
     return $evaluatedValue;
 }