function EditSmileySets() { global $modSettings, $context, $settings, $db_prefix, $txt, $boarddir; // Set the right tab to be selected. $context['admin_tabs']['tabs']['editsets']['is_selected'] = true; // They must've been submitted a form. if (isset($_POST['sc'])) { checkSession(); // Delete selected smiley sets. if (!empty($_POST['delete']) && !empty($_POST['smiley_set'])) { $set_paths = explode(',', $modSettings['smiley_sets_known']); $set_names = explode("\n", $modSettings['smiley_sets_names']); foreach ($_POST['smiley_set'] as $id => $val) { if (isset($set_paths[$id], $set_names[$id]) && !empty($id)) { unset($set_paths[$id], $set_names[$id]); } } updateSettings(array('smiley_sets_known' => addslashes(implode(',', $set_paths)), 'smiley_sets_names' => addslashes(implode("\n", $set_names)), 'smiley_sets_default' => addslashes(in_array($modSettings['smiley_sets_default'], $set_paths) ? $modSettings['smiley_sets_default'] : $set_paths[0]))); cache_put_data('parsing_smileys', null, 480); cache_put_data('posting_smileys', null, 480); } elseif (!empty($_POST['add'])) { $context['sub_action'] = 'modifyset'; } elseif (isset($_POST['set'])) { $set_paths = explode(',', $modSettings['smiley_sets_known']); $set_names = explode("\n", $modSettings['smiley_sets_names']); // Create a new smiley set. if ($_POST['set'] == -1 && isset($_POST['smiley_sets_path'])) { if (in_array($_POST['smiley_sets_path'], $set_paths)) { fatal_lang_error('smiley_set_already_exists'); } updateSettings(array('smiley_sets_known' => addslashes($modSettings['smiley_sets_known']) . ',' . $_POST['smiley_sets_path'], 'smiley_sets_names' => addslashes($modSettings['smiley_sets_names']) . "\n" . $_POST['smiley_sets_name'], 'smiley_sets_default' => empty($_POST['smiley_sets_default']) ? addslashes($modSettings['smiley_sets_default']) : $_POST['smiley_sets_path'])); } else { // Make sure the smiley set exists. if (!isset($set_paths[$_POST['set']]) || !isset($set_names[$_POST['set']])) { fatal_lang_error('smiley_set_not_found'); } // Make sure the path is not yet used by another smileyset. if (in_array($_POST['smiley_sets_path'], $set_paths) && $_POST['smiley_sets_path'] != $set_paths[$_POST['set']]) { fatal_lang_error('smiley_set_path_already_used'); } $set_paths[$_POST['set']] = stripslashes($_POST['smiley_sets_path']); $set_names[$_POST['set']] = stripslashes($_POST['smiley_sets_name']); updateSettings(array('smiley_sets_known' => addslashes(implode(',', $set_paths)), 'smiley_sets_names' => addslashes(implode("\n", $set_names)), 'smiley_sets_default' => empty($_POST['smiley_sets_default']) ? addslashes($modSettings['smiley_sets_default']) : $_POST['smiley_sets_path'])); } // The user might have checked to also import smileys. if (!empty($_POST['smiley_sets_import'])) { ImportSmileys($_POST['smiley_sets_path']); } cache_put_data('parsing_smileys', null, 480); cache_put_data('posting_smileys', null, 480); } } // Load all available smileysets... $context['smiley_sets'] = explode(',', $modSettings['smiley_sets_known']); $set_names = explode("\n", $modSettings['smiley_sets_names']); foreach ($context['smiley_sets'] as $i => $set) { $context['smiley_sets'][$i] = array('id' => $i, 'path' => htmlspecialchars($set), 'name' => htmlspecialchars($set_names[$i]), 'selected' => $set == $modSettings['smiley_sets_default']); } // Importing any smileys from an existing set? if ($context['sub_action'] == 'import') { checkSession('get'); $_GET['set'] = (int) $_GET['set']; // Sanity check - then import. if (isset($context['smiley_sets'][$_GET['set']])) { ImportSmileys(un_htmlspecialchars($context['smiley_sets'][$_GET['set']]['path'])); } // Force the process to continue. $context['sub_action'] = 'modifyset'; } // If we're modifying or adding a smileyset, some context info needs to be set. if ($context['sub_action'] == 'modifyset') { $_GET['set'] = !isset($_GET['set']) ? -1 : (int) $_GET['set']; if ($_GET['set'] == -1 || !isset($context['smiley_sets'][$_GET['set']])) { $context['current_set'] = array('id' => '-1', 'path' => '', 'name' => '', 'selected' => false, 'is_new' => true); } else { $context['current_set'] =& $context['smiley_sets'][$_GET['set']]; $context['current_set']['is_new'] = false; // Calculate whether there are any smileys in the directory that can be imported. if (!empty($modSettings['smiley_enable']) && !empty($modSettings['smileys_dir']) && is_dir($modSettings['smileys_dir'] . '/' . $context['current_set']['path'])) { $smileys = array(); $dir = dir($modSettings['smileys_dir'] . '/' . $context['current_set']['path']); while ($entry = $dir->read()) { if (in_array(strrchr($entry, '.'), array('.jpg', '.gif', '.jpeg', '.png'))) { $smileys[strtolower($entry)] = addslashes($entry); } } $dir->close(); // Exclude the smileys that are already in the database. $request = db_query("\n\t\t\t\t\tSELECT filename\n\t\t\t\t\tFROM {$db_prefix}smileys\n\t\t\t\t\tWHERE filename IN ('" . implode("', '", $smileys) . "')", __FILE__, __LINE__); while ($row = mysql_fetch_assoc($request)) { if (isset($smileys[strtolower($row['filename'])])) { unset($smileys[strtolower($row['filename'])]); } } mysql_free_result($request); $context['current_set']['can_import'] = count($smileys); // Setup this string to look nice. $txt['smiley_set_import_multiple'] = sprintf($txt['smiley_set_import_multiple'], $context['current_set']['can_import']); } } // Retrieve all potential smiley set directories. $context['smiley_set_dirs'] = array(); if (!empty($modSettings['smileys_dir']) && is_dir($modSettings['smileys_dir'])) { $dir = dir($modSettings['smileys_dir']); while ($entry = $dir->read()) { if (!in_array($entry, array('.', '..')) && is_dir($modSettings['smileys_dir'] . '/' . $entry)) { $context['smiley_set_dirs'][] = array('id' => $entry, 'path' => $modSettings['smileys_dir'] . '/' . $entry, 'selectable' => $entry == $context['current_set']['path'] || !in_array($entry, explode(',', $modSettings['smiley_sets_known'])), 'current' => $entry == $context['current_set']['path']); } } $dir->close(); } } }
function EditSmileySets() { global $modSettings, $context, $settings, $txt, $boarddir; global $smcFunc, $scripturl, $sourcedir; // Set the right tab to be selected. $context[$context['admin_menu_name']]['current_subsection'] = 'editsets'; // They must've been submitted a form. if (isset($_POST[$context['session_var']])) { checkSession(); // Delete selected smiley sets. if (!empty($_POST['delete']) && !empty($_POST['smiley_set'])) { $set_paths = explode(',', $modSettings['smiley_sets_known']); $set_names = explode("\n", $modSettings['smiley_sets_names']); foreach ($_POST['smiley_set'] as $id => $val) { if (isset($set_paths[$id], $set_names[$id]) && !empty($id)) { unset($set_paths[$id], $set_names[$id]); } } updateSettings(array('smiley_sets_known' => implode(',', $set_paths), 'smiley_sets_names' => implode("\n", $set_names), 'smiley_sets_default' => in_array($modSettings['smiley_sets_default'], $set_paths) ? $modSettings['smiley_sets_default'] : $set_paths[0])); cache_put_data('parsing_smileys', null, 480); cache_put_data('posting_smileys', null, 480); } elseif (!empty($_POST['add'])) { $context['sub_action'] = 'modifyset'; } elseif (isset($_POST['set'])) { $set_paths = explode(',', $modSettings['smiley_sets_known']); $set_names = explode("\n", $modSettings['smiley_sets_names']); // Create a new smiley set. if ($_POST['set'] == -1 && isset($_POST['smiley_sets_path'])) { if (in_array($_POST['smiley_sets_path'], $set_paths)) { fatal_lang_error('smiley_set_already_exists'); } updateSettings(array('smiley_sets_known' => $modSettings['smiley_sets_known'] . ',' . $_POST['smiley_sets_path'], 'smiley_sets_names' => $modSettings['smiley_sets_names'] . "\n" . $_POST['smiley_sets_name'], 'smiley_sets_default' => empty($_POST['smiley_sets_default']) ? $modSettings['smiley_sets_default'] : $_POST['smiley_sets_path'])); } else { // Make sure the smiley set exists. if (!isset($set_paths[$_POST['set']]) || !isset($set_names[$_POST['set']])) { fatal_lang_error('smiley_set_not_found'); } // Make sure the path is not yet used by another smileyset. if (in_array($_POST['smiley_sets_path'], $set_paths) && $_POST['smiley_sets_path'] != $set_paths[$_POST['set']]) { fatal_lang_error('smiley_set_path_already_used'); } $set_paths[$_POST['set']] = $_POST['smiley_sets_path']; $set_names[$_POST['set']] = $_POST['smiley_sets_name']; updateSettings(array('smiley_sets_known' => implode(',', $set_paths), 'smiley_sets_names' => implode("\n", $set_names), 'smiley_sets_default' => empty($_POST['smiley_sets_default']) ? $modSettings['smiley_sets_default'] : $_POST['smiley_sets_path'])); } // The user might have checked to also import smileys. if (!empty($_POST['smiley_sets_import'])) { ImportSmileys($_POST['smiley_sets_path']); } cache_put_data('parsing_smileys', null, 480); cache_put_data('posting_smileys', null, 480); } } // Load all available smileysets... $context['smiley_sets'] = explode(',', $modSettings['smiley_sets_known']); $set_names = explode("\n", $modSettings['smiley_sets_names']); foreach ($context['smiley_sets'] as $i => $set) { $context['smiley_sets'][$i] = array('id' => $i, 'path' => htmlspecialchars($set), 'name' => htmlspecialchars($set_names[$i]), 'selected' => $set == $modSettings['smiley_sets_default']); } // Importing any smileys from an existing set? if ($context['sub_action'] == 'import') { checkSession('get'); $_GET['set'] = (int) $_GET['set']; // Sanity check - then import. if (isset($context['smiley_sets'][$_GET['set']])) { ImportSmileys(un_htmlspecialchars($context['smiley_sets'][$_GET['set']]['path'])); } // Force the process to continue. $context['sub_action'] = 'modifyset'; $context['sub_template'] = 'modifyset'; } // If we're modifying or adding a smileyset, some context info needs to be set. if ($context['sub_action'] == 'modifyset') { $_GET['set'] = !isset($_GET['set']) ? -1 : (int) $_GET['set']; if ($_GET['set'] == -1 || !isset($context['smiley_sets'][$_GET['set']])) { $context['current_set'] = array('id' => '-1', 'path' => '', 'name' => '', 'selected' => false, 'is_new' => true); } else { $context['current_set'] =& $context['smiley_sets'][$_GET['set']]; $context['current_set']['is_new'] = false; // Calculate whether there are any smileys in the directory that can be imported. if (!empty($modSettings['smiley_enable']) && !empty($modSettings['smileys_dir']) && is_dir($modSettings['smileys_dir'] . '/' . $context['current_set']['path'])) { $smileys = array(); $dir = dir($modSettings['smileys_dir'] . '/' . $context['current_set']['path']); while ($entry = $dir->read()) { if (in_array(strrchr($entry, '.'), array('.jpg', '.gif', '.jpeg', '.png'))) { $smileys[strtolower($entry)] = $entry; } } $dir->close(); // Exclude the smileys that are already in the database. $request = $smcFunc['db_query']('', ' SELECT filename FROM {db_prefix}smileys WHERE filename IN ({array_string:smiley_list})', array('smiley_list' => $smileys)); while ($row = $smcFunc['db_fetch_assoc']($request)) { if (isset($smileys[strtolower($row['filename'])])) { unset($smileys[strtolower($row['filename'])]); } } $smcFunc['db_free_result']($request); $context['current_set']['can_import'] = count($smileys); // Setup this string to look nice. $txt['smiley_set_import_multiple'] = sprintf($txt['smiley_set_import_multiple'], $context['current_set']['can_import']); } } // Retrieve all potential smiley set directories. $context['smiley_set_dirs'] = array(); if (!empty($modSettings['smileys_dir']) && is_dir($modSettings['smileys_dir'])) { $dir = dir($modSettings['smileys_dir']); while ($entry = $dir->read()) { if (!in_array($entry, array('.', '..')) && is_dir($modSettings['smileys_dir'] . '/' . $entry)) { $context['smiley_set_dirs'][] = array('id' => $entry, 'path' => $modSettings['smileys_dir'] . '/' . $entry, 'selectable' => $entry == $context['current_set']['path'] || !in_array($entry, explode(',', $modSettings['smiley_sets_known'])), 'current' => $entry == $context['current_set']['path']); } } $dir->close(); } } $listOptions = array('id' => 'smiley_set_list', 'base_href' => $scripturl . '?action=admin;area=smileys;sa=editsets', 'default_sort_col' => 'default', 'get_items' => array('function' => 'list_getSmileySets'), 'get_count' => array('function' => 'list_getNumSmileySets'), 'columns' => array('default' => array('header' => array('value' => $txt['smiley_sets_default']), 'data' => array('function' => create_function('$rowData', ' return $rowData[\'selected\'] ? \'<strong>*</strong>\' : \'\'; '), 'style' => 'text-align: center;'), 'sort' => array('default' => 'selected DESC')), 'name' => array('header' => array('value' => $txt['smiley_sets_name']), 'data' => array('db_htmlsafe' => 'name', 'class' => 'windowbg'), 'sort' => array('default' => 'name', 'reverse' => 'name DESC')), 'url' => array('header' => array('value' => $txt['smiley_sets_url']), 'data' => array('sprintf' => array('format' => $modSettings['smileys_url'] . '/<strong>%1$s</strong>/...', 'params' => array('path' => true)), 'class' => 'windowbg'), 'sort' => array('default' => 'path', 'reverse' => 'path DESC')), 'modify' => array('header' => array('value' => $txt['smiley_set_modify']), 'data' => array('sprintf' => array('format' => '<a href="' . $scripturl . '?action=admin;area=smileys;sa=modifyset;set=%1$d">' . $txt['smiley_set_modify'] . '</a>', 'params' => array('id' => true)), 'style' => 'text-align: center;')), 'check' => array('header' => array('value' => '<input type="checkbox" onclick="invertAll(this, this.form);" class="input_check" />'), 'data' => array('function' => create_function('$rowData', ' return $rowData[\'id\'] == 0 ? \'\' : sprintf(\'<input type="checkbox" name="smiley_set[%1$d]" class="input_check" />\', $rowData[\'id\']); '), 'style' => 'text-align: center'))), 'form' => array('href' => $scripturl . '?action=admin;area=smileys;sa=editsets'), 'additional_rows' => array(array('position' => 'below_table_data', 'value' => '<input type="submit" name="delete" value="' . $txt['smiley_sets_delete'] . '" onclick="return confirm(\'' . $txt['smiley_sets_confirm'] . '\');" style="float: right;" class="button_submit" /> [<a href="' . $scripturl . '?action=admin;area=smileys;sa=modifyset' . '">' . $txt['smiley_sets_add'] . '</a>]'))); require_once $sourcedir . '/Subs-List.php'; createList($listOptions); }