public static function accountPreferencesOptions($hookName, &$contents, array $hookParams, XenForo_Template_Abstract $template) { $visitor = XenForo_Visitor::getInstance(); if (!$visitor->hasPermission("3ps_cmfu", "canUseCMFUSystem")) { return; } $fullUserOptions = ThreePointStudio_CustomMarkupForUser_Helpers::prepareOptionsForView($visitor["3ps_cmfu_options"]); /* @var $presetModel ThreePointStudio_CustomMarkupForUser_Model_Preset */ $presetModel = XenForo_Model::create("ThreePointStudio_CustomMarkupForUser_Model_Preset"); $renderHTML = ""; $settingsTemplate = $template->create("3ps_cmfu_account_cmcontrol", $template->getParams()); // Render username if ($visitor->hasPermission("3ps_cmfu", "canUseCustomUNM")) { $permissions = ThreePointStudio_CustomMarkupForUser_Helpers::assembleCustomMarkupPermissionForUser("username"); $presets = array(); if (!is_array($fullUserOptions["username"]["presets"])) { $fullUserOptions["username"]["presets"] = array(); } foreach ($presetModel->getPresetsByGroup("username") as $presetId => $preset) { $enable_for = unserialize($preset["enable_for"]); if ($enable_for) { $presets[$presetId] = array("label" => $preset["title"], "value" => $presetId, "selected" => in_array($presetId, $fullUserOptions["username"]["presets"])); } } $presetsTemplate = $template->create("3ps_cmfu_presets_select", $template->getParams()); $presetsTemplate->setParams(array("title" => new XenForo_Phrase("user_name"), "titleCode" => "username", "presets" => $presets, "permissions" => $permissions)); $presetHTML = $presetsTemplate->render(); $settingsTemplate->setParams(array_merge(array("title" => new XenForo_Phrase("user_name"), "titleCode" => "username", "permissions" => $permissions, "userOptions" => $fullUserOptions["username"], "currentMarkupRender" => XenForo_Template_Helper_Core::callHelper("usernamehtml", array($visitor->toArray(), "", true)), "presetHTML" => $presetHTML), ThreePointStudio_CustomMarkupForUser_Helpers::getBaseViewParams())); $renderHTML .= $settingsTemplate->render(); } // Clean up $settingsTemplate = $template->create("3ps_cmfu_account_cmcontrol", $template->getParams()); // Render user title if (empty($user["custom_title"])) { // No user title $user["custom_title"] = "(No Title Set)"; } if ($visitor->hasPermission("3ps_cmfu", "canUseCustomUTM")) { $permissions = ThreePointStudio_CustomMarkupForUser_Helpers::assembleCustomMarkupPermissionForUser("usertitle"); $presets = array(); if (!is_array($fullUserOptions["usertitle"]["presets"])) { $fullUserOptions["usertitle"]["presets"] = array(); } foreach ($presetModel->getPresetsByGroup("usertitle") as $presetId => $preset) { $presets[$presetId] = array("label" => $preset["title"], "value" => $presetId, "selected" => in_array($presetId, $fullUserOptions["usertitle"]["presets"])); } $presetsTemplate = $template->create("3ps_cmfu_presets_select", $template->getParams()); $presetsTemplate->setParams(array("title" => new XenForo_Phrase("3ps_cmfu_user_title"), "titleCode" => "usertitle", "presets" => $presets, "permissions" => $permissions)); $presetHTML = $presetsTemplate->render(); $settingsTemplate->setParams(array_merge(array("title" => new XenForo_Phrase("3ps_cmfu_user_title"), "titleCode" => "usertitle", "permissions" => $permissions, "userOptions" => $fullUserOptions["usertitle"], "currentMarkupRender" => XenForo_Template_Helper_Core::callHelper("usertitle", array($visitor->toArray())), "presetHTML" => $presetHTML), ThreePointStudio_CustomMarkupForUser_Helpers::getBaseViewParams())); $renderHTML .= $settingsTemplate->render(); } /* Things - Account Panel */ $contents .= $renderHTML; }
public function actionPreferencesSave() { $response = parent::actionPreferencesSave(); /* @var $userModel XenForo_Model_User */ $userModel = $this->getModelFromCache("XenForo_Model_User"); $user = $userModel->getUserById(XenForo_Visitor::getUserId()); $user["user_groups"] = array_merge(array((int) $user["user_group_id"]), explode(",", $user["secondary_group_ids"])); $options = $this->_input->filterSingle("3ps_cmfu_options", XenForo_Input::ARRAY_SIMPLE); /* @var $presetsModel ThreePointStudio_CustomMarkupForUser_Model_Preset */ $presetsModel = $this->getModelFromCache("ThreePointStudio_CustomMarkupForUser_Model_Preset"); $userPermissions = array("username" => ThreePointStudio_CustomMarkupForUser_Helpers::assembleCustomMarkupPermissionForUser("username"), "usertitle" => ThreePointStudio_CustomMarkupForUser_Helpers::assembleCustomMarkupPermissionForUser("usertitle")); if (empty($options)) { // Nothing in here, populate it with nothingness $options = ThreePointStudio_CustomMarkupForUser_Constants::$defaultOptionsArray; } // Pre-check cleanup foreach ($options as $category => $catArray) { foreach ($catArray as $itemName => $itemValue) { if (ThreePointStudio_CustomMarkupForUser_Helpers::startsWith($itemName, "enable_")) { unset($options[$category][$itemName]); // Ignore any placeholders continue; } if ($itemName == "presets") { $options[$category][$itemName] = XenForo_Input::rawFilter($itemValue, XenForo_Input::ARRAY_SIMPLE); } else { $options[$category][$itemName] = XenForo_Input::rawFilter($itemValue, ThreePointStudio_CustomMarkupForUser_Constants::$availableMarkups[$itemName]["type"]); } } } foreach ($options as $category => $catArray) { foreach ($catArray as $itemName => $itemValue) { if ($itemName == "presets") { if (!is_array($itemValue)) { $options[$category]["presets"] = array(); } foreach ($itemValue as $index => $presetId) { // Can we do this? $thePreset = $presetsModel->getPresetById($presetId); $user_groups = unserialize($thePreset["user_groups"]); $intersection = array_intersect($user_groups, $user["user_groups"]); if (empty($intersection)) { unset($options[$category]["presets"][$index]); // Validation failed continue; } } } else { $itemArray = ThreePointStudio_CustomMarkupForUser_Constants::$availableMarkups[$itemName]; // Can we do this? if (!$userPermissions[$category][$itemName]) { unset($options[$category][$itemName]); // Validation failed continue; } // Yes we can! Check if we have dependencies if (isset($itemArray["requires"])) { foreach ($itemArray["requires"] as $requirement) { if ($catArray[$requirement[0]] !== $requirement[1]) { unset($options[$category][$itemName]); // Dependency not match, skipping continue; } } } if (!call_user_func($itemArray["verify"]["func"], $itemValue)) { return $this->responseError(new XenForo_Phrase($itemArray["verify"]["error"])); // Validation failed, ragequit } } } } $dw = XenForo_DataWriter::create('XenForo_DataWriter_User'); $dw->setExistingData(XenForo_Visitor::getUserId()); $dw->set("3ps_cmfu_options", serialize($options)); $dw->save(); if (XenForo_Application::getOptions()->get("3ps_cmfu_useCache")) { $dw->rebuildCustomMarkupCache(); } return $response; // No errors from our end, continue execution }