if (@txpinterface == 'admin') { global $smd_prefalizer_event, $smd_prefalizer_privs, $smd_prefalizer_types; $smd_prefalizer_event = 'smd_prefalizer'; $smd_prefalizer_privs = '1'; $smd_prefalizer_types = array(0 => 'basic', 1 => 'advanced', 2 => 'hidden'); add_privs($smd_prefalizer_event, $smd_prefalizer_privs); register_tab("admin", $smd_prefalizer_event, smd_prefalizer_gTxt('tab_name')); register_callback('smd_prefalizer', $smd_prefalizer_event); } function smd_prefalizer($event, $step) { if(!$step or !in_array($step, array( 'smd_prefalizer_add', 'smd_prefalizer_save', 'smd_prefalizer_delete', 'smd_prefalizer_change_pageby', ))) { smd_prefalizer_list(''); } else $step(); } // List the chosen prefs function smd_prefalizer_list($msg='') { global $smd_prefalizer_event, $smd_prefalizer_types; pagetop(smd_prefalizer_gTxt('tab_name'), $msg); extract(gpsa(array('step', 'page', 'sort', 'dir', 'crit', 'search_method', 'name', 'value', 'type', 'pref_event', 'html', 'user_name', 'position'))); $msg = ($msg) ? $msg : gps('msg'); // Handle paging / sorting $pageby = (gps('qty')) ? gps('qty') : ((cs('smd_prefalizer_pageby')) ? cs('smd_prefalizer_pageby') : 25); $dir = ($dir == 'desc') ? 'desc' : 'asc'; switch ($sort) { case 'value': $sort_sql = 'val '.$dir.', name asc'; break; case 'type': $sort_sql = 'type '.$dir.', name asc'; break; case 'event': $sort_sql = 'event '.$dir.', name asc'; break; case 'html': $sort_sql = 'html '.$dir.', name asc'; break; case 'user': $sort_sql = 'user_name '.$dir.', name asc'; break; case 'position': $sort_sql = 'position '.$dir.', name asc'; break; case 'name': default: $sort = 'name'; $sort_sql = 'name '.$dir; break; } $switch_dir = ($dir == 'desc') ? 'asc' : 'desc'; $criteria = 1; if ($search_method && $crit !== false) { $crit_escaped = doSlash($crit); $critsql = array( 'name' => "name like '%$crit_escaped%'", 'value' => "val like '%$crit_escaped%'", 'type' => "type = " . ((is_numeric($crit_escaped)) ? "$crit_escaped" : ((($crit_number = array_search(strtolower($crit_escaped), $smd_prefalizer_types)) !== false) ? $crit_number : 0)), 'event' => "event like '%$crit_escaped%'", 'html' => "html like '%$crit_escaped%'", 'user' => "user_name like '%$crit_escaped%'", 'position' => "position = '$crit_escaped'", ); if (array_key_exists($search_method, $critsql)) { $criteria = $critsql[$search_method]; $limit = 1000; } else { $search_method = ''; $crit = ''; } } else { $search_method = ''; $crit = ''; } $total = safe_count('txp_prefs', "$criteria"); $limit = max(@$pageby, 25); list($page, $offset, $numPages) = pager($total, $limit, $page); $qs = array( "event" => $smd_prefalizer_event, "page" => $page, "sort" => $sort, "dir" => $dir, "crit" => $crit, "search_method" => $search_method, ); // List the desired prefs $thePrefs = safe_rows('*', 'txp_prefs', "$criteria order by $sort_sql limit $offset, $limit"); $author_list = safe_column('name', 'txp_users', '1 = 1'); echo smd_prefalizer_search_form($crit, $search_method); $editFocus = ($step == 'edit') ? 'jQuery(function() { jQuery("#smd_prefalizer_value textarea").focus(); });': ''; // Any edits to an entry are copied to this hidden form and then submitted echo << function smd_prefalizer_save() { var stype = jQuery("#smd_prefalizer_edited #smd_prefalizer_type option:selected").val(); var utype = jQuery("#smd_prefalizer_edited #smd_prefalizer_user_name option:selected").val(); jQuery("#smd_prefalizer_input input[name='newname']").val(jQuery("#smd_prefalizer_edited #smd_prefalizer_name input").val()); jQuery("#smd_prefalizer_input input[name='value']").val(jQuery("#smd_prefalizer_edited #smd_prefalizer_value textarea").val()); jQuery("#smd_prefalizer_input #smd_prefalizer_new_type option:eq("+stype+")").attr('selected', 'selected'); jQuery("#smd_prefalizer_input input[name='pref_event']").val(jQuery("#smd_prefalizer_edited #smd_prefalizer_event input").val()); jQuery("#smd_prefalizer_input input[name='html']").val(jQuery("#smd_prefalizer_edited #smd_prefalizer_html input").val()); jQuery("#smd_prefalizer_input #smd_prefalizer_newuser option[value='"+utype+"']").attr('selected', 'selected'); jQuery("#smd_prefalizer_input input[name='position']").val(jQuery("#smd_prefalizer_edited #smd_prefalizer_position input").val()); jQuery("form[name='smd_prefalizer_input']").trigger("submit"); } function smd_prefalizer_togglenew() { box = jQuery("form[name='smd_prefalizer_input']"); if (box.css("display") == "none") { box.slideDown('fast'); } else { box.slideUp('fast'); } jQuery('#smd_prefalizer_new .smd_focus').focus(); return false; } {$editFocus} EOC; $newbtn = ''.smd_prefalizer_gTxt('new').''; $headings = assHead('name','value', 'type', smd_prefalizer_gTxt('event'), smd_prefalizer_gTxt('html'), smd_prefalizer_gTxt('user'), smd_prefalizer_gTxt('position'), smd_prefalizer_gTxt('actions')); echo '
'; echo sInput('smd_prefalizer_save'); echo hInput('name',(($step=='edit') ? $name : '')); echo hInput('user_name',(($step=='edit') ? $user_name : '')); echo startTable('smd_prefalizer_new', '', '', 8); echo tr($headings); echo ''; echo td(fInput('text', 'newname', (($step=='edit') ? $name : ''), 'smd_focus')) .td(fInput('text', 'value', (($step=='edit') ? $value : ''))) .td(selectInput('type', $smd_prefalizer_types, (($step=='edit') ? $type : 2), false, '', 'smd_prefalizer_new_type')) .td(fInput('text', 'pref_event', (($step=='edit') ? $pref_event : ''))) .td(fInput('text', 'html', (($step=='edit') ? $html : 'text_input'))) .td(selectInput('newuser', $author_list, (($step=='edit') ? $user_name : ''), true, '', 'smd_prefalizer_newuser')) .td(fInput('text', 'position', (($step=='edit') ? $position : '0'))) .td(fInput('submit', '', gTxt('add'), 'smallerbox')); echo ''; echo endTable(); echo '
'; // The main list echo '
'; echo startTable('list','','',8); echo tr(tda($newbtn, ' colspan="8"')); echo tr( column_head('name', 'name', 'smd_prefalizer', true, $switch_dir, $crit, $search_method, ('name' == $sort) ? $dir : ''). column_head('value', 'value', 'smd_prefalizer', true, $switch_dir, $crit, $search_method, ('value' == $sort) ? $dir : ''). column_head('type', 'type', 'smd_prefalizer', true, $switch_dir, $crit, $search_method, ('type' == $sort) ? $dir : ''). column_head(smd_prefalizer_gTxt('event'), 'event', 'smd_prefalizer', true, $switch_dir, $crit, $search_method, ('event' == $sort) ? $dir : ''). column_head(smd_prefalizer_gTxt('html'), 'html', 'smd_prefalizer', true, $switch_dir, $crit, $search_method, ('html' == $sort) ? $dir : ''). column_head(smd_prefalizer_gTxt('user'), 'user', 'smd_prefalizer', true, $switch_dir, $crit, $search_method, ('user' == $sort) ? $dir : ''). column_head(smd_prefalizer_gTxt('position'), 'position', 'smd_prefalizer', true, $switch_dir, $crit, $search_method, ('position' == $sort) ? $dir : ''). column_head(smd_prefalizer_gTxt('actions'), 'actions', 'smd_prefalizer', false) ); foreach ($thePrefs as $pref_row) { if ($step == 'edit' && $pref_row['name'] == $name && $pref_row['user_name'] == $user_name) { $btnSave = fInput('button', '', gTxt('Save'), 'publish', '', 'smd_prefalizer_save()'); echo tr($headings); echo tr( td(fInput('text', 'name', $pref_row['name']), 70, '', 'smd_prefalizer_name') .td(text_area('value', '80', '220', $pref_row['val']), 220, '', 'smd_prefalizer_value') .td(selectInput('type', $smd_prefalizer_types, $pref_row['type']), 60, '', 'smd_prefalizer_type') .td(fInput('text', 'pref_event', $pref_row['event']), 60, '', 'smd_prefalizer_event') .td(fInput('text', 'html', $pref_row['html']), 60, '', 'smd_prefalizer_html') .td(selectInput('user_name', $author_list, $pref_row['user_name'], true), 80, '', 'smd_prefalizer_user_name') .td(fInput('text', 'position', $pref_row['position']), 20, '', 'smd_prefalizer_position') .td($btnSave) , ' id="smd_prefalizer_edited"'); } else { $btnEdit = '[' . gTxt('edit') . ']'; $btnDel = smd_prefalizer_can_delete($pref_row['name']) ? ' $pref_row['name'], "{user_name}" => (($pref_row['user_name']=='') ? smd_prefalizer_gTxt('all_users') : $pref_row['user_name'] ) )).'\');">[' . gTxt('delete') . ']' : ''; echo tr( td($pref_row['name'],70) .td($pref_row['val'], 220) .td(ucfirst($smd_prefalizer_types[$pref_row['type']])) .td($pref_row['event']) .td($pref_row['html']) .td($pref_row['user_name']) .td($pref_row['position']) .td($btnEdit.' '.$btnDel, 100) , ' class="data"'); } } echo endTable(); echo '
'; echo n.nav_form($smd_prefalizer_event, $page, $numPages, $sort, $dir, $crit, $search_method); echo n.pageby_form($smd_prefalizer_event, $pageby); } // ------------------------------------------------------------- function smd_prefalizer_search_form($crit, $method) { $methods = array( 'name' => gTxt('name'), 'value' => gTxt('value'), 'type' => gTxt('type'), 'event' => smd_prefalizer_gTxt('event'), 'html' => smd_prefalizer_gTxt('html'), 'user' => smd_prefalizer_gTxt('user'), 'position' => smd_prefalizer_gTxt('position'), ); return search_form('smd_prefalizer', 'smd_prefalizer_list', $crit, $methods, $method, 'name'); } // ------------------------------------------------------------- function smd_prefalizer_change_pageby() { setcookie('smd_prefalizer_pageby', gps('qty')); smd_prefalizer_list(''); } function smd_prefalizer_can_delete($name) { $protected_events = array('admin', 'comments', 'css', 'custom', 'discuss', 'feeds', 'publish'); $row = safe_row('*', 'txp_prefs', "name='$name'"); return (in_array($row['event'], $protected_events) && empty($row['user_name'])) ? false : true; } function smd_prefalizer_add($msg='') { global $smd_prefalizer_event; pagetop(smd_prefalizer_gTxt('tab_name'), $msg); echo 'ADD'; } function smd_prefalizer_save($msg='') { global $smd_prefalizer_event; extract(doSlash(psa(array('name', 'newname', 'value', 'type', 'pref_event', 'html', 'user_name', 'newuser', 'position')))); $ret = false; $msg = ''; // State machine-esque decision tree $exists = safe_row('name, user_name', 'txp_prefs', "name = '$newname' AND user_name = '$newuser'"); if (empty($name)) { // Insert new if ($exists) { $msg = array(smd_prefalizer_gTxt('exist_already', array("{name}" => $newname)), E_WARNING); $_POST['step'] = 'edit'; } else { $ret = safe_insert('txp_prefs', "prefs_id=1, name='$newname', val='$value', type='$type', event='$pref_event', html='$html', position='$position', user_name='$newuser'"); if ($ret === false) { $msg = smd_prefalizer_gTxt('create_failed', array("{name}" => $newname)); } else { $msg = smd_prefalizer_gTxt('create_ok', array("{name}" => $newname)); } } } else if ($name == $newname) { // Update if ($user_name == $newuser) { // Direct update if ($exists) { $ret = safe_update('txp_prefs', "name='$newname', val='$value', type='$type', event='$pref_event', html='$html', position='$position'", "name='$name' AND user_name='$user_name'"); if ($ret === false) { $msg = smd_prefalizer_gTxt('save_failed', array("{name}" => $newname)); } else { $msg = smd_prefalizer_gTxt('save_ok', array("{name}" => $newname)); } } else { $msg = smd_prefalizer_gTxt('exist_not', array("{name}" => $name)); } } else { // Renamed user if ($exists) { $msg = array(smd_prefalizer_gTxt('exist_already', array("{name}" => $newname)), E_WARNING); $_POST['step'] = 'edit'; $_POST['name'] = $name; $_POST['user_name'] = $user_name; } else { $ret = safe_update('txp_prefs', "name='$newname', val='$value', type='$type', event='$pref_event', html='$html', position='$position', user_name='$newuser'", "name='$name' AND user_name='$user_name'"); if ($ret === false) { $msg = smd_prefalizer_gTxt('save_failed', array("{name}" => $newname)); } else { $msg = smd_prefalizer_gTxt('save_ok', array("{name}" => $newname)); } } } } else { // Update and rename if ($user_name == $newuser) { // Renamed update if ($exists) { $msg = smd_prefalizer_gTxt('exist_already', array("{name}" => $newname)); } else { $ret = safe_update('txp_prefs', "name='$newname', val='$value', type='$type', event='$pref_event', html='$html', position='$position'", "name='$name' AND user_name='$user_name'"); if ($ret === false) { $msg = smd_prefalizer_gTxt('save_failed', array("{name}" => $newname)); } else { $msg = smd_prefalizer_gTxt('save_ok', array("{name}" => $newname)); } } } else { // Renamed update and user if ($exists) { $msg = array(smd_prefalizer_gTxt('exist_already', array("{name}" => $newname)), E_WARNING); $_POST['step'] = 'edit'; $_POST['name'] = $name; $_POST['user_name'] = $user_name; } else { $ret = safe_update('txp_prefs', "name='$newname', val='$value', type='$type', event='$pref_event', html='$html', position='$position', user_name='$newuser'", "name='$name' AND user_name='$user_name'"); if ($ret === false) { $msg = smd_prefalizer_gTxt('save_failed', array("{name}" => $newname)); } else { $msg = smd_prefalizer_gTxt('save_ok', array("{name}" => $newname)); } } } } smd_prefalizer_list($msg); } function smd_prefalizer_delete($msg='') { global $smd_prefalizer_event; extract(doSlash(gpsa(array('name', 'user_name')))); $ret = false; $rs = safe_row('*', 'txp_prefs', "name = '$name' AND user_name = '$user_name'"); if ($rs && smd_prefalizer_can_delete($name)) { extract($rs); $ret = safe_delete('txp_prefs', "name = '$name' AND user_name='$user_name'"); } if ($ret === false) { smd_prefalizer_list(smd_prefalizer_gTxt('delete_failed', array("{name}" => $name))); } else { smd_prefalizer_list(smd_prefalizer_gTxt('delete_ok', array("{name}" => $name))); } } // ------------------------ // Plugin-specific replacement strings - localise as required function smd_prefalizer_gTxt($what, $atts = array()) { $lang = array( 'actions' => 'Actions', 'all_users' => 'all users', 'create_failed' => 'Pref {name} NOT created', 'create_ok' => 'Pref {name} created', 'delete_confirm' => 'Really delete pref {name} ({user_name})?', 'delete_failed' => 'Pref {name} NOT deleted', 'delete_ok' => 'Pref {name} deleted', 'exist_already' => 'Pref {name} already exists. Choose another name/user', 'exist_not' => 'Cannot update: pref {name} does not exist', 'event' => 'Event', 'html' => 'Input control', 'new' => 'New pref', 'position' => 'Position', 'save_failed' => 'Pref {name} NOT saved', 'save_ok' => 'Pref {name} saved', 'tab_name' => 'Prefalizer', 'user' => 'User', ); return strtr($lang[$what], $atts); }