/**
  * @see	wcf\system\package\plugin\AbstractOptionPackageInstallationPlugin::saveOption()
  */
 protected function saveOption($option, $categoryName, $existingOptionID = 0)
 {
     // default values
     $optionName = $optionType = $defaultValue = $adminDefaultValue = $validationPattern = $enableOptions = $permissions = $options = '';
     $showOrder = null;
     // get values
     if (isset($option['name'])) {
         $optionName = $option['name'];
     }
     if (isset($option['optiontype'])) {
         $optionType = $option['optiontype'];
     }
     if (isset($option['defaultvalue'])) {
         $defaultValue = $option['defaultvalue'];
     }
     if (isset($option['admindefaultvalue'])) {
         $adminDefaultValue = $option['admindefaultvalue'];
     }
     if (isset($option['validationpattern'])) {
         $validationPattern = $option['validationpattern'];
     }
     if (!empty($option['showorder'])) {
         $showOrder = intval($option['showorder']);
     }
     $showOrder = $this->getShowOrder($showOrder, $categoryName, 'categoryName');
     if (isset($option['enableoptions'])) {
         $enableOptions = $option['enableoptions'];
     }
     if (isset($option['permissions'])) {
         $permissions = $option['permissions'];
     }
     if (isset($option['options'])) {
         $options = $option['options'];
     }
     // check if optionType exists
     $className = 'wcf\\system\\option\\user\\group\\' . StringUtil::firstCharToUpperCase($optionType) . 'UserGroupOptionType';
     if (!class_exists($className)) {
         throw new SystemException("unable to find class '" . $className . "'");
     }
     // collect additional tags and their values
     $additionalData = array();
     foreach ($option as $tag => $value) {
         if (!in_array($tag, self::$reservedTags)) {
             $additionalData[$tag] = $value;
         }
     }
     // check if the otion exist already and was installed by this package
     $sql = "SELECT\toptionID\n\t\t\tFROM \twcf" . WCF_N . "_user_group_option\n\t\t\tWHERE \toptionName = ?\n\t\t\tAND\tpackageID = ?";
     $statement = WCF::getDB()->prepareStatement($sql);
     $statement->execute(array($optionName, $this->installation->getPackageID()));
     $row = $statement->fetchArray();
     $data = array('categoryName' => $categoryName, 'optionType' => $optionType, 'defaultValue' => $defaultValue, 'adminDefaultValue' => $adminDefaultValue, 'validationPattern' => $validationPattern, 'showOrder' => $showOrder, 'enableOptions' => $enableOptions, 'permissions' => $permissions, 'options' => $options, 'additionalData' => serialize($additionalData));
     if (!empty($row['optionID'])) {
         $groupOption = new UserGroupOption(null, $row);
         $groupOptionEditor = new UserGroupOptionEditor($groupOption);
         $groupOptionEditor->update($data);
     } else {
         // add new option
         $data['packageID'] = $this->installation->getPackageID();
         $data['optionName'] = $optionName;
         $groupOptionEditor = UserGroupOptionEditor::create($data);
         $optionID = $groupOptionEditor->optionID;
         // get default group ("everyone")
         $sql = "SELECT\tgroupID\n\t\t\t\tFROM\twcf" . WCF_N . "_user_group\n\t\t\t\tWHERE\tgroupType = ?";
         $statement = WCF::getDB()->prepareStatement($sql);
         $statement->execute(array(UserGroup::EVERYONE));
         $row = $statement->fetchArray();
         // save default value
         $sql = "INSERT INTO\twcf" . WCF_N . "_user_group_option_value\n\t\t\t\t\t\t(groupID, optionID, optionValue)\n\t\t\t\tVALUES\t\t(?, ?, ?)";
         $statement = WCF::getDB()->prepareStatement($sql);
         $statement->execute(array($row['groupID'], $optionID, $defaultValue));
         if ($adminDefaultValue && $defaultValue != $adminDefaultValue) {
             $sql = "SELECT\tgroupID\n\t\t\t\t\tFROM\twcf" . WCF_N . "_user_group_option_value\n\t\t\t\t\tWHERE\toptionID = (\n\t\t\t\t\t\t\tSELECT\toptionID\n\t\t\t\t\t\t\tFROM\twcf" . WCF_N . "_user_group_option\n\t\t\t\t\t\t\tWHERE\toptionName = ?\n\t\t\t\t\t\t)\n\t\t\t\t\t\tAND optionValue = '1'";
             $statement2 = WCF::getDB()->prepareStatement($sql);
             $statement2->execute(array('admin.general.canUseAcp'));
             $acpGroups = array();
             while ($row = $statement2->fetchArray()) {
                 $acpGroups[] = $row['groupID'];
             }
             $statement2->execute(array('admin.user.canEditGroup'));
             while ($row = $statement2->fetchArray()) {
                 if (!in_array($row['groupID'], $acpGroups)) {
                     continue;
                 }
                 $statement->execute(array($row['groupID'], $optionID, $adminDefaultValue));
             }
         }
     }
 }
	/**
	 * @see	wcf\system\package\plugin\AbstractOptionPackageInstallationPlugin::saveOption()
	 */
	protected function saveOption($option, $categoryName, $existingOptionID = 0) {
		// default values
		$optionName = $optionType = $defaultValue = $adminDefaultValue = $validationPattern = $enableOptions = $permissions = $options = '';
		$showOrder = null;
		
		// get values
		if (isset($option['name'])) $optionName = $option['name'];
		if (isset($option['optiontype'])) $optionType = $option['optiontype'];
		if (isset($option['defaultvalue'])) $defaultValue = $option['defaultvalue'];
		if (isset($option['admindefaultvalue'])) $adminDefaultValue = $option['admindefaultvalue'];
		if (isset($option['validationpattern'])) $validationPattern = $option['validationpattern'];
		if (!empty($option['showorder'])) $showOrder = intval($option['showorder']);
		$showOrder = $this->getShowOrder($showOrder, $categoryName, 'categoryName');
		if (isset($option['enableoptions'])) $enableOptions = $option['enableoptions'];
		if (isset($option['permissions'])) $permissions = $option['permissions'];
		if (isset($option['options'])) $options = $option['options'];
		
		// collect additional tags and their values
		$additionalData = array();
		foreach ($option as $tag => $value) {
			if (!in_array($tag, self::$reservedTags)) $additionalData[$tag] = $value;
		}
		
		// check if the otion exist already and was installed by this package
		$sql = "SELECT	optionID
			FROM	wcf".WCF_N."_user_group_option
			WHERE	optionName = ?
			AND	packageID = ?";
		$statement = WCF::getDB()->prepareStatement($sql);
		$statement->execute(array(
			$optionName,
			$this->installation->getPackageID()
		));
		$row = $statement->fetchArray();
		
		$data = array(
			'categoryName' => $categoryName,
			'optionType' => $optionType,
			'defaultValue' => $defaultValue,
			'adminDefaultValue' => $adminDefaultValue,
			'validationPattern' => $validationPattern,
			'showOrder' => $showOrder,
			'enableOptions' => $enableOptions,
			'permissions' => $permissions,
			'options' => $options,
			'additionalData' => serialize($additionalData)
		);
		
		if (!empty($row['optionID'])) {
			$groupOption = new UserGroupOption(null, $row);
			$groupOptionEditor = new UserGroupOptionEditor($groupOption);
			$groupOptionEditor->update($data);
		}
		else {
			// add new option
			$data['packageID'] = $this->installation->getPackageID();
			$data['optionName'] = $optionName;
			
			$groupOptionEditor = UserGroupOptionEditor::create($data);
			$optionID = $groupOptionEditor->optionID;
			
			// save default value
			$sql = "INSERT INTO	wcf".WCF_N."_user_group_option_value
						(groupID, optionID, optionValue)
				VALUES		(?, ?, ?)";
			$statement = WCF::getDB()->prepareStatement($sql);
			$statement->execute(array(
				$this->getEveryoneGroupID(),
				$optionID,
				$defaultValue
			));
			
			if ($adminDefaultValue && $defaultValue != $adminDefaultValue) {
				$adminGroupIDs = self::getAdminGroupIDs();
				
				WCF::getDB()->beginTransaction();
				foreach ($adminGroupIDs as $groupID) {
					$statement->execute(array(
						$groupID,
						$optionID,
						$adminDefaultValue
					));
				}
				WCF::getDB()->commitTransaction();
			}
		}
	}
 /**
  * @see	\wcf\system\package\plugin\AbstractOptionPackageInstallationPlugin::saveOption()
  */
 protected function saveOption($option, $categoryName, $existingOptionID = 0)
 {
     // default values
     $optionName = $optionType = $defaultValue = $adminDefaultValue = $modDefaultValue = $userDefaultValue = $validationPattern = $enableOptions = $permissions = $options = '';
     $usersOnly = 0;
     $showOrder = null;
     // get values
     if (isset($option['name'])) {
         $optionName = $option['name'];
     }
     if (isset($option['optiontype'])) {
         $optionType = $option['optiontype'];
     }
     if (isset($option['defaultvalue'])) {
         $defaultValue = $option['defaultvalue'];
     }
     if (isset($option['admindefaultvalue'])) {
         $adminDefaultValue = $option['admindefaultvalue'];
     }
     if (isset($option['moddefaultvalue'])) {
         $modDefaultValue = $option['moddefaultvalue'];
     }
     if (isset($option['userdefaultvalue'])) {
         $userDefaultValue = $option['userdefaultvalue'];
     }
     if (isset($option['validationpattern'])) {
         $validationPattern = $option['validationpattern'];
     }
     if (!empty($option['showorder'])) {
         $showOrder = intval($option['showorder']);
     }
     $showOrder = $this->getShowOrder($showOrder, $categoryName, 'categoryName');
     if (isset($option['enableoptions'])) {
         $enableOptions = $option['enableoptions'];
     }
     if (isset($option['permissions'])) {
         $permissions = $option['permissions'];
     }
     if (isset($option['options'])) {
         $options = $option['options'];
     }
     if (isset($option['usersonly'])) {
         $usersOnly = $option['usersonly'];
     }
     // collect additional tags and their values
     $additionalData = array();
     foreach ($option as $tag => $value) {
         if (!in_array($tag, self::$reservedTags)) {
             $additionalData[$tag] = $value;
         }
     }
     // check if the otion exist already and was installed by this package
     $sql = "SELECT\toptionID\n\t\t\tFROM\twcf" . WCF_N . "_user_group_option\n\t\t\tWHERE\toptionName = ?\n\t\t\tAND\tpackageID = ?";
     $statement = WCF::getDB()->prepareStatement($sql);
     $statement->execute(array($optionName, $this->installation->getPackageID()));
     $row = $statement->fetchArray();
     $data = array('categoryName' => $categoryName, 'optionType' => $optionType, 'defaultValue' => isset($option['userdefaultvalue']) ? $userDefaultValue : $defaultValue, 'validationPattern' => $validationPattern, 'showOrder' => $showOrder, 'enableOptions' => $enableOptions, 'permissions' => $permissions, 'options' => $options, 'usersOnly' => $usersOnly, 'additionalData' => serialize($additionalData));
     if (!empty($row['optionID'])) {
         $groupOption = new UserGroupOption(null, $row);
         $groupOptionEditor = new UserGroupOptionEditor($groupOption);
         $groupOptionEditor->update($data);
     } else {
         // add new option
         $data['packageID'] = $this->installation->getPackageID();
         $data['optionName'] = $optionName;
         $groupOptionEditor = UserGroupOptionEditor::create($data);
         $optionID = $groupOptionEditor->optionID;
         $this->getGroupIDs();
         $values = array();
         foreach ($this->groupIDs['all'] as $groupID) {
             $values[$groupID] = $defaultValue;
         }
         if (isset($option['userdefaultvalue'])) {
             foreach ($this->groupIDs['registered'] as $groupID) {
                 $values[$groupID] = $userDefaultValue;
             }
         }
         if (isset($option['moddefaultvalue'])) {
             foreach ($this->groupIDs['mod'] as $groupID) {
                 $values[$groupID] = $modDefaultValue;
             }
         }
         if (isset($option['admindefaultvalue'])) {
             foreach ($this->groupIDs['admin'] as $groupID) {
                 $values[$groupID] = $adminDefaultValue;
             }
         }
         // save values
         $sql = "INSERT INTO\twcf" . WCF_N . "_user_group_option_value\n\t\t\t\t\t\t(groupID, optionID, optionValue)\n\t\t\t\tVALUES\t\t(?, ?, ?)";
         $statement = WCF::getDB()->prepareStatement($sql);
         WCF::getDB()->beginTransaction();
         foreach ($values as $groupID => $value) {
             $statement->execute(array($groupID, $optionID, $value));
         }
         WCF::getDB()->commitTransaction();
     }
 }