/** * Method to format the specified value for text type **/ public function getFieldData($field) { $value = $field['value']; if (empty($value)) { return $value; } $chars = RaidPlannerHelper::getProfileChars($value, true, true); $oReturn = ''; foreach ($chars as $char) { $oReturn .= '<span class="' . $char['class_css'] . ' ' . $char['race_css'] . '">' . $char['char_name'] . '<span>'; if ($char['guild_name'] != '') { $oReturn .= ' ‹' . $char['guild_name'] . '›'; } $oReturn .= "\n"; } $oReturn = str_replace("\n", "<br />", trim($oReturn)); return $oReturn; }
function onUserAfterSave($data, $isNew, $result, $error) { $userId = JArrayHelper::getValue($data, 'id', 0, 'int'); if ($this->params->get('raidplanner-profile-group', 1) == 0) { $data_key = 'params'; } else { $data_key = 'raidplanner'; } if ($userId && $result && isset($data[$data_key]) && count($data[$data_key])) { try { $juser = JFactory::getUser($userId); $params = $juser->getParameters(false)->toObject(); if ($data_key == 'params') { $data_arr = json_decode($data[$data_key], true); } else { $data_arr = $data[$data_key]; } foreach ($data_arr as $k => $v) { if (in_array($k, array('characters', 'calendar_secret', 'vacation'))) { $juser->setParam($k, $v); $params->{$k} = $v; } } $table = $juser->getTable(); $table->load($juser->id); $juser->params = json_encode($params); /* $table->bind($juser->getProperties()); */ $table->store(); if (isset($data_arr['characters']) && $this->params->get('enable-character-editor', 0) == 1) { $db = JFactory::getDBO(); $query = 'UPDATE #__raidplanner_character SET profile_id=-profile_id WHERE profile_id=' . $userId; $db->setQuery($query); $db->query(); $chars = RaidPlannerHelper::getProfileChars($data_arr['characters']); foreach ($chars as $char) { if ($char['char_id'] == '') { $query = "UPDATE #__raidplanner_character SET profile_id=" . $userId . " WHERE char_name='" . $db->escape($char['char_name']) . "'"; } else { $query = "UPDATE #__raidplanner_character SET profile_id=" . $userId . " WHERE character_id=" . intval($char['char_id']) . " AND char_name='" . $db->escape($char['char_name']) . "'"; } $db->setQuery($query); $db->query(); } $query = 'DELETE FROM #__raidplanner_character WHERE profile_id=-' . $userId; $db->setQuery($query); $db->query(); } } catch (JException $e) { $this->_subject->setError($e->getMessage()); return false; } } return true; }
/** * Returns a field in specified format * * @param moscomprofilerFields $field * @param moscomprofilerUser $user * @param string $output 'html', 'xml', 'json', 'php', 'csvheader', 'csv', 'rss', 'fieldslist', 'htmledit' * @param string $reason 'profile' for user profile view, 'edit' for profile edit, 'register' for registration, 'list' for user-lists * @param int $list_compare_types IF reason == 'search' : 0 : simple 'is' search, 1 : advanced search with modes, 2 : simple 'any' search * @return mixed */ function getField(&$field, &$user, $output, $reason, $list_compare_types) { $oReturn = ''; if (is_object($user)) { switch ($output) { case 'htmledit': $oReturn = null; if ($reason == 'edit' || $reason == 'register') { $value = $user->get($field->name); // Load language file JFactory::getLanguage()->load('com_raidplanner', JPATH_SITE); // Load the javascript JHtml::_('behavior.modal', 'a.open-modal'); // Build the script. $script = array(); $script[] = ''; $script[] = ' function jRecalCharacterValue_' . $field->fieldid . '() {'; $script[] = ' var ul = document.id("rp_characterEditorList_' . $field->fieldid . '");'; $script[] = ' var val = "";'; $script[] = ' ul.getChildren("li").each(function(li){'; $script[] = ' if (li.get("id") && (li.get("id") != "rp_characterEditorField_' . $field->fieldid . '_0") && (li.getChildren("a").get("text") != "") ) {'; $script[] = ' if (li.getChildren("input")[0].get("value")) {'; $script[] = ' val = val + li.getChildren("input")[0].get("value") + ":";'; $script[] = ' }'; $script[] = ' val = val + li.getChildren("a")[0].get("text") + ";";'; $script[] = ' }'; $script[] = ' })'; $script[] = ' document.id("rp_characterEditorValue_' . $field->fieldid . '").set("value", val );'; $script[] = ' }'; $script[] = ''; $script[] = ' function jSelectCharacter_' . $field->fieldid . '(idx, char_id, char_name) {'; $script[] = ' var line = document.id( "rp_characterEditorField_' . $field->fieldid . '_" + idx );'; $script[] = ' if (idx==0) {'; $script[] = ' var ul = line.getParent("ul");'; $script[] = ' ul.getChildren("li").each(function(li){'; $script[] = ' if ( (li) && (li.get("id")) ) {'; $script[] = ' if(li.get("id").replace("rp_characterEditorField_' . $field->fieldid . '_","")*1>idx) idx=li.get("id").replace("rp_characterEditorField_' . $field->fieldid . '_","")*1;'; $script[] = ' if(li.get("id") == "rp_characterEditorField_' . $field->fieldid . '_0") {'; $script[] = ' line = li.clone().setStyle("display","block");'; $script[] = ' }'; $script[] = ' }'; $script[] = ' })'; $script[] = ' idx = Number(idx) + 1;'; $script[] = ' line.set("id","rp_characterEditorField_' . $field->fieldid . '_" + (idx));'; $script[] = ' ul.grab(line,"top");'; $script[] = ' if (SqueezeBox) {'; $script[] = ' if (SqueezeBox.assign) {'; $script[] = ' SqueezeBox.assign(line.getChildren("a"),{parse:"rel"});'; $script[] = ' } else {'; $script[] = ' line.getChildren("a").each(function(el){'; $script[] = ' el.addEvent("click",function(e){'; $script[] = ' SqueezeBox.fromElement(el,{parse:"rel"});'; $script[] = ' });'; $script[] = ' });'; $script[] = ' }'; $script[] = ' }'; $script[] = ' }'; $script[] = ' line.getChildren("a")[0].set("text",char_name);'; $script[] = ' line.getChildren("a")[0].set("href","' . JURI::root() . 'index.php?option=com_raidplanner&view=character&layout=modal&tmpl=component&function=jSelectCharacter_' . $field->fieldid . '&character=" + char_name + "&char_id=" + char_id + "&fieldidx=" + idx );'; $script[] = ' line.getChildren("input")[0].set("value",char_id);'; $script[] = ' SqueezeBox.close();'; $script[] = ' jRecalCharacterValue_' . $field->fieldid . '();'; $script[] = ' }'; // Add the script to the document head. JFactory::getDocument()->addScriptDeclaration(implode("\n", $script)); $chars = RaidPlannerHelper::getProfileChars($value, true, true); $html = '<input type="hidden" name="' . $field->name . '" value="' . htmlspecialchars($value, ENT_COMPAT, 'UTF-8') . '" id="rp_characterEditorValue_' . $field->fieldid . '" />'; $html .= '<div style="width:' . $field->params->get('cols', 40) . 'em;height:' . $field->params->get('rows', 5) . 'em;overflow-y:auto;overflow-x:hidden;border:1px inset gray;">'; $html .= '<ul style="display:block;float:left;clear:left;width:100%;padding:0;margin:0;" id="rp_characterEditorList_' . $field->fieldid . '">'; $idx = 0; $html .= '<li style="display:none;float:left;clear:left;width:100%;padding:0;border-bottom:1px solid gray;background-image:none;" id="rp_characterEditorField_' . $field->fieldid . '_0">'; $html .= '<img src="' . JURI::root() . 'media/com_raidplanner/images/delete.png" alt="' . JText::_('JACTION_DELETE') . '" onclick="this.getParent(\'li\').dispose();" style="float:right;margin:0;" />'; $html .= '<a class="open-modal" href="" rel="{handler: \'iframe\', size: {x: 450, y: 300}}"></a>'; $html .= '<input type="hidden" value="" />'; $html .= '</li>'; foreach ($chars as $char) { $idx++; $link = JURI::root() . 'index.php?option=com_raidplanner&view=character&layout=modal&tmpl=component&function=jSelectCharacter_' . $field->fieldid . '&character=' . htmlspecialchars($char['char_name'], ENT_COMPAT, 'UTF-8') . '&char_id=' . intval($char['char_id']) . '&fieldidx=' . $idx; $html .= '<li style="display:block;float:left;clear:left;width:100%;padding:0;border-bottom:1px solid gray;background-image:none;" id="rp_characterEditorField_' . $field->fieldid . '_' . $idx . '">'; $html .= '<img src="' . JURI::root() . 'media/com_raidplanner/images/delete.png" alt="' . JText::_('JACTION_DELETE') . '" onclick="this.getParent(\'li\').dispose();jRecalCharacterValue_' . $field->fieldid . '();" style="float:right;margin:0;" />'; $html .= '<a class="open-modal" href="' . $link . '" rel="{handler: \'iframe\', size: {x: 450, y: 300}}">' . $char['char_name'] . '</a>'; if ($char['guild_name'] != '') { $html .= '<span> ‹' . $char['guild_name'] . '›</span>'; } $html .= '<input type="hidden" value="' . $char['char_id'] . '" />'; $html .= '</li>'; } $link = JURI::root() . 'index.php?option=com_raidplanner&view=character&layout=modal&tmpl=component&function=jSelectCharacter_' . $field->fieldid . '&character=&char_id=&fieldidx='; $html .= '<li style="display:block;float:left;clear:left;width:100%;padding:0;background-image:none;"><a class="open-modal" rel="{handler: \'iframe\', size: {x: 450, y: 300}}" href="' . $link . '"><img src="' . JURI::root() . 'media/com_raidplanner/images/new.png" alt="' . JText::_('COM_RAIDPLANNER_ADD_NEW_CHARACTER') . '" style="margin:0;" /> ' . JText::_('COM_RAIDPLANNER_ADD_NEW_CHARACTER') . '</a></li>'; $html .= '</ul>'; $html .= '</div>'; $oReturn = $html; } else { $oReturn = parent::getField($field, $user, $output, $reason, $list_compare_types); } break; case 'html': case 'rss': $value = $user->get($field->name); $chars = RaidPlannerHelper::getProfileChars($value, true, true); $oReturn = ''; foreach ($chars as $char) { $oReturn .= '<span class="' . $char['class_css'] . ' ' . $char['race_css'] . '">' . $char['char_name'] . '<span>'; if ($char['guild_name'] != '') { $oReturn .= ' ‹' . $char['guild_name'] . '›'; } $oReturn .= "\n"; } $oReturn = str_replace("\n", "<br />", trim($oReturn)); break; case 'json': case 'php': case 'xml': case 'csvheader': case 'fieldslist': case 'csv': default: $oReturn = parent::getField($field, $user, $output, $reason, $list_compare_types); break; } } return $oReturn; }
/** * Gets the list of user's characters */ function getCharacters($min_level = null, $max_level = null, $min_rank = null, $guild_id = null, $everyone = false) { $db = JFactory::getDBO(); $user = JFactory::getUser(); if (!$everyone) { $where = " WHERE (c.profile_id=" . intval($user->id) . " OR c.profile_id = 0)"; } else { $where = " WHERE 1=1"; } if ($min_level != null && intval($min_level) > 0) { $where .= " AND c.char_level>=" . intval($min_level); } if ($max_level != null && intval($max_level) > 0) { $where .= " AND c.char_level<=" . intval($max_level); } if ($min_rank != null && intval($min_rank) > 0) { $where .= " AND c.rank<=" . intval($min_rank); } if ($guild_id != null && intval($guild_id) > 0) { $where .= " AND c.guild_id=" . intval($guild_id); } $query = "SELECT c.character_id,c.char_name,c.profile_id\n\t\t\t\t\tFROM #__raidplanner_character AS c \n\t\t\t\t\t" . $where . " ORDER BY c.char_name ASC"; // reload the list $db->setQuery($query); $result = $db->loadObjectList('character_id'); $charlist = array(); $charset = RaidPlannerHelper::getProfileChars($user->getParam('characters'), true); // reorder if set in characters parameters foreach ($charset as $userchar) { /* If character id matches add this character */ if (isset($result[$userchar['char_id']]) && $result[$userchar['char_id']]->character_id == $userchar['char_id']) { $charlist[$userchar['char_id']] = $result[$userchar['char_id']]; /* Write it back to the database, if needed */ if ($result[$userchar['char_id']]->profile_id == 0) { $query = "UPDATE #__raidplanner_character SET profile_id = " . intval($user->id) . " WHERE character_id = " . intval($result[$userchar['char_id']]->character_id); $db->setQuery($query); $db->query(); } unset($result[$userchar['char_id']]); } } if (is_array($result)) { foreach ($result as $charname => $charvalue) { if ($charvalue->profile_id != 0 || $everyone) { $charlist[$charname] = $charvalue; } } } return $charlist; }