public function testIsChained() { $this->assertFalse(PropertyChainValue::isChained('Foo')); $this->assertTrue(PropertyChainValue::isChained('Foo.Bar')); }
/** * Create an PrintRequest object from a string description as one * would normally use in #ask and related inputs. The string must start * with a "?" and may contain label and formatting parameters after "=" * or "#", respectively. However, further parameters, given in #ask by * "|+param=value" are not allowed here; they must be added * individually. * * @since 2.5 * * @param string $text * @param boolean $showMode = false * * @return PrintRequest|null */ public static function deserialize($text, $showMode = false) { list($parts, $outputFormat, $printRequestLabel) = self::getPartsFromText($text); $data = null; if ($printRequestLabel === '') { // print "this" $printmode = PrintRequest::PRINT_THIS; $label = ''; // default } elseif (self::isCategory($printRequestLabel)) { // print categories $printmode = PrintRequest::PRINT_CATS; $label = $showMode ? '' : Localizer::getInstance()->getNamespaceTextById(NS_CATEGORY); // default } elseif (PropertyChainValue::isChained($printRequestLabel)) { $data = new PropertyChainValue(); $data->setUserValue($printRequestLabel); $printmode = PrintRequest::PRINT_CHAIN; $label = $showMode ? '' : $data->getLastPropertyChainValue()->getWikiValue(); // default } else { // print property or check category $title = Title::newFromText($printRequestLabel, SMW_NS_PROPERTY); // trim needed for \n // not a legal property/category name; give up if ($title === null) { return null; } if ($title->getNamespace() == NS_CATEGORY) { $printmode = PrintRequest::PRINT_CCAT; $data = $title; $label = $showMode ? '' : $title->getText(); // default } else { // enforce interpretation as property (even if it starts with something that looks like another namespace) $printmode = PrintRequest::PRINT_PROP; $data = PropertyValue::makeUserProperty($printRequestLabel); if (!$data->isValid()) { // not a property; give up return null; } $label = $showMode ? '' : $data->getWikiValue(); // default } } // "plain printout", avoid empty string to avoid confusions with "false" if ($outputFormat === '') { $outputFormat = '-'; } // label found, use this instead of default if (count($parts) > 1) { $label = trim($parts[1]); } try { $printRequest = new PrintRequest($printmode, $label, $data, trim($outputFormat)); } catch (InvalidArgumentException $e) { // something still went wrong; give up $printRequest = null; } return $printRequest; }