Please make sure IN_MYBB is defined."); } $page->add_breadcrumb_item($lang->template_sets, "index.php?module=style-templates"); $sid = intval($mybb->input['sid']); $expand_str = ""; $expand_str2 = ""; $expand_array = array(); if(isset($mybb->input['expand'])) { $expand_array = explode("|", $mybb->input['expand']); $expand_array = array_map("intval", $expand_array); $expand_str = "&expand=".implode("|", $expand_array); $expand_str2 = "&expand=".implode("|", $expand_array); } if($mybb->input['action'] == "add_set" || $mybb->input['action'] == "add_template" || $mybb->input['action'] == "search_replace" || $mybb->input['action'] == "find_updated" || (!$mybb->input['action'] && !$sid)) { $sub_tabs['templates'] = array( 'title' => $lang->manage_template_sets, 'link' => "index.php?module=style-templates", 'description' => $lang->manage_template_sets_desc ); $sub_tabs['add_set'] = array( 'title' => $lang->add_set, 'link' => "index.php?module=style-templates&action=add_set" ); $sub_tabs['add_template'] = array( 'title' => $lang->add_template, 'link' => "index.php?module=style-templates&action=add_template{$expand_str}" ); $sub_tabs['search_replace'] = array( 'title' => $lang->search_replace, 'link' => "index.php?module=style-templates&action=search_replace", 'description' => $lang->search_replace_desc ); $sub_tabs['find_updated'] = array( 'title' => $lang->find_updated, 'link' => "index.php?module=style-templates&action=find_updated", 'description' => $lang->find_updated_desc ); } else if(($sid && !$mybb->input['action']) || $mybb->input['action'] == "edit_set" || $mybb->input['action'] == "check_set" || $mybb->input['action'] == "edit_template") { $sub_tabs['manage_templates'] = array( 'title' => $lang->manage_templates, 'link' => "index.php?module=style-templates&sid=".$sid.$expand_str, 'description' => $lang->manage_templates_desc ); if($sid > 0) { $sub_tabs['edit_set'] = array( 'title' => $lang->edit_set, 'link' => "index.php?module=style-templates&action=edit_set&sid=".$sid.$expand_str, 'description' => $lang->edit_set_desc ); } $sub_tabs['add_template'] = array( 'title' => $lang->add_template, 'link' => "index.php?module=style-templates&action=add_template&sid=".$sid.$expand_str, 'description' => $lang->add_template_desc ); } $template_sets = array(); $template_sets[-1] = $lang->global_templates; $query = $db->simple_select("templatesets", "*", "", array('order_by' => 'title', 'order_dir' => 'ASC')); while($template_set = $db->fetch_array($query)) { $template_sets[$template_set['sid']] = $template_set['title']; } $plugins->run_hooks("admin_style_templates"); if($mybb->input['action'] == "add_set") { $plugins->run_hooks("admin_style_templates_add_set"); if($mybb->request_method == "post") { if(!trim($mybb->input['title'])) { $errors[] = $lang->error_missing_set_title; } if(!$errors) { $sid = $db->insert_query("templatesets", array('title' => $db->escape_string($mybb->input['title']))); // Log admin action log_admin_action($sid, $mybb->input['title']); flash_message($lang->success_template_set_saved, 'success'); admin_redirect("index.php?module=style-templates&sid=".$sid); } } $page->add_breadcrumb_item($lang->add_set); $page->output_header($lang->add_set); $sub_tabs = array(); $sub_tabs['add_set'] = array( 'title' => $lang->add_set, 'link' => "index.php?module=style-templates&action=add_set", 'description' => $lang->add_set_desc ); $page->output_nav_tabs($sub_tabs, 'add_set'); if($errors) { $page->output_inline_error($errors); } else { $mybb->input['title'] = ""; } $form = new Form("index.php?module=style-templates&action=add_set", "post", "add_set"); $form_container = new FormContainer($lang->add_set); $form_container->output_row($lang->title, "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); $form_container->end(); $buttons = array(); $buttons[] = $form->generate_submit_button($lang->save); $form->output_submit_wrapper($buttons); $form->end(); $page->output_footer(); } if($mybb->input['action'] == "add_template") { $plugins->run_hooks("admin_style_templates_add_template"); if($mybb->request_method == "post") { if(empty($mybb->input['title'])) { $errors[] = $lang->error_missing_set_title; } else { $query = $db->simple_select("templates", "COUNT(tid) as count", "title='".$db->escape_string($mybb->input['title'])."' AND (sid = '-2' OR sid = '{$sid}')"); if($db->fetch_field($query, "count") > 0) { $errors[] = $lang->error_already_exists; } } if(!isset($template_sets[$sid])) { $errors[] = $lang->error_invalid_set; } // Are we trying to do malicious things in our template? if(check_template($mybb->input['template'])) { $errors[] = $lang->error_security_problem; } if(!$errors) { $template_array = array( 'title' => $db->escape_string($mybb->input['title']), 'sid' => $sid, 'template' => $db->escape_string($mybb->input['template']), 'version' => $db->escape_string($mybb->version_code), 'status' => '', 'dateline' => TIME_NOW ); $tid = $db->insert_query("templates", $template_array); $plugins->run_hooks("admin_style_templates_add_template_commit"); // Log admin action log_admin_action($tid, $mybb->input['title'], $sid, $template_sets[$sid]); flash_message($lang->success_template_saved, 'success'); if($mybb->input['continue']) { admin_redirect("index.php?module=style-templates&action=edit_template&title=".urlencode($mybb->input['title'])."&sid=".$sid.$expand_str2); } else { admin_redirect("index.php?module=style-templates&sid=".$sid.$expand_str2); } } } if($errors) { $template = $mybb->input; } else { if(!$sid) { $sid = -1; } $template['template'] = ""; $template['sid'] = $sid; } if($mybb->input['sid']) { $page->add_breadcrumb_item($template_sets[$sid], "index.php?module=style-templates&sid={$sid}{$expand_str}"); } if($admin_options['codepress'] != 0) { $page->extra_header .= ' '; } $page->add_breadcrumb_item($lang->add_template); $page->output_header($lang->add_template); $sub_tabs = array(); $sub_tabs['add_template'] = array( 'title' => $lang->add_template, 'link' => "index.php?module=style-templates&action=add_template&sid=".$template['sid'].$expand_str, 'description' => $lang->add_template_desc ); $page->output_nav_tabs($sub_tabs, 'add_template'); if($errors) { $page->output_inline_error($errors); } $form = new Form("index.php?module=style-templates&action=add_template{$expand_str}", "post", "add_template"); $form_container = new FormContainer($lang->add_template); $form_container->output_row($lang->template_name, $lang->template_name_desc, $form->generate_text_box('title', $template['title'], array('id' => 'title')), 'title'); $form_container->output_row($lang->template_set, $lang->template_set_desc, $form->generate_select_box('sid', $template_sets, $sid), 'sid'); $form_container->output_row("", "", $form->generate_text_area('template', $template['template'], array('id' => 'template', 'class' => 'codepress php', 'style' => 'width: 100%; height: 500px;')), 'template'); $form_container->end(); $buttons[] = $form->generate_submit_button($lang->save_continue, array('name' => 'continue')); $buttons[] = $form->generate_submit_button($lang->save_close, array('name' => 'close')); $form->output_submit_wrapper($buttons); $form->end(); if($admin_options['codepress'] != 0) { echo ""; } $page->output_footer(); } if($mybb->input['action'] == "edit_set") { $plugins->run_hooks("admin_style_templates_edit_set"); $query = $db->simple_select("templatesets", "*", "sid='{$sid}'"); $set = $db->fetch_array($query); if(!$set) { flash_message($lang->error_invalid_input, 'error'); admin_redirect("index.php?module=style-templates"); } $sid = $set['sid']; if($mybb->request_method == "post") { if(!trim($mybb->input['title'])) { $errors[] = $lang->error_missing_set_title; } if(!$errors) { $query = $db->update_query("templatesets", array('title' => $db->escape_string($mybb->input['title'])), "sid='{$sid}'"); // Log admin action log_admin_action($sid, $set['title']); flash_message($lang->success_template_set_saved, 'success'); admin_redirect("index.php?module=style-templates&sid=".$sid.$expand_str2); } } if($sid) { $page->add_breadcrumb_item($template_sets[$sid], "index.php?module=style-templates&sid={$sid}{$expand_str}"); } $page->add_breadcrumb_item($lang->edit_set); $page->output_header($lang->edit_set); $sub_tabs = array(); $sub_tabs['edit_set'] = array( 'title' => $lang->edit_set, 'link' => "index.php?module=style-templates&action=edit_set&sid=".$sid, 'description' => $lang->edit_set_desc ); $page->output_nav_tabs($sub_tabs, 'edit_set'); if($errors) { $page->output_inline_error($errors); } else { $query = $db->simple_select("templatesets", "title", "sid='{$sid}'"); $mybb->input['title'] = $db->fetch_field($query, "title"); } $form = new Form("index.php?module=style-templates&action=edit_set{$expand_str}", "post", "edit_set"); echo $form->generate_hidden_field("sid", $sid); $form_container = new FormContainer($lang->edit_set); $form_container->output_row($lang->title, "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); $form_container->end(); $buttons = array(); $buttons[] = $form->generate_submit_button($lang->save); $form->output_submit_wrapper($buttons); $form->end(); $page->output_footer(); } if($mybb->input['action'] == "edit_template") { $plugins->run_hooks("admin_style_templates_edit_template"); if(!$mybb->input['title'] || !$sid || !isset($template_sets[$sid])) { flash_message($lang->error_missing_input, 'error'); admin_redirect("index.php?module=style-templates"); } if($mybb->request_method == "post") { if(empty($mybb->input['title'])) { $errors[] = $lang->error_missing_title; } // Are we trying to do malicious things in our template? if(check_template($mybb->input['template'])) { $errors[] = $lang->error_security_problem; } if(!$errors) { $query = $db->simple_select("templates", "*", "tid='{$mybb->input['tid']}'"); $template = $db->fetch_array($query); $template_array = array( 'title' => $db->escape_string($mybb->input['title']), 'sid' => $sid, 'template' => $db->escape_string(trim($mybb->input['template'])), 'version' => $mybb->version_code, 'status' => '', 'dateline' => TIME_NOW ); // Make sure we have the correct tid associated with this template. If the user double submits then the tid could originally be the master template tid, but because the form is sumbitted again, the tid doesn't get updated to the new modified template one. This then causes the master template to be overwritten $query = $db->simple_select("templates", "tid", "title='".$db->escape_string($template['title'])."' AND (sid = '-2' OR sid = '{$template['sid']}')", array('order_by' => 'sid', 'order_dir' => 'desc', 'limit' => 1)); $template['tid'] = $db->fetch_field($query, "tid"); if($sid > 0) { // Check to see if it's never been edited before (i.e. master) of if this a new template (i.e. we've renamed it) or if it's a custom template $query = $db->simple_select("templates", "sid", "title='".$db->escape_string($mybb->input['title'])."' AND (sid = '-2' OR sid = '{$sid}' OR sid='{$template['sid']}')", array('order_by' => 'sid', 'order_dir' => 'desc')); $existing_sid = $db->fetch_field($query, "sid"); $existing_rows = $db->num_rows($query); if(($existing_sid == -2 && $existing_rows == 1) || $existing_rows == 0) { $tid = $db->insert_query("templates", $template_array); } else { $db->update_query("templates", $template_array, "tid='{$template['tid']}' AND sid != '-2'"); } } else { // Global template set $db->update_query("templates", $template_array, "tid='{$template['tid']}' AND sid != '-2'"); } $plugins->run_hooks("admin_style_templates_edit_template_commit"); $query = $db->simple_select("templatesets", "title", "sid='{$sid}'"); $set = $db->fetch_array($query); $exploded = explode("_", $template_array['title'], 2); $prefix = $exploded[0]; $query = $db->simple_select("templategroups", "gid", "prefix = '".$db->escape_string($prefix)."'"); $group = $db->fetch_field($query, "gid"); if(!$group) { $group = "-1"; } // Log admin action log_admin_action($tid, $mybb->input['title'], $mybb->input['sid'], $set['title']); flash_message($lang->success_template_saved, 'success'); if($mybb->input['continue']) { if($mybb->input['from'] == "diff_report") { admin_redirect("index.php?module=style-templates&action=edit_template&title=".urlencode($mybb->input['title'])."&sid=".intval($mybb->input['sid']).$expand_str2."&from=diff_report"); } else { admin_redirect("index.php?module=style-templates&action=edit_template&title=".urlencode($mybb->input['title'])."&sid=".intval($mybb->input['sid']).$expand_str2); } } else { if($mybb->input['from'] == "diff_report") { admin_redirect("index.php?module=style-templates&action=find_updated"); } else { admin_redirect("index.php?module=style-templates&sid=".intval($mybb->input['sid']).$expand_str2."#group_{$group}"); } } } } if($errors) { $template = $mybb->input; } else { $query = $db->simple_select("templates", "*", "title='".$db->escape_string($mybb->input['title'])."' AND (sid='-2' OR sid='{$sid}')", array('order_by' => 'sid', 'order_dir' => 'DESC', 'limit' => 1)); $template = $db->fetch_array($query); } if($admin_options['codepress'] != 0) { $page->extra_header .= ' '; } $page->add_breadcrumb_item($template_sets[$sid], "index.php?module=style-templates&sid={$sid}{$expand_str}"); if(!isset($mybb->input['from'])) { $mybb->input['from'] = ''; } if($mybb->input['from'] == "diff_report") { $page->add_breadcrumb_item($lang->find_updated, "index.php?module=style-templates&action=find_updated"); } $page->add_breadcrumb_item($lang->edit_template_breadcrumb.$template['title'], "index.php?module=style-templates&sid={$sid}"); $page->output_header($lang->edit_template); $sub_tabs = array(); if($mybb->input['from'] == "diff_report") { $sub_tabs['find_updated'] = array( 'title' => $lang->find_updated, 'link' => "index.php?module=style-templates&action=find_updated" ); $sub_tabs['diff_report'] = array( 'title' => $lang->diff_report, 'link' => "index.php?module=style-templates&action=diff_report&title=".$db->escape_string($template['title'])."&sid1=".intval($template['sid'])."&sid2=-2", ); } $sub_tabs['edit_template'] = array( 'title' => $lang->edit_template, 'link' => "index.php?module=style-templates&action=edit_template&title=".htmlspecialchars_uni($template['title']).$expand_str, 'description' => $lang->edit_template_desc ); $page->output_nav_tabs($sub_tabs, 'edit_template'); if($errors) { $page->output_inline_error($errors); } $form = new Form("index.php?module=style-templates&action=edit_template{$expand_str}", "post", "edit_template"); echo $form->generate_hidden_field('tid', $template['tid'])."\n"; if($mybb->input['from'] == "diff_report") { echo $form->generate_hidden_field('from', "diff_report"); } $form_container = new FormContainer($lang->edit_template_breadcrumb.$template['title']); $form_container->output_row($lang->template_name, $lang->template_name_desc, $form->generate_text_box('title', $template['title'], array('id' => 'title')), 'title'); // Force users to save the default template to a specific set, rather than the "global" templates - where they can delete it if($template['sid'] == "-2") { unset($template_sets[-1]); } $form_container->output_row($lang->template_set, $lang->template_set_desc, $form->generate_select_box('sid', $template_sets, $sid)); $form_container->output_row("", "", $form->generate_text_area('template', $template['template'], array('id' => 'template', 'class' => 'codepress mybb', 'style' => 'width: 100%; height: 500px;'))); $form_container->end(); $buttons[] = $form->generate_submit_button($lang->save_continue, array('name' => 'continue')); $buttons[] = $form->generate_submit_button($lang->save_close, array('name' => 'close')); $form->output_submit_wrapper($buttons); $form->end(); if($admin_options['codepress'] != 0) { echo ""; } $page->output_footer(); } if($mybb->input['action'] == "search_replace") { $plugins->run_hooks("admin_style_templates_search_replace"); if($mybb->request_method == "post") { if($mybb->input['type'] == "templates") { // Search and replace in templates if(!$mybb->input['find']) { flash_message($lang->search_noneset, "error"); admin_redirect("index.php?module=style-templates&action=search_replace"); } else { $page->add_breadcrumb_item($lang->search_replace); $page->output_header($lang->search_replace); $page->output_nav_tabs($sub_tabs, 'search_replace'); $templates_list = array(); $table = new Table; $template_sets = array(); // Get the names of all template sets $template_sets[-2] = $lang->master_templates; $template_sets[-1] = $lang->global_templates; $query = $db->simple_select("templatesets", "sid, title"); while($set = $db->fetch_array($query)) { $template_sets[$set['sid']] = $set['title']; } // Select all templates with that search term $query = $db->query(" SELECT t.tid, t.title, t.sid, t.template FROM ".TABLE_PREFIX."templates t LEFT JOIN ".TABLE_PREFIX."templatesets s ON (t.sid=s.sid) LEFT JOIN ".TABLE_PREFIX."templates t2 ON (t.title=t2.title AND t2.sid='1') WHERE t.template LIKE '%".$db->escape_string_like($mybb->input['find'])."%' AND NOT (t.sid = -2 AND NOT ISNULL(t2.tid)) ORDER BY t.title ASC "); if($db->num_rows($query) == 0) { $table->construct_cell($lang->sprintf($lang->search_noresults, htmlspecialchars_uni($mybb->input['find'])), array("class" => "align_center")); $table->construct_row(); $table->output($lang->search_results); } else { while($template = $db->fetch_array($query)) { $template_list[$template['sid']][$template['title']] = $template; } $count = 0; foreach($template_list as $sid => $templates) { ++$count; $search_header = $lang->sprintf($lang->search_header, htmlspecialchars_uni($mybb->input['find']), $template_sets[$sid]); $table->construct_header($search_header, array("colspan" => 2)); foreach($templates as $title => $template) { // Do replacement $newtemplate = str_ireplace($mybb->input['find'], $mybb->input['replace'], $template['template']); if($newtemplate != $template['template'] && check_template($newtemplate) === false) { // If the template is different, that means the search term has been found. if(trim($mybb->input['replace']) != "") { if($template['sid'] == -2) { // The template is a master template. We have to make a new custom template. $new_template = array( "title" => $db->escape_string($title), "template" => $db->escape_string($newtemplate), "sid" => 1, "version" => $mybb->version_code, "status" => '', "dateline" => TIME_NOW ); $new_tid = $db->insert_query("templates", $new_template); $label = $lang->sprintf($lang->search_created_custom, $template['title']); $url = "index.php?module=style-templates&action=edit_template&title=".urlencode($template['title'])."&sid=1"; } else { // The template is a custom template. Replace as normal. // Update the template if there is a replacement term $updatedtemplate = array( "template" => $db->escape_string($newtemplate) ); $db->update_query("templates", $updatedtemplate, "tid='".$template['tid']."'"); $label = $lang->sprintf($lang->search_updated, $template['title']); $url = "index.php?module=style-templates&action=edit_template&title=".urlencode($template['title'])."&sid={$template['sid']}"; } } else { // Just show that the term was found if($template['sid'] == -2) { $label = $lang->sprintf($lang->search_found, $template['title']); } else { $label = $lang->sprintf($lang->search_found, $template['title']); $url = "index.php?module=style-templates&action=edit_template&title=".urlencode($template['title'])."&sid={$template['sid']}"; } } } else { // Just show that the term was found if($template['sid'] == -2) { $label = $lang->sprintf($lang->search_found, $template['title']); } else { $label = $lang->sprintf($lang->search_found, $template['title']); $url = "index.php?module=style-templates&action=edit_template&title=".urlencode($template['title'])."&sid={$template['sid']}"; } } $table->construct_cell($label, array("width" => "85%")); if($sid == -2) { $popup = new PopupMenu("template_{$template['tid']}", $lang->options); foreach($template_sets as $set_sid => $title) { if($set_sid > 0) { $popup->add_item($lang->edit_in." ".htmlspecialchars_uni($title), "index.php?module=style-templates&action=edit_template&title=".urlencode($template['title'])."&sid={$set_sid}"); } } $table->construct_cell($popup->fetch(), array("class" => "align_center")); } else { $table->construct_cell("{$lang->edit}", array("class" => "align_center")); } $table->construct_row(); } if($count == 1) { $table->output($lang->search_results); } else { $table->output(); } } } if(trim($mybb->input['replace']) != "") { // Log admin action - only if replace log_admin_action($mybb->input['find'], $mybb->input['replace']); } $page->output_footer(); exit; } } else { if(!$mybb->input['title']) { flash_message($lang->search_noneset, "error"); admin_redirect("index.php?module=style-templates&action=search_replace"); } else { // Search Template Titles $templatessets = array(); $templates_sets = array(); // Get the names of all template sets $template_sets[-2] = $lang->master_templates; $template_sets[-1] = $lang->global_templates; $query = $db->simple_select("templatesets", "sid, title"); while($set = $db->fetch_array($query)) { $template_sets[$set['sid']] = $set['title']; } $table = new Table; $query = $db->query(" SELECT t.tid, t.title, t.sid, s.title as settitle, t2.tid as customtid FROM ".TABLE_PREFIX."templates t LEFT JOIN ".TABLE_PREFIX."templatesets s ON (t.sid=s.sid) LEFT JOIN ".TABLE_PREFIX."templates t2 ON (t.title=t2.title AND t2.sid='1') WHERE t.title LIKE '%".$db->escape_string_like($mybb->input['title'])."%' ORDER BY t.title ASC "); while($template = $db->fetch_array($query)) { if($template['sid'] == -2) { if(!$template['customtid']) { $template['original'] = true; } else { $template['modified'] = true; } } else { $template['original'] = false; $template['modified'] = false; } $templatessets[$template['sid']][$template['title']] = $template; } $page->add_breadcrumb_item($lang->search_replace); $page->output_header($lang->search_replace); $page->output_nav_tabs($sub_tabs, 'search_replace'); if(empty($templatesets)) { $table->construct_cell($lang->sprintf($lang->search_noresults_title, htmlspecialchars_uni($mybb->input['title'])), array("class" => "align_center")); $table->construct_row(); $table->output($lang->search_results); } $count = 0; foreach($templatessets as $sid => $templates) { ++$count; $table->construct_header($template_sets[$sid], array("colspan" => 2)); foreach($templates as $template) { $template['pretty_title'] = $template['title']; $popup = new PopupMenu("template_{$template['tid']}", $lang->options); if($sid == -2) { foreach($template_sets as $set_sid => $title) { if($set_sid < 0) continue; $popup->add_item($lang->edit_in." ".htmlspecialchars_uni($title), "index.php?module=style-templates&action=edit_template&title=".urlencode($template['title'])."&sid={$set_sid}"); } } else { $popup->add_item($lang->full_edit, "index.php?module=style-templates&action=edit_template&title=".urlencode($template['title'])."&sid={$sid}"); } if(isset($template['modified']) && $template['modified'] == true) { if($sid > 0) { $popup->add_item($lang->diff_report, "index.php?module=style-templates&action=diff_report&title=".urlencode($template['title'])."&sid2={$sid}"); $popup->add_item($lang->revert_to_orig, "index.php?module=style-templates&action=revert&title=".urlencode($template['title'])."&sid={$sid}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_template_revertion}')"); } $template['pretty_title'] = "{$template['title']}"; } // This template does not exist in the master list else if(!isset($template['original']) || $template['original'] == false) { $popup->add_item($lang->delete_template, "index.php?module=style-templates&action=delete_template&title=".urlencode($template['title'])."&sid={$sid}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_template_deletion}')"); $template['pretty_title'] = "{$template['title']}"; } $table->construct_cell("{$template['pretty_title']}", array("width" => "85%")); $table->construct_cell($popup->fetch(), array("class" => "align_center")); $table->construct_row(); } if($count == 1) { $table->output($lang->sprintf($lang->search_names_header, htmlspecialchars_uni($mybb->input['title']))); } else if($count > 0) { $table->output(); } } $page->output_footer(); exit; } } } if($admin_options['codepress'] != 0) { $page->extra_header .= ' '; } $page->add_breadcrumb_item($lang->search_replace); $page->output_header($lang->search_replace); $page->output_nav_tabs($sub_tabs, 'search_replace'); $form = new Form("index.php?module=style-templates&action=search_replace", "post", "do_template"); echo $form->generate_hidden_field('type', "templates"); $form_container = new FormContainer($lang->search_replace); $form_container->output_row($lang->search_for, "", $form->generate_text_area('find', $mybb->input['find'], array('id' => 'find', 'class' => 'codepress mybb', 'style' => 'width: 100%; height: 200px;'))); $form_container->output_row($lang->replace_with, "", $form->generate_text_area('replace', $mybb->input['replace'], array('id' => 'replace', 'class' => 'codepress mybb', 'style' => 'width: 100%; height: 200px;'))); $form_container->end(); $buttons[] = $form->generate_submit_button($lang->find_and_replace); $form->output_submit_wrapper($buttons); $form->end(); echo "
"; $form = new Form("index.php?module=style-templates&action=search_replace", "post", "do_title"); echo $form->generate_hidden_field('type', "titles"); $form_container = new FormContainer($lang->search_template_names); $form_container->output_row($lang->search_for, "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); $form_container->end(); $buttons = array(); $buttons[] = $form->generate_submit_button($lang->find_templates); $buttons[] = $form->generate_reset_button($lang->reset); $form->output_submit_wrapper($buttons); $form->end(); if($admin_options['codepress'] != 0) { echo ""; } $page->output_footer(); } if($mybb->input['action'] == "find_updated") { $plugins->run_hooks("admin_style_templates_find_updated"); // Finds templates that are old and have been updated by MyBB $compare_version = $mybb->version_code; $query = $db->query(" SELECT COUNT(*) AS updated_count FROM ".TABLE_PREFIX."templates t LEFT JOIN ".TABLE_PREFIX."templates m ON (m.title=t.title AND m.sid=-2 AND m.version > t.version) WHERE t.sid > 0 AND m.template != t.template "); $count = $db->fetch_array($query); if($count['updated_count'] < 1) { flash_message($lang->no_updated_templates, 'success'); admin_redirect("index.php?module=style-templates"); } $page->add_breadcrumb_item($lang->find_updated, "index.php?module=style-templates&action=find_updated"); $page->output_header($lang->find_updated); $page->output_nav_tabs($sub_tabs, 'find_updated'); $query = $db->simple_select("templatesets", "*", "", array('order_by' => 'title')); while($templateset = $db->fetch_array($query)) { $templatesets[$templateset['sid']] = $templateset; } echo << {$lang->legend} LEGEND; $count = 0; $done_set = array(); $done_output = array(); $templates = array(); $table = new Table; $query = $db->query(" SELECT t.tid, t.title, t.sid, t.version FROM ".TABLE_PREFIX."templates t LEFT JOIN ".TABLE_PREFIX."templates m ON (m.title=t.title AND m.sid=-2 AND m.version > t.version) WHERE t.sid > 0 AND m.template != t.template ORDER BY t.sid ASC, title ASC "); while($template = $db->fetch_array($query)) { $templates[$template['sid']][] = $template; } foreach($templates as $sid => $templates) { if(!$done_set[$sid]) { $table->construct_header($templatesets[$sid]['title'], array("colspan" => 2)); $done_set[$sid] = 1; ++$count; } foreach($templates as $template) { $popup = new PopupMenu("template_{$template['tid']}", $lang->options); $popup->add_item($lang->full_edit, "index.php?module=style-templates&action=edit_template&title=".urlencode($template['title'])."&sid={$sid}&from=diff_report"); $popup->add_item($lang->diff_report, "index.php?module=style-templates&action=diff_report&title=".urlencode($template['title'])."&sid1=".$template['sid']."&sid2=-2&from=diff_report"); $popup->add_item($lang->revert_to_orig, "index.php?module=style-templates&action=revert&title=".urlencode($template['title'])."&sid={$sid}&from=diff_report&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_template_revertion}')"); $table->construct_cell("{$template['title']}", array('width' => '80%')); $table->construct_cell($popup->fetch(), array("class" => "align_center")); $table->construct_row(); } if($done_set[$sid] && !$done_output[$sid]) { $done_output[$sid] = 1; if($count == 1) { $table->output($lang->find_updated); } else { $table->output(); } } } $page->output_footer(); } if($mybb->input['action'] == "delete_set") { $plugins->run_hooks("admin_style_templates_delete_set"); $query = $db->simple_select("templatesets", "*", "sid='{$sid}' AND sid > 0"); $set = $db->fetch_array($query); // Does the template not exist? if(!$set['sid']) { flash_message($lang->error_invalid_template_set, 'error'); admin_redirect("index.php?module=style-templates"); } // Is there a theme attached to this set? $query = $db->simple_select("themes", "properties"); while($theme = $db->fetch_array($query)) { $properties = @unserialize($theme['properties']); if($properties['templateset'] == $sid) { flash_message($lang->error_themes_attached_template_set, 'error'); admin_redirect("index.php?module=style-templates"); break; } } // User clicked no if($mybb->input['no']) { admin_redirect("index.php?module=style-templates"); } if($mybb->request_method == "post") { // Delete the templateset $db->delete_query("templatesets", "sid='{$set['sid']}'"); // Delete all custom templates in this templateset $db->delete_query("templates", "sid='{$set['sid']}'"); $plugins->run_hooks("admin_style_templates_delete_set_commit"); // Log admin action log_admin_action($set['sid'], $set['title']); flash_message($lang->success_template_set_deleted, 'success'); admin_redirect("index.php?module=style-templates"); } else { $page->output_confirm_action("index.php?module=style-templates&action=delete_set&sid={$set['sid']}", $lang->confirm_template_set_deletion); } } if($mybb->input['action'] == "delete_template") { $plugins->run_hooks("admin_style_templates_delete_template"); $query = $db->query(" SELECT t.*, s.title as set_title FROM ".TABLE_PREFIX."templates t LEFT JOIN ".TABLE_PREFIX."templatesets s ON(t.sid=s.sid) WHERE t.title='".$db->escape_string($mybb->input['title'])."' AND t.sid > '-2' AND t.sid = '{$sid}' "); $template = $db->fetch_array($query); // Does the template not exist? if(!$template) { flash_message($lang->error_invalid_template, 'error'); admin_redirect("index.php?module=style-templates"); } // User clicked no if($mybb->input['no']) { admin_redirect("index.php?module=style-templates&sid={$template['sid']}{$expand_str2}"); } if($mybb->request_method == "post") { // Delete the template $db->delete_query("templates", "tid='{$template['tid']}'"); $plugins->run_hooks("admin_style_templates_delete_template_commit"); // Log admin action log_admin_action($template['tid'], $template['title'], $template['sid'], $template['set_title']); flash_message($lang->success_template_deleted, 'success'); admin_redirect("index.php?module=style-templates&sid={$template['sid']}{$expand_str2}"); } else { $page->output_confirm_action("index.php?module=style-templates&action=delete_template&sid={$template['sid']}{$expand_str}", $lang->confirm_template_deletion); } } if($mybb->input['action'] == "diff_report") { // Compares a template of sid1 with that of sid2, if no sid1, it is assumed -2 if(!$mybb->input['sid1'] || !isset($template_sets[$mybb->input['sid1']])) { $mybb->input['sid1'] = -2; } if($mybb->input['sid2'] == -2) { $sub_tabs['find_updated'] = array( 'title' => $lang->find_updated, 'link' => "index.php?module=style-templates&action=find_updated" ); } if($mybb->input['sid2'] != -2 && !isset($template_sets[$mybb->input['sid2']])) { flash_message($lang->error_invalid_input, 'error'); admin_redirect("index.php?module=style-templates"); } if(!$mybb->input['from']) { $mybb->input['from'] = 0; } $sub_tabs['diff_report'] = array( 'title' => $lang->diff_report, 'link' => "index.php?module=style-templates&action=diff_report&title=".$db->escape_string($mybb->input['title'])."&from=".$mybb->input['from']."sid1=".intval($mybb->input['sid1'])."&sid2=".intval($mybb->input['sid2']), 'description' => $lang->diff_report_desc ); $plugins->run_hooks("admin_style_templates_diff_report"); $query = $db->simple_select("templates", "*", "title='".$db->escape_string($mybb->input['title'])."' AND sid='".intval($mybb->input['sid1'])."'"); $template1 = $db->fetch_array($query); $query = $db->simple_select("templates", "*", "title='".$db->escape_string($mybb->input['title'])."' AND sid='".intval($mybb->input['sid2'])."'"); $template2 = $db->fetch_array($query); if($mybb->input['sid2'] == -2) { $sub_tabs['full_edit'] = array( 'title' => $lang->full_edit, 'link' => "index.php?module=style-templates&action=edit_template&title=".urlencode($template1['title'])."&sid=".intval($mybb->input['sid1'])."&from=diff_report", ); } if($template1['template'] == $template2['template']) { flash_message($lang->templates_the_same, 'error'); admin_redirect("index.php?module=style-templates&sid=".intval($mybb->input['sid2']).$expand_str); } $template1['template'] = explode("\n", $template1['template']); $template2['template'] = explode("\n", $template2['template']); $plugins->run_hooks("admin_style_templates_diff_report_run"); require_once MYBB_ROOT."inc/3rdparty/diff/Diff.php"; require_once MYBB_ROOT."inc/3rdparty/diff/Diff/Renderer.php"; require_once MYBB_ROOT."inc/3rdparty/diff/Diff/Renderer/Inline.php"; $diff = new Horde_Text_Diff('auto', array($template1['template'], $template2['template'])); $renderer = new Horde_Text_Diff_Renderer_Inline(); if($sid) { $page->add_breadcrumb_item($template_sets[$sid], "index.php?module=style-templates&sid={$sid}{$expand_str}"); } if($mybb->input['sid2'] == -2) { $page->add_breadcrumb_item($lang->find_updated, "index.php?module=style-templates&action=find_updated"); } $page->add_breadcrumb_item($lang->diff_report.": ".$template1['title'], "index.php?module=style-templates&action=diff_report&title=".$db->escape_string($mybb->input['title'])."&from=".$mybb->input['from']."&sid1=".intval($mybb->input['sid1'])."&sid2=".intval($mybb->input['sid2'])); $page->output_header($lang->template_sets); $page->output_nav_tabs($sub_tabs, 'diff_report'); $table = new Table; if($mybb->input['from']) { $table->construct_header("".$lang->master_updated_ins."
".$lang->master_updated_del.""); } else { $table->construct_header("".$lang->master_updated_del."
".$lang->master_updated_ins.""); } $table->construct_cell("
".$renderer->render($diff)."
"); $table->construct_row(); $table->output($lang->template_diff_analysis.": ".$template1['title']); $page->output_footer(); } if($mybb->input['action'] == "revert") { $plugins->run_hooks("admin_style_templates_revert"); $query = $db->query(" SELECT t.*, s.title as set_title FROM ".TABLE_PREFIX."templates t LEFT JOIN ".TABLE_PREFIX."templatesets s ON(s.sid=t.sid) WHERE t.title='".$db->escape_string($mybb->input['title'])."' AND t.sid > 0 AND t.sid = '".intval($mybb->input['sid'])."' "); $template = $db->fetch_array($query); // Does the template not exist? if(!$template) { flash_message($lang->error_invalid_template, 'error'); admin_redirect("index.php?module=style-templates"); } // User clicked no if($mybb->input['no']) { admin_redirect("index.php?module=style-templates&sid={$template['sid']}{$expand_str2}"); } if($mybb->request_method == "post") { // Revert the template $db->delete_query("templates", "tid='{$template['tid']}'"); $plugins->run_hooks("admin_style_templates_revert_commit"); // Log admin action log_admin_action($template['tid'], $template['sid'], $template['sid'], $template['set_title']); flash_message($lang->success_template_reverted, 'success'); if($mybb->input['from'] == "diff_report") { admin_redirect("index.php?module=style-templates&action=find_updated"); } else { admin_redirect("index.php?module=style-templates&sid={$template['sid']}{$expand_str2}"); } } else { $page->output_confirm_action("index.php?module=style-templates&sid={$template['sid']}{$expand_str}", $lang->confirm_template_revertion); } } if($mybb->input['sid'] && !$mybb->input['action']) { if(!isset($template_sets[$mybb->input['sid']])) { flash_message($lang->error_invalid_input, 'error'); admin_redirect("index.php?module=style-templates"); } $plugins->run_hooks("admin_style_templates_set"); $table = new Table; $page->add_breadcrumb_item($template_sets[$sid], "index.php?module=style-templates&sid={$sid}"); $page->output_header($lang->template_sets); $page->output_nav_tabs($sub_tabs, 'manage_templates'); $table->construct_header($lang->template_set); $table->construct_header($lang->controls, array("class" => "align_center", "width" => 150)); // Global Templates if($sid == -1) { $query = $db->simple_select("templates", "tid,title", "sid='-1'", array('order_by' => 'title', 'order_dir' => 'ASC')); while($template = $db->fetch_array($query)) { $popup = new PopupMenu("template_{$template['tid']}", $lang->options); $popup->add_item($lang->full_edit, "index.php?module=style-templates&action=edit_template&title=".urlencode($template['title'])."&sid=-1"); $popup->add_item($lang->delete_template, "index.php?module=style-templates&action=delete_template&title=".urlencode($template['title'])."&sid=-1&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_template_deletion}')"); $table->construct_cell("{$template['title']}"); $table->construct_cell($popup->fetch(), array("class" => "align_center")); $table->construct_row(); } if($table->num_rows() == 0) { $table->construct_cell($lang->no_global_templates, array('colspan' => 2)); $table->construct_row(); } $table->output($template_sets[$sid]); $page->output_footer(); } if(!isset($mybb->input['expand'])) { $mybb->input['expand'] = ''; } if($mybb->input['expand'] == 'all') { // If we're expanding everything, stick in the ungrouped templates in the list as well $expand_array = array(-1); } // Fetch Groups $query = $db->simple_select("templategroups", "*"); while($templategroup = $db->fetch_array($query)) { $templategroup['title'] = $lang->parse($templategroup['title'])." ".$lang->templates; if($mybb->input['expand'] == 'all') { $expand_array[] = $templategroup['gid']; } if(in_array($templategroup['gid'], $expand_array)) { $templategroup['expanded'] = 1; } $template_groups[$templategroup['prefix']] = $templategroup; } function sort_template_groups($a, $b) { return strcasecmp($a['title'], $b['title']); } uasort($template_groups, "sort_template_groups"); // Add the ungrouped templates group at the bottom $template_groups['-1'] = array( "prefix" => "", "title" => $lang->ungrouped_templates, "gid" => -1 ); // Load the list of templates $query = $db->simple_select("templates", "*", "sid='".intval($mybb->input['sid'])."' OR sid='-2'", array('order_by' => 'sid DESC, title', 'order_dir' => 'ASC')); while($template = $db->fetch_array($query)) { $exploded = explode("_", $template['title'], 2); if(isset($template_groups[$exploded[0]])) { $group = $exploded[0]; } else { $group = -1; } $template['gid'] = -1; if(isset($template_groups[$exploded[0]]['gid'])) { $template['gid'] = $template_groups[$exploded[0]]['gid']; } // If this template is not a master template, we simple add it to the list if($template['sid'] != -2) { $template['original'] = false; $template['modified'] = false; $template_groups[$group]['templates'][$template['title']] = $template; } else if(!in_array($template['gid'], $expand_array) && !isset($expand_array[-1])) { $template['original'] = true; $template['modified'] = false; $template_groups[$group]['templates'][$template['title']] = $template; // Save some memory! unset($template_groups[$group]['templates'][$template['title']]['template']); } // Otherwise, if we are down to master templates we need to do a few extra things else { // Master template that hasn't been customised in the set we have expanded if(!isset($template_groups[$group]['templates'][$template['title']]) || $template_groups[$group]['templates'][$template['title']]['template'] == $template['template']) { $template['original'] = true; $template_groups[$group]['templates'][$template['title']] = $template; } // Template has been modified in the set we have expanded (it doesn't match the master) else if($template_groups[$group]['templates'][$template['title']]['template'] != $template['template'] && $template_groups[$group]['templates'][$template['title']]['sid'] != -2) { $template_groups[$group]['templates'][$template['title']]['modified'] = true; } // Save some memory! unset($template_groups[$group]['templates'][$template['title']]['template']); } } foreach($template_groups as $prefix => $group) { $tmp_expand = ""; if(in_array($group['gid'], $expand_array)) { $expand = $lang->collapse; $expanded = true; $tmp_expand = $expand_array; $unsetgid = array_search($group['gid'], $tmp_expand); unset($tmp_expand[$unsetgid]); $group['expand_str'] = implode("|", $tmp_expand); } else { $expand = $lang->expand; $expanded = false; $group['expand_str'] = implode("|", $expand_array); if($group['expand_str']) { $group['expand_str'] .= "|"; } $group['expand_str'] .= $group['gid']; } if($group['expand_str']) { $group['expand_str'] = "&expand={$group['expand_str']}"; } if($expanded == true && isset($group['templates']) && count($group['templates']) > 0) { $table->construct_cell("{$group['title']}"); $table->construct_cell("{$expand}", array("class" => "align_center")); $table->construct_row(array("class" => "alt_row", "id" => "group_".$group['gid'], "name" => "group_".$group['gid'])); $templates = $group['templates']; ksort($templates); foreach($templates as $template) { $template['pretty_title'] = $template['title']; $popup = new PopupMenu("template_{$template['tid']}", $lang->options); $popup->add_item($lang->full_edit, "index.php?module=style-templates&action=edit_template&title=".urlencode($template['title'])."&sid={$sid}{$expand_str}"); if(isset($template['modified']) && $template['modified'] == true) { if($sid > 0) { $popup->add_item($lang->diff_report, "index.php?module=style-templates&action=diff_report&title=".urlencode($template['title'])."&sid2={$sid}"); $popup->add_item($lang->revert_to_orig, "index.php?module=style-templates&action=revert&title=".urlencode($template['title'])."&sid={$sid}&my_post_key={$mybb->post_code}{$expand_str}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_template_revertion}')"); } $template['pretty_title'] = "{$template['title']}"; } // This template does not exist in the master list else if(isset($template['original']) && $template['original'] == false) { $popup->add_item($lang->delete_template, "index.php?module=style-templates&action=delete_template&title=".urlencode($template['title'])."&sid={$sid}&my_post_key={$mybb->post_code}{$expand_str}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_template_deletion}')"); $template['pretty_title'] = "{$template['title']}"; } $table->construct_cell("{$template['pretty_title']}"); $table->construct_cell($popup->fetch(), array("class" => "align_center")); $table->construct_row(); } } else if(isset($group['templates']) && count($group['templates']) > 0) { $table->construct_cell("{$group['title']}"); $table->construct_cell("{$expand}", array("class" => "align_center")); $table->construct_row(array("class" => "alt_row", "id" => "group_".$group['gid'], "name" => "group_".$group['gid'])); } } $table->output($template_sets[$sid]); $page->output_footer(); } if(!$mybb->input['action']) { $plugins->run_hooks("admin_style_templates_start"); $page->output_header($lang->template_sets); $page->output_nav_tabs($sub_tabs, 'templates'); $themes = array(); $query = $db->simple_select("themes", "name,tid,properties", "tid != '1'"); while($theme = $db->fetch_array($query)) { $tbits = unserialize($theme['properties']); $themes[$tbits['templateset']][$theme['tid']] = htmlspecialchars_uni($theme['name']); } $template_sets = array(); $template_sets[-1]['title'] = $lang->global_templates; $template_sets[-1]['sid'] = -1; $query = $db->simple_select("templatesets", "*", "", array('order_by' => 'title', 'order_dir' => 'ASC')); while($template_set = $db->fetch_array($query)) { $template_sets[$template_set['sid']] = $template_set; } $table = new Table; $table->construct_header($lang->template_set); $table->construct_header($lang->controls, array("class" => "align_center", "width" => 150)); foreach($template_sets as $set) { if($set['sid'] == -1) { $table->construct_cell("{$lang->global_templates}
{$lang->used_by_all_themes}"); $table->construct_cell("{$lang->expand_templates}", array("class" => "align_center")); $table->construct_row(); continue; } if($themes[$set['sid']]) { $used_by_note = $lang->used_by; $comma = ""; foreach($themes[$set['sid']] as $theme_name) { $used_by_note .= $comma.$theme_name; $comma = $lang->comma; } } else { $used_by_note = $lang->not_used_by_any_themes; } if($set['sid'] == 1) { $actions = "{$lang->expand_templates}"; } else { $popup = new PopupMenu("templateset_{$set['sid']}", $lang->options); $popup->add_item($lang->expand_templates, "index.php?module=style-templates&sid={$set['sid']}"); if($set['sid'] != 1) { $popup->add_item($lang->edit_template_set, "index.php?module=style-templates&action=edit_set&sid={$set['sid']}"); if(!$themes[$set['sid']]) { $popup->add_item($lang->delete_template_set, "index.php?module=style-templates&action=delete_set&sid={$set['sid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_template_set_deletion}')"); } } $actions = $popup->fetch(); } $table->construct_cell("{$set['title']}
{$used_by_note}"); $table->construct_cell($actions, array("class" => "align_center")); $table->construct_row(); } $table->output($lang->template_sets); $page->output_footer(); } ?>