$lang->views, 'link' => "{$base_url}&action=views", 'description' => $lang->views_desc ); $sub_tabs['create_view'] = array( 'title' => $lang->create_new_view, 'link' => "{$base_url}&action=views&do=add", 'description' => $lang->create_new_view_desc ); $page->add_breadcrumb_item($lang->view_manager, 'index.php?module=user-users&action=views'); // Lang strings should be in global lang file if($mybb->input['do'] == "set_default") { $query = $db->simple_select("adminviews", "vid, uid, visibility", "vid='".$mybb->get_input('vid', MyBB::INPUT_INT)."'"); $admin_view = $db->fetch_array($query); if(!$admin_view['vid'] || $admin_view['visibility'] == 1 && $mybb->user['uid'] != $admin_view['uid']) { flash_message($lang->error_invalid_admin_view, 'error'); admin_redirect($base_url."&action=views"); } set_default_view($type, $admin_view['vid']); flash_message($lang->succuss_view_set_as_default, 'success'); admin_redirect($base_url."&action=views"); } $errors = array(); if($mybb->input['do'] == "add") { if($mybb->request_method == "post") { if(!trim($mybb->input['title'])) { $errors[] = $lang->error_missing_view_title; } if($mybb->input['fields_js']) { $mybb->input['fields'] = explode(",", $mybb->input['fields_js']); } if(!isset($mybb->input['fields']) || !is_array($mybb->input['fields']) || count($mybb->input['fields']) <= 0) { $errors[] = $lang->error_no_view_fields; } if($mybb->get_input('perpage', MyBB::INPUT_INT) <= 0) { $errors[] = $lang->error_invalid_view_perpage; } if(!in_array($mybb->input['sortby'], array_keys($sort_options))) { $errors[] = $lang->error_invalid_view_sortby; } if($mybb->input['sortorder'] != "asc" && $mybb->input['sortorder'] != "desc") { $errors[] = $lang->error_invalid_view_sortorder; } if($mybb->input['visibility'] == 0) { $mybb->input['visibility'] = 2; } if(empty($errors)) { $new_view = array( "uid" => $mybb->user['uid'], "title" => $db->escape_string($mybb->input['title']), "type" => $type, "visibility" => $mybb->get_input('visibility', MyBB::INPUT_INT), "fields" => $db->escape_string(my_serialize($mybb->input['fields'])), "conditions" => $db->escape_string(my_serialize($mybb->input['conditions'])), "custom_profile_fields" => $db->escape_string(my_serialize($mybb->input['profile_fields'])), "sortby" => $db->escape_string($mybb->input['sortby']), "sortorder" => $db->escape_string($mybb->input['sortorder']), "perpage" => $mybb->get_input('perpage', MyBB::INPUT_INT), "view_type" => $db->escape_string($mybb->input['view_type']) ); $vid = $db->insert_query("adminviews", $new_view); if($mybb->input['isdefault']) { set_default_view($type, $vid); } flash_message($lang->success_view_created, "success"); admin_redirect($base_url."&vid={$vid}"); } } else { $mybb->input = array_merge($mybb->input, array('perpage' => 20)); } // Write in our JS based field selector $page->extra_header .= "\n"; $page->add_breadcrumb_item($lang->create_new_view); $page->output_header($lang->create_new_view); $form = new Form($base_url."&action=views&do=add", "post"); $page->output_nav_tabs($sub_tabs, 'create_view'); // If we have any error messages, show them if(!empty($errors)) { $page->output_inline_error($errors); } $form_container = new FormContainer($lang->create_new_view); $form_container->output_row($lang->title." *", "", $form->generate_text_box('title', $mybb->get_input('title'), array('id' => 'title')), 'title'); $visibility_public_checked = $mybb->get_input('visibility') == 2; $visibility_private_checked = !$visibility_public_checked; $visibility_options = array( $form->generate_radio_button("visibility", "1", "{$lang->private} - {$lang->private_desc}", array("checked" => $visibility_private_checked)), $form->generate_radio_button("visibility", "2", "{$lang->public} - {$lang->public_desc}", array("checked" => $visibility_public_checked)) ); $form_container->output_row($lang->visibility, "", implode("
", $visibility_options)); $form_container->output_row($lang->set_as_default_view, "", $form->generate_yes_no_radio("isdefault", $mybb->get_input('isdefault'), array('yes' => 1, 'no' => 0))); if(count($sort_options) > 0) { $sort_directions = array( "asc" => $lang->ascending, "desc" => $lang->descending ); $form_container->output_row($lang->sort_results_by, "", $form->generate_select_box('sortby', $sort_options, $mybb->get_input('sortby'), array('id' => 'sortby'))." {$lang->in} ".$form->generate_select_box('sortorder', $sort_directions, $mybb->get_input('sortorder'), array('id' => 'sortorder')), 'sortby'); } $form_container->output_row($lang->results_per_page, "", $form->generate_numeric_field('perpage', $mybb->get_input('perpage'), array('id' => 'perpage', 'min' => 1)), 'perpage'); if($type == "user") { $form_container->output_row($lang->display_results_as, "", $form->generate_radio_button('view_type', 'table', $lang->table, array('checked' => ($mybb->get_input('view_type') != "card" ? true : false)))."
".$form->generate_radio_button('view_type', 'card', $lang->business_card, array('checked' => ($mybb->get_input('view_type') == "card" ? true : false)))); } $form_container->end(); $active = array(); $field_select = "
\n"; $field_select .= "
{$lang->enabled}
\n"; $field_select .= "
{$lang->disabled}
\n"; $field_select .= $form->generate_hidden_field("fields_js", @implode(",", @array_keys($active)), array('id' => 'fields_js')); $field_select = str_replace("'", "\\'", $field_select); $field_select = str_replace("\n", "", $field_select); $field_select = "\n"; foreach($fields as $key => $field) { $field_options[$key] = $field['title']; } $field_select .= "\n"; $form_container = new FormContainer($lang->fields_to_show); $form_container->output_row($lang->fields_to_show_desc, '', $field_select); $form_container->end(); // Build the search conditions if(function_exists($conditions_callback)) { $conditions_callback($mybb->input, $form); } $buttons[] = $form->generate_submit_button($lang->save_view); $form->output_submit_wrapper($buttons); $form->end(); $page->output_footer(); } else if($mybb->input['do'] == "edit") { $query = $db->simple_select("adminviews", "*", "vid='".$mybb->get_input('vid', MyBB::INPUT_INT)."'"); $admin_view = $db->fetch_array($query); // Does the view not exist? if(!$admin_view['vid'] || $admin_view['visibility'] == 1 && $mybb->user['uid'] != $admin_view['uid']) { flash_message($lang->error_invalid_admin_view, 'error'); admin_redirect($base_url."&action=views"); } if($mybb->request_method == "post") { if(!trim($mybb->input['title'])) { $errors[] = $lang->error_missing_view_title; } if($mybb->input['fields_js']) { $mybb->input['fields'] = explode(",", $mybb->input['fields_js']); } if(!is_array($mybb->input['fields']) || count($mybb->input['fields']) <= 0) { $errors[] = $lang->error_no_view_fields; } if($mybb->get_input('perpage', MyBB::INPUT_INT) <= 0) { $errors[] = $lang->error_invalid_view_perpage; } if(!in_array($mybb->input['sortby'], array_keys($sort_options))) { $errors[] = $lang->error_invalid_view_sortby; } if($mybb->input['sortorder'] != "asc" && $mybb->input['sortorder'] != "desc") { $errors[] = $lang->error_invalid_view_sortorder; } if($mybb->input['visibility'] == 0) { $mybb->input['visibility'] = 2; } if(empty($errors)) { $updated_view = array( "title" => $db->escape_string($mybb->input['title']), "type" => $type, "visibility" => $mybb->get_input('visibility', MyBB::INPUT_INT), "fields" => $db->escape_string(my_serialize($mybb->input['fields'])), "conditions" => $db->escape_string(my_serialize($mybb->input['conditions'])), "custom_profile_fields" => $db->escape_string(my_serialize($mybb->input['profile_fields'])), "sortby" => $db->escape_string($mybb->input['sortby']), "sortorder" => $db->escape_string($mybb->input['sortorder']), "perpage" => $mybb->get_input('perpage', MyBB::INPUT_INT), "view_type" => $db->escape_string($mybb->input['view_type']) ); $db->update_query("adminviews", $updated_view, "vid='{$admin_view['vid']}'"); if($mybb->input['isdefault']) { set_default_view($type, $admin_view['vid']); } flash_message($lang->success_view_updated, "success"); admin_redirect($base_url."&vid={$admin_view['vid']}"); } } // Write in our JS based field selector $page->extra_header .= "\n"; $page->add_breadcrumb_item($lang->edit_view); $page->output_header($lang->edit_view); $form = new Form($base_url."&action=views&do=edit&vid={$admin_view['vid']}", "post"); $sub_tabs = array(); $sub_tabs['edit_view'] = array( 'title' => $lang->edit_view, 'link' => $base_url."&action=views&do=edit&vid={$admin_view['vid']}", 'description' => $lang->edit_view_desc ); $page->output_nav_tabs($sub_tabs, 'edit_view'); // If we have any error messages, show them if(!empty($errors)) { $page->output_inline_error($errors); } else { $admin_view['conditions'] = my_unserialize($admin_view['conditions']); $admin_view['fields'] = my_unserialize($admin_view['fields']); $admin_view['profile_fields'] = my_unserialize($admin_view['custom_profile_fields']); $mybb->input = array_merge($mybb->input, $admin_view); $mybb->input['isdefault'] = 0; $default_view = fetch_default_view($type); if($default_view == $admin_view['vid']) { $mybb->input['isdefault'] = 1; } } $form_container = new FormContainer($lang->edit_view); $form_container->output_row($lang->view." *", "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); $visibility_public_checked = $mybb->input['visibility'] == 2; $visibility_private_checked = !$visibility_public_checked; $visibility_options = array( $form->generate_radio_button("visibility", "1", "{$lang->private} - {$lang->private_desc}", array("checked" => $visibility_private_checked)), $form->generate_radio_button("visibility", "2", "{$lang->public} - {$lang->public_desc}", array("checked" => $visibility_public_checked)) ); $form_container->output_row($lang->visibility, "", implode("
", $visibility_options)); $form_container->output_row($lang->set_as_default_view, "", $form->generate_yes_no_radio("isdefault", $mybb->input['isdefault'], array('yes' => 1, 'no' => 0))); if(is_array($sort_options) && count($sort_options) > 0) { $sort_directions = array( "asc" => $lang->ascending, "desc" => $lang->descending ); $form_container->output_row($lang->sort_results_by, "", $form->generate_select_box('sortby', $sort_options, $mybb->input['sortby'], array('id' => 'sortby'))." {$lang->in} ".$form->generate_select_box('sortorder', $sort_directions, $mybb->input['sortorder'], array('id' => 'sortorder')), 'sortby'); } $form_container->output_row($lang->results_per_page, "", $form->generate_numeric_field('perpage', $mybb->input['perpage'], array('id' => 'perpage', 'min' => 1)), 'perpage'); if($type == "user") { $form_container->output_row($lang->display_results_as, "", $form->generate_radio_button('view_type', 'table', $lang->table, array('checked' => ($mybb->input['view_type'] != "card" ? true : false)))."
".$form->generate_radio_button('view_type', 'card', $lang->business_card, array('checked' => ($mybb->input['view_type'] == "card" ? true : false)))); } $form_container->end(); $field_select = "
\n"; $field_select .= "
{$lang->enabled}
    \n"; if(is_array($mybb->input['fields'])) { foreach($mybb->input['fields'] as $field) { if($fields[$field]) { $field_select .= "
  • • {$fields[$field]['title']}
  • "; $active[$field] = 1; } } } $field_select .= "
\n"; $field_select .= "
{$lang->disabled}
    \n"; if(is_array($fields)) { foreach($fields as $key => $field) { if(!empty($active[$key])) { continue; } $field_select .= "
  • • {$field['title']}
  • "; } } $field_select .= "
\n"; $field_select .= $form->generate_hidden_field("fields_js", @implode(",", @array_keys($active)), array('id' => 'fields_js')); $field_select = str_replace("'", "\\'", $field_select); $field_select = str_replace("\n", "", $field_select); $field_select = "\n"; foreach($fields as $key => $field) { $field_options[$key] = $field['title']; } $field_select .= "\n"; $form_container = new FormContainer($lang->fields_to_show); $form_container->output_row($lang->fields_to_show_desc, '', $field_select); $form_container->end(); // Build the search conditions if(function_exists($conditions_callback)) { $conditions_callback($mybb->input, $form); } $buttons[] = $form->generate_submit_button($lang->save_view); $form->output_submit_wrapper($buttons); $form->end(); $page->output_footer(); } else if($mybb->input['do'] == "delete") { if($mybb->get_input('no')) { admin_redirect($base_url."&action=views"); } $query = $db->simple_select("adminviews", "COUNT(vid) as views"); $views = $db->fetch_field($query, "views"); if($views == 0) { flash_message($lang->error_cannot_delete_view, 'error'); admin_redirect($base_url."&action=views"); } $vid = $mybb->get_input('vid', MyBB::INPUT_INT); $query = $db->simple_select("adminviews", "vid, uid, visibility", "vid = '{$vid}'"); $admin_view = $db->fetch_array($query); if($vid == 1 || !$admin_view['vid'] || $admin_view['visibility'] == 1 && $mybb->user['uid'] != $admin_view['uid']) { flash_message($lang->error_invalid_view_delete, 'error'); admin_redirect($base_url."&action=views"); } if($mybb->request_method == "post") { $db->delete_query("adminviews", "vid='{$admin_view['vid']}'"); flash_message($lang->success_view_deleted, 'success'); admin_redirect($base_url."&action=views"); } else { $page->output_confirm_action($base_url."&action=views&do=delete&vid={$admin_view['vid']}", $lang->confirm_view_deletion); } } // Export views else if($mybb->input['do'] == "export") { $xml = "\n"; $xml = "version_code."\" exported=\"".TIME_NOW."\">\n"; if($mybb->input['type']) { $type_where = "type='".$db->escape_string($mybb->input['type'])."'"; } $query = $db->simple_select("adminviews", "*", $type_where); while($admin_view = $db->fetch_array($query)) { $fields = my_unserialize($admin_view['fields']); $conditions = my_unserialize($admin_view['conditions']); $admin_view['title'] = str_replace(']]>', ']]]]>', $admin_view['title']); $admin_view['sortby'] = str_replace(']]>', ']]]]>', $admin_view['sortby']); $admin_view['sortorder'] = str_replace(']]>', ']]]]>', $admin_view['sortorder']); $admin_view['view_type'] = str_replace(']]>', ']]]]>', $admin_view['view_type']); $xml .= "\t\n"; $xml .= "\t\t<![CDATA[{$admin_view['title']}]]>\n"; $xml .= "\t\t\n"; foreach($fields as $field) { $xml .= "\t\t\t\n"; } $xml .= "\t\t\n"; $xml .= "\t\t\n"; foreach($conditions as $name => $condition) { if(!$conditions) continue; if(is_array($condition)) { $condition = my_serialize($condition); $is_serialized = " is_serialized=\"1\""; } $condition = str_replace(']]>', ']]]]>', $condition); $xml .= "\t\t\t\n"; } $xml .= "\t\t\n"; $xml .= "\t\t\n"; $xml .= "\t\t\n"; $xml .= "\t\t\n"; $xml .= "\t\t\n"; $xml .= "\t\n"; } $xml .= "\n"; $mybb->settings['bbname'] = urlencode($mybb->settings['bbname']); header("Content-disposition: filename=".$mybb->settings['bbname']."-views.xml"); header("Content-Length: ".my_strlen($xml)); header("Content-type: unknown/unknown"); header("Pragma: no-cache"); header("Expires: 0"); echo $xml; exit; } // Generate a listing of all current views else { $page->output_header($lang->view_manager); $page->output_nav_tabs($sub_tabs, 'views'); $table = new Table; $table->construct_header($lang->view); $table->construct_header($lang->controls, array("class" => "align_center", "width" => 150)); $default_view = fetch_default_view($type); $query = $db->simple_select("adminviews", "COUNT(vid) as views"); $views = $db->fetch_field($query, "views"); $query = $db->query(" SELECT v.*, u.username FROM ".TABLE_PREFIX."adminviews v LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=v.uid) WHERE v.visibility='2' OR (v.visibility='1' AND v.uid='{$mybb->user['uid']}') ORDER BY title "); while($view = $db->fetch_array($query)) { $created = ""; if($view['uid'] == 0) { $view_type = "default"; $default_class = "grey"; } else if($view['visibility'] == 2) { $view_type = "group"; if($view['username']) { $username = htmlspecialchars_uni($view['username']); $created = "
{$lang->created_by} {$username}"; } } else { $view_type = "user"; } $default_add = ''; if($default_view == $view['vid']) { $default_add = " ({$lang->default})"; } $title_string = "view_title_{$view['vid']}"; if(isset($lang->$title_string)) { $view['title'] = $lang->$title_string; } $table->construct_cell("
style}/images/icons/{$view_type}.png\" title=\"".$lang->sprintf($lang->this_is_a_view, $view_type)."\" alt=\"{$view_type}\" />
{$view['title']}{$default_add}{$created}
"); $popup = new PopupMenu("view_{$view['vid']}", $lang->options); $popup->add_item($lang->edit_view, "{$base_url}&action=views&do=edit&vid={$view['vid']}"); if($view['vid'] != $default_view) { $popup->add_item($lang->set_as_default, "{$base_url}&action=views&do=set_default&vid={$view['vid']}"); } if($views > 1 && $view['vid'] != 1) { $popup->add_item($lang->delete_view, "{$base_url}&action=views&do=delete&vid={$view['vid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_view_deletion}')"); } $controls = $popup->fetch(); $table->construct_cell($controls, array("class" => "align_center")); $table->construct_row(); } $table->output($lang->view); echo <<
{$lang->legend} {$lang->default} {$lang->default_view_desc}
{$lang->public} {$lang->public_view_desc}
{$lang->private} {$lang->private_view_desc}
LEGEND; $page->output_footer(); } } function set_default_view($type, $vid) { global $mybb, $db; $query = $db->simple_select("adminoptions", "defaultviews", "uid='{$mybb->user['uid']}'"); $default_views = my_unserialize($db->fetch_field($query, "defaultviews")); $create = !$db->num_rows($query); $default_views[$type] = $vid; $default_views = my_serialize($default_views); $updated_admin = array("defaultviews" => $db->escape_string($default_views)); if($create == true) { $updated_admin['uid'] = $mybb->user['uid']; $updated_admin['notes'] = ''; $updated_admin['permissions'] = ''; $db->insert_query("adminoptions", $updated_admin); } else { $db->update_query("adminoptions", $updated_admin, "uid='{$mybb->user['uid']}'"); } } /** * @param string $type * * @return bool|array */ function fetch_default_view($type) { global $mybb, $db; $query = $db->simple_select("adminoptions", "defaultviews", "uid='{$mybb->user['uid']}'"); $default_views = my_unserialize($db->fetch_field($query, "defaultviews")); if(!is_array($default_views)) { return false; } return $default_views[$type]; }