{/implode}
});
- var definitionNamesWithInterface = {
- {implode from=$definitionNamesWithInterface key=definitionName item=interfaceName}
- '{@$definitionName}': '{@$interfaceName|encodeJS}'
+ var definitionInterfaces = {
+ {implode from=$definitionInterfaces key=definitionID item=interfaceName}
+ {@$definitionID}: '{@$interfaceName|encodeJS}'
{/implode}
};
var classNameDescription = elById('className').nextElementSibling;
- var definitionName = elById('definitionName');
- var definitionNameDescription = definitionName.nextElementSibling;
+ var definitionID = elById('definitionID');
+ var definitionIDDescription = definitionID.nextElementSibling;
function update() {
// update description of `definitionName` field
- definitionNameDescription.innerHTML = Language.get('wcf.acp.pip.objectType.definitionName.' + definitionName.value + '.description');
+ definitionIDDescription.innerHTML = Language.get('wcf.acp.pip.objectType.definitionName.' + definitionID.options.item(definitionID.selectedIndex).textContent + '.description');
// update description of `className` field with new interface
- if (definitionNamesWithInterface[definitionName.value]) {
+ if (definitionInterfaces[definitionID.value]) {
classNameDescription.innerHTML = Language.get('wcf.form.field.className.description.interface', {
- interface: definitionNamesWithInterface[definitionName.value]
+ interface: definitionInterfaces[definitionID.value]
});
}
}
- definitionName.addEventListener('change', update);
+ definitionID.addEventListener('change', update);
update();
});
/**
* Extracts the PIP object data from the given XML element.
*
- * @param \DOMElement $element
+ * @param \DOMElement $element element whose data is returned
+ * @param bool $saveData is `true` if data is intended to be saved and otherwise `false`
* @return array
*/
- abstract protected function getElementData(\DOMElement $element): array;
+ abstract protected function getElementData(\DOMElement $element, bool $saveData = false): array;
/**
* Returns the identifier of the given `import` element.
* @param \DOMElement|null $oldElement XML element with old data
*/
protected function saveObject(\DOMElement $newElement, \DOMElement $oldElement = null) {
- $newElementData = $this->getElementData($newElement);
+ $newElementData = $this->getElementData($newElement, true);
if ($oldElement === null) {
call_user_func([$this->className, 'create'], $newElementData);
}
else {
- $sqlData = $this->findExistingItem($this->getElementData($oldElement));
+ $sqlData = $this->findExistingItem($this->getElementData($oldElement, true));
$statement = WCF::getDB()->prepareStatement($sqlData['sql']);
$statement->execute($sqlData['parameters']);
* @inheritDoc
* @since 3.2
*/
- protected function getElementData(\DOMElement $element): array {
+ protected function getElementData(\DOMElement $element, bool $saveData = false): array {
$data = [
'name' => $element->getAttribute('name'),
'packageID' => $this->installation->getPackage()->packageID,
* @inheritDoc
* @since 3.2
*/
- protected function getElementData(\DOMElement $element): array {
+ protected function getElementData(\DOMElement $element, bool $saveData = false): array {
$data = parent::getElementData($element);
$icon = $element->getElementsByTagName('icon')->item(0);
* @inheritDoc
* @since 3.2
*/
- protected function getElementData(\DOMElement $element): array {
+ protected function getElementData(\DOMElement $element, bool $saveData = false): array {
$data = [
'className' => $element->getElementsByTagName('classname')->item(0)->nodeValue,
'packageID' => $this->installation->getPackage()->packageID,
* @inheritDoc
* @since 3.2
*/
- protected function getElementData(\DOMElement $element): array {
+ protected function getElementData(\DOMElement $element, bool $saveData = false): array {
$data = [
'menuItem' => $element->getAttribute('name'),
'packageID' => $this->installation->getPackage()->packageID
* @inheritDoc
* @since 3.2
*/
- protected function getElementData(\DOMElement $element): array {
+ protected function getElementData(\DOMElement $element, bool $saveData = false): array {
return [
'objectName' => $element->getElementsByTagName('objectname')->item(0)->nodeValue,
'packageID' => $this->installation->getPackage()->packageID
* @inheritDoc
* @since 3.2
*/
- protected function getElementData(\DOMElement $element): array {
+ protected function getElementData(\DOMElement $element, bool $saveData = false): array {
$data = [
'className' => $element->getElementsByTagName('classname')->item(0)->nodeValue,
'cronjobName' => $element->getAttribute('name'),
* @inheritDoc
* @since 3.2
*/
- protected function getElementData(\DOMElement $element): array {
+ protected function getElementData(\DOMElement $element, bool $saveData = false): array {
$data = [
'name' => $element->getAttribute('name'),
'packageID' => $this->installation->getPackage()->packageID,
* @inheritDoc
* @since 3.2
*/
- protected function getElementData(\DOMElement $element): array {
+ protected function getElementData(\DOMElement $element, bool $saveData = false): array {
$data = [
'definitionName' => $element->getElementsByTagName('name')->item(0)->nodeValue,
'packageID' => $this->installation->getPackage()->packageID
/**
* @var string[]
*/
- public $definitionNamesWithInterface = [];
+ public $definitionInterfaces = [];
/**
* Returns the id of the object type definition with the given name.
public function getAdditionalTemplateCode(): string {
return WCF::getTPL()->fetch('__objectTypePipGui', 'wcf', [
'definitionNames' => $this->definitionNames,
- 'definitionNamesWithInterface' => $this->definitionNamesWithInterface
+ 'definitionInterfaces' => $this->definitionInterfaces
], true);
}
* @inheritDoc
* @since 3.2
*/
- protected function getElementData(\DOMElement $element): array {
+ protected function getElementData(\DOMElement $element, bool $saveData = false): array {
$data = [
'definitionID' => $this->getDefinitionID($element->getElementsByTagName('definitionname')->item(0)->nodeValue),
'objectType' => $element->getElementsByTagName('name')->item(0)->nodeValue,
}
}
- $data['additionalData'] = serialize($additionalData);
+ if ($saveData) {
+ $data['additionalData'] = serialize($additionalData);
+ }
+ else {
+ $data = array_merge($additionalData, $data);
+ }
return $data;
}
$this->definitionNames[$definition->definitionID] = $definition->definitionName;
if ($definition->interfaceName) {
- $this->definitionNamesWithInterface[$definition->definitionID] = $definition->interfaceName;
+ $this->definitionInterfaces[$definition->definitionID] = $definition->interfaceName;
}
}
$form->getNodeById('className')->addDependency(
ValueFormFieldDependency::create('definitionID')
->field($definitionID)
- ->values(array_keys($this->definitionNamesWithInterface))
+ ->values(array_keys($this->definitionInterfaces))
);
// add object type-specific fields
->addDependency(
ValueFormFieldDependency::create('definitionID')
->field($definitionIDField)
- ->values([$definitionName])
+ ->values([ObjectTypeCache::getInstance()->getDefinitionByName($definitionName)->definitionID])
);
$form->appendChild($formContainer);
* @inheritDoc
* @since 3.2
*/
- protected function getElementData(\DOMElement $element): array {
+ protected function getElementData(\DOMElement $element, bool $saveData = false): array {
return [
'className' => $element->nodeValue,
'pluginName' => $element->getAttribute('name'),
* @inheritDoc
* @since 3.2
*/
- protected function getElementData(\DOMElement $element): array {
+ protected function getElementData(\DOMElement $element, bool $saveData = false): array {
return [
'environment' => $element->getElementsByTagName('environment')->item(0)->nodeValue,
'eventName' => $element->getElementsByTagName('eventname')->item(0)->nodeValue,
* @inheritDoc
* @since 3.2
*/
- protected function getElementData(\DOMElement $element): array {
+ protected function getElementData(\DOMElement $element, bool $saveData = false): array {
$data = parent::getElementData($element);
$className = $element->getElementsByTagName('classname')->item(0);
* @inheritDoc
* @since 3.2
*/
- protected function getElementData(\DOMElement $element): array {
+ protected function getElementData(\DOMElement $element, bool $saveData = false): array {
$data = [
'className' => $element->getElementsByTagName('classname')->item(0)->nodeValue,
'objectTypeID' => $this->getObjectTypeID($element->getElementsByTagName('objecttype')->item(0)->nodeValue),
* @inheritDoc
* @since 3.2
*/
- protected function getElementData(\DOMElement $element): array {
+ protected function getElementData(\DOMElement $element, bool $saveData = false): array {
$data = [
'className' => $element->getElementsByTagName('classname')->item(0)->nodeValue,
'menuItem' => $element->getAttribute('name'),