[ Index ]

PHP Cross Reference of MyBB 1.8.40

title

Body

[close]

/admin/inc/ -> functions_view_manager.php (source)

   1  <?php
   2  /**
   3   * MyBB 1.8
   4   * Copyright 2014 MyBB Group, All Rights Reserved
   5   *
   6   * Website: http://www.mybb.com
   7   * License: http://www.mybb.com/about/license
   8   *
   9   */
  10  
  11  /**
  12   * Builds the "view management" interface allowing administrators to edit their custom designed "views"
  13   *
  14   * @param string $base_url The base URL to this instance of the view manager
  15   * @param string $type The internal type identifier for this view
  16   * @param array $fields Array of fields this view supports
  17   * @param array $sort_options Array of possible sort options this view supports if any
  18   * @param string $conditions_callback Optional callback function which generates list of "conditions" for this view
  19   */
  20  function view_manager($base_url, $type, $fields, $sort_options=array(), $conditions_callback="")
  21  {
  22      global $mybb, $db, $page, $lang;
  23  
  24      $sub_tabs['views'] = array(
  25          'title' => $lang->views,
  26          'link' => "{$base_url}&amp;action=views",
  27          'description' => $lang->views_desc
  28      );
  29  
  30      $sub_tabs['create_view'] = array(
  31          'title' => $lang->create_new_view,
  32          'link' => "{$base_url}&amp;action=views&amp;do=add",
  33          'description' => $lang->create_new_view_desc
  34      );
  35  
  36      $page->add_breadcrumb_item($lang->view_manager, 'index.php?module=user-users&amp;action=views');
  37  
  38      // Lang strings should be in global lang file
  39  
  40      if($mybb->input['do'] == "set_default")
  41      {
  42          if(!verify_post_check($mybb->get_input('my_post_key')))
  43          {
  44              flash_message($lang->invalid_post_verify_key2, 'error');
  45              admin_redirect($base_url."&action=views");
  46          }
  47  
  48          $query = $db->simple_select("adminviews", "vid, uid, visibility", "vid='".$mybb->get_input('vid', MyBB::INPUT_INT)."'");
  49          $admin_view = $db->fetch_array($query);
  50  
  51          if(!$admin_view['vid'] || $admin_view['visibility'] == 1 && $mybb->user['uid'] != $admin_view['uid'])
  52          {
  53              flash_message($lang->error_invalid_admin_view, 'error');
  54              admin_redirect($base_url."&action=views");
  55          }
  56          set_default_view($type, $admin_view['vid']);
  57          flash_message($lang->succuss_view_set_as_default, 'success');
  58          admin_redirect($base_url."&action=views");
  59      }
  60  
  61      $errors = array();
  62      if($mybb->input['do'] == "add")
  63      {
  64          if($mybb->request_method == "post")
  65          {
  66              if(!trim($mybb->input['title']))
  67              {
  68                  $errors[] = $lang->error_missing_view_title;
  69              }
  70              if($mybb->input['fields_js'])
  71              {
  72                  $mybb->input['fields'] = explode(",", $mybb->input['fields_js']);
  73              }
  74              if(!isset($mybb->input['fields']) || !is_array($mybb->input['fields']) || count($mybb->input['fields']) <= 0)
  75              {
  76                  $errors[] = $lang->error_no_view_fields;
  77              }
  78  
  79              if($mybb->get_input('perpage', MyBB::INPUT_INT) <= 0)
  80              {
  81                  $errors[] = $lang->error_invalid_view_perpage;
  82              }
  83  
  84              if(!in_array($mybb->input['sortby'], array_keys($sort_options)))
  85              {
  86                  $errors[] = $lang->error_invalid_view_sortby;
  87              }
  88  
  89              if($mybb->input['sortorder'] != "asc" && $mybb->input['sortorder'] != "desc")
  90              {
  91                  $errors[] = $lang->error_invalid_view_sortorder;
  92              }
  93  
  94              if($mybb->input['visibility'] == 0)
  95              {
  96                  $mybb->input['visibility'] = 2;
  97              }
  98  
  99              if(empty($errors))
 100              {
 101                  $new_view = array(
 102                      "uid" => $mybb->user['uid'],
 103                      "title" => $db->escape_string($mybb->input['title']),
 104                      "type" => $type,
 105                      "visibility" => $mybb->get_input('visibility', MyBB::INPUT_INT),
 106                      "fields" => $db->escape_string(my_serialize($mybb->input['fields'])),
 107                      "conditions" => $db->escape_string(my_serialize($mybb->input['conditions'])),
 108                      "custom_profile_fields" => $db->escape_string(my_serialize($mybb->input['profile_fields'])),
 109                      "sortby" => $db->escape_string($mybb->input['sortby']),
 110                      "sortorder" => $db->escape_string($mybb->input['sortorder']),
 111                      "perpage" => $mybb->get_input('perpage', MyBB::INPUT_INT),
 112                      "view_type" => $db->escape_string($mybb->input['view_type'])
 113                  );
 114  
 115                  $vid = $db->insert_query("adminviews", $new_view);
 116  
 117                  if($mybb->input['isdefault'])
 118                  {
 119                      set_default_view($type, $vid);
 120                  }
 121                  flash_message($lang->success_view_created, "success");
 122                  admin_redirect($base_url."&vid={$vid}");
 123              }
 124          }
 125          else
 126          {
 127              $mybb->input = array_merge($mybb->input, array('perpage' => 20));
 128          }
 129  
 130          // Write in our JS based field selector
 131          $page->extra_header .= "<script src=\"jscripts/view_manager.js\" type=\"text/javascript\"></script>\n";
 132  
 133          $page->add_breadcrumb_item($lang->create_new_view);
 134          $page->output_header($lang->create_new_view);
 135  
 136          $form = new Form($base_url."&amp;action=views&amp;do=add", "post");
 137  
 138          $page->output_nav_tabs($sub_tabs, 'create_view');
 139  
 140          // If we have any error messages, show them
 141          if(!empty($errors))
 142          {
 143              $page->output_inline_error($errors);
 144          }
 145  
 146          $form_container = new FormContainer($lang->create_new_view);
 147          $form_container->output_row($lang->title." <em>*</em>", "", $form->generate_text_box('title', $mybb->get_input('title'), array('id' => 'title')), 'title');
 148  
 149          $visibility_public_checked = $mybb->get_input('visibility') == 2;
 150          $visibility_private_checked = !$visibility_public_checked;
 151  
 152          $visibility_options = array(
 153              $form->generate_radio_button("visibility", "1", "<strong>{$lang->private}</strong> - {$lang->private_desc}", array("checked" => $visibility_private_checked)),
 154              $form->generate_radio_button("visibility", "2", "<strong>{$lang->public}</strong> - {$lang->public_desc}", array("checked" => $visibility_public_checked))
 155          );
 156          $form_container->output_row($lang->visibility, "", implode("<br />", $visibility_options));
 157  
 158          $form_container->output_row($lang->set_as_default_view, "", $form->generate_yes_no_radio("isdefault", $mybb->get_input('isdefault'), array('yes' => 1, 'no' => 0)));
 159  
 160          if(count($sort_options) > 0)
 161          {
 162              $sort_directions = array(
 163                  "asc" => $lang->ascending,
 164                  "desc" => $lang->descending
 165              );
 166              $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');
 167          }
 168  
 169          $form_container->output_row($lang->results_per_page, "", $form->generate_numeric_field('perpage', $mybb->get_input('perpage'), array('id' => 'perpage', 'min' => 1)), 'perpage');
 170  
 171          if($type == "user")
 172          {
 173              $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)))."<br />".$form->generate_radio_button('view_type', 'card', $lang->business_card, array('checked' => ($mybb->get_input('view_type') == "card" ? true : false))));
 174          }
 175  
 176          $form_container->end();
 177  
 178          $active = array();
 179  
 180          $field_select = "<div class=\"view_fields\">\n";
 181          $field_select .= "<div class=\"enabled\"><div class=\"fields_title\">{$lang->enabled}</div><ul id=\"fields_enabled\">\n";
 182          if(isset($mybb->input['fields']) && is_array($mybb->input['fields']))
 183          {
 184              foreach($mybb->input['fields'] as $field)
 185              {
 186                  if($fields[$field])
 187                  {
 188                      $field_select .= "<li id=\"field-{$field}\">&#149; {$fields[$field]['title']}</li>";
 189                      $active[$field] = 1;
 190                  }
 191              }
 192          }
 193          $field_select .= "</ul></div>\n";
 194          $field_select .= "<div class=\"disabled\"><div class=\"fields_title\">{$lang->disabled}</div><ul id=\"fields_disabled\">\n";
 195          foreach($fields as $key => $field)
 196          {
 197              if(!empty($active[$key]))
 198              {
 199                  continue;
 200              }
 201              $field_select .= "<li id=\"field-{$key}\">&#149; {$field['title']}</li>";
 202          }
 203          $field_select .= "</div></ul>\n";
 204          $field_select .= $form->generate_hidden_field("fields_js", @implode(",", @array_keys($active)), array('id' => 'fields_js'));
 205          $field_select = str_replace("'", "\\'", $field_select);
 206          $field_select = str_replace("\n", "", $field_select);
 207  
 208          $field_select = "<script type=\"text/javascript\">
 209  //<![CDATA[
 210  document.write('".str_replace("/", "\/", $field_select)."');
 211  //]]>
 212  </script>\n";
 213  
 214          foreach($fields as $key => $field)
 215          {
 216              $field_options[$key] = $field['title'];
 217          }
 218  
 219          $field_select .= "<noscript>".$form->generate_select_box('fields[]', $field_options, $mybb->get_input('fields'), array('id' => 'fields', 'multiple' => true))."</noscript>\n";
 220  
 221          $form_container = new FormContainer($lang->fields_to_show);
 222          $form_container->output_row($lang->fields_to_show_desc, '', $field_select);
 223          $form_container->end();
 224  
 225          // Build the search conditions
 226          if(function_exists($conditions_callback))
 227          {
 228              $conditions_callback($mybb->input, $form);
 229          }
 230  
 231          $buttons[] = $form->generate_submit_button($lang->save_view);
 232          $form->output_submit_wrapper($buttons);
 233  
 234          $form->end();
 235          $page->output_footer();
 236      }
 237      else if($mybb->input['do'] == "edit")
 238      {
 239          $query = $db->simple_select("adminviews", "*", "vid='".$mybb->get_input('vid', MyBB::INPUT_INT)."'");
 240          $admin_view = $db->fetch_array($query);
 241  
 242          // Does the view not exist?
 243          if(!$admin_view['vid'] || $admin_view['visibility'] == 1 && $mybb->user['uid'] != $admin_view['uid'])
 244          {
 245              flash_message($lang->error_invalid_admin_view, 'error');
 246              admin_redirect($base_url."&action=views");
 247          }
 248  
 249          if($mybb->request_method == "post")
 250          {
 251              if(!trim($mybb->input['title']))
 252              {
 253                  $errors[] = $lang->error_missing_view_title;
 254              }
 255              if($mybb->input['fields_js'])
 256              {
 257                  $mybb->input['fields'] = explode(",", $mybb->input['fields_js']);
 258              }
 259  
 260              if(!is_array($mybb->input['fields']) || count($mybb->input['fields']) <= 0)
 261              {
 262                  $errors[] = $lang->error_no_view_fields;
 263              }
 264  
 265              if($mybb->get_input('perpage', MyBB::INPUT_INT) <= 0)
 266              {
 267                  $errors[] = $lang->error_invalid_view_perpage;
 268              }
 269  
 270              if(!in_array($mybb->input['sortby'], array_keys($sort_options)))
 271              {
 272                  $errors[] = $lang->error_invalid_view_sortby;
 273              }
 274  
 275              if($mybb->input['sortorder'] != "asc" && $mybb->input['sortorder'] != "desc")
 276              {
 277                  $errors[] = $lang->error_invalid_view_sortorder;
 278              }
 279  
 280              if($mybb->input['visibility'] == 0)
 281              {
 282                  $mybb->input['visibility'] = 2;
 283              }
 284  
 285              if(empty($errors))
 286              {
 287                  $updated_view = array(
 288                      "title" => $db->escape_string($mybb->input['title']),
 289                      "type" => $type,
 290                      "visibility" => $mybb->get_input('visibility', MyBB::INPUT_INT),
 291                      "fields" => $db->escape_string(my_serialize($mybb->input['fields'])),
 292                      "conditions" => $db->escape_string(my_serialize($mybb->input['conditions'])),
 293                      "custom_profile_fields" => $db->escape_string(my_serialize($mybb->input['profile_fields'])),
 294                      "sortby" => $db->escape_string($mybb->input['sortby']),
 295                      "sortorder" => $db->escape_string($mybb->input['sortorder']),
 296                      "perpage" => $mybb->get_input('perpage', MyBB::INPUT_INT),
 297                      "view_type" => $db->escape_string($mybb->input['view_type'])
 298                  );
 299                  $db->update_query("adminviews", $updated_view, "vid='{$admin_view['vid']}'");
 300  
 301                  if($mybb->input['isdefault'])
 302                  {
 303                      set_default_view($type, $admin_view['vid']);
 304                  }
 305  
 306                  flash_message($lang->success_view_updated, "success");
 307                  admin_redirect($base_url."&vid={$admin_view['vid']}");
 308              }
 309          }
 310  
 311          // Write in our JS based field selector
 312          $page->extra_header .= "<script src=\"jscripts/view_manager.js\" type=\"text/javascript\"></script>\n";
 313  
 314          $page->add_breadcrumb_item($lang->edit_view);
 315          $page->output_header($lang->edit_view);
 316  
 317          $form = new Form($base_url."&amp;action=views&amp;do=edit&amp;vid={$admin_view['vid']}", "post");
 318  
 319          $sub_tabs = array();
 320          $sub_tabs['edit_view'] = array(
 321              'title' => $lang->edit_view,
 322              'link' => $base_url."&amp;action=views&amp;do=edit&amp;vid={$admin_view['vid']}",
 323              'description' => $lang->edit_view_desc
 324          );
 325  
 326          $page->output_nav_tabs($sub_tabs, 'edit_view');
 327  
 328          // If we have any error messages, show them
 329          if(!empty($errors))
 330          {
 331              $page->output_inline_error($errors);
 332          }
 333          else
 334          {
 335              $admin_view['conditions'] = my_unserialize($admin_view['conditions']);
 336              $admin_view['fields'] = my_unserialize($admin_view['fields']);
 337              $admin_view['profile_fields'] = my_unserialize($admin_view['custom_profile_fields']);
 338              $mybb->input = array_merge($mybb->input, $admin_view);
 339  
 340              $mybb->input['isdefault'] = 0;
 341              $default_view = fetch_default_view($type);
 342  
 343              if($default_view == $admin_view['vid'])
 344              {
 345                  $mybb->input['isdefault'] = 1;
 346              }
 347          }
 348  
 349          $form_container = new FormContainer($lang->edit_view);
 350          $form_container->output_row($lang->view." <em>*</em>", "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title');
 351  
 352          $visibility_public_checked = $mybb->input['visibility'] == 2;
 353          $visibility_private_checked = !$visibility_public_checked;
 354  
 355          $visibility_options = array(
 356              $form->generate_radio_button("visibility", "1", "<strong>{$lang->private}</strong> - {$lang->private_desc}", array("checked" => $visibility_private_checked)),
 357              $form->generate_radio_button("visibility", "2", "<strong>{$lang->public}</strong> - {$lang->public_desc}", array("checked" => $visibility_public_checked))
 358          );
 359          $form_container->output_row($lang->visibility, "", implode("<br />", $visibility_options));
 360  
 361          $form_container->output_row($lang->set_as_default_view, "", $form->generate_yes_no_radio("isdefault", $mybb->input['isdefault'], array('yes' => 1, 'no' => 0)));
 362  
 363          if(is_array($sort_options) && count($sort_options) > 0)
 364          {
 365              $sort_directions = array(
 366                  "asc" => $lang->ascending,
 367                  "desc" => $lang->descending
 368              );
 369              $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');
 370          }
 371  
 372          $form_container->output_row($lang->results_per_page, "", $form->generate_numeric_field('perpage', $mybb->input['perpage'], array('id' => 'perpage', 'min' => 1)), 'perpage');
 373  
 374          if($type == "user")
 375          {
 376              $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)))."<br />".$form->generate_radio_button('view_type', 'card', $lang->business_card, array('checked' => ($mybb->input['view_type'] == "card" ? true : false))));
 377          }
 378  
 379          $form_container->end();
 380  
 381          $field_select = "<div class=\"view_fields\">\n";
 382          $field_select .= "<div class=\"enabled\"><div class=\"fields_title\">{$lang->enabled}</div><ul id=\"fields_enabled\">\n";
 383          if(is_array($mybb->input['fields']))
 384          {
 385              foreach($mybb->input['fields'] as $field)
 386              {
 387                  if($fields[$field])
 388                  {
 389                      $field_select .= "<li id=\"field-{$field}\">&#149; {$fields[$field]['title']}</li>";
 390                      $active[$field] = 1;
 391                  }
 392              }
 393          }
 394          $field_select .= "</ul></div>\n";
 395          $field_select .= "<div class=\"disabled\"><div class=\"fields_title\">{$lang->disabled}</div><ul id=\"fields_disabled\">\n";
 396          if(is_array($fields))
 397          {
 398              foreach($fields as $key => $field)
 399              {
 400                  if(!empty($active[$key]))
 401                  {
 402                      continue;
 403                  }
 404                  $field_select .= "<li id=\"field-{$key}\">&#149; {$field['title']}</li>";
 405              }
 406          }
 407          $field_select .= "</div></ul>\n";
 408          $field_select .= $form->generate_hidden_field("fields_js", @implode(",", @array_keys($active)), array('id' => 'fields_js'));
 409          $field_select = str_replace("'", "\\'", $field_select);
 410          $field_select = str_replace("\n", "", $field_select);
 411  
 412          $field_select = "<script type=\"text/javascript\">
 413  //<![CDATA[
 414  document.write('".str_replace("/", "\/", $field_select)."');
 415  //]]></script>\n";
 416  
 417          foreach($fields as $key => $field)
 418          {
 419              $field_options[$key] = $field['title'];
 420          }
 421  
 422          $field_select .= "<noscript>".$form->generate_select_box('fields[]', $field_options, $mybb->input['fields'], array('id' => 'fields', 'multiple' => true))."</noscript>\n";
 423  
 424          $form_container = new FormContainer($lang->fields_to_show);
 425          $form_container->output_row($lang->fields_to_show_desc, '', $field_select);
 426          $form_container->end();
 427  
 428          // Build the search conditions
 429          if(function_exists($conditions_callback))
 430          {
 431              $conditions_callback($mybb->input, $form);
 432          }
 433  
 434          $buttons[] = $form->generate_submit_button($lang->save_view);
 435          $form->output_submit_wrapper($buttons);
 436  
 437          $form->end();
 438          $page->output_footer();
 439      }
 440  
 441      else if($mybb->input['do'] == "delete")
 442      {
 443          if($mybb->get_input('no'))
 444          {
 445              admin_redirect($base_url."&action=views");
 446          }
 447  
 448          $query = $db->simple_select("adminviews", "COUNT(vid) as views");
 449          $views = $db->fetch_field($query, "views");
 450  
 451          if($views == 0)
 452          {
 453              flash_message($lang->error_cannot_delete_view, 'error');
 454              admin_redirect($base_url."&action=views");
 455          }
 456  
 457          $vid = $mybb->get_input('vid', MyBB::INPUT_INT);
 458          $query = $db->simple_select("adminviews", "vid, uid, visibility", "vid = '{$vid}'");
 459          $admin_view = $db->fetch_array($query);
 460  
 461          if($vid == 1 || !$admin_view['vid'] || $admin_view['visibility'] == 1 && $mybb->user['uid'] != $admin_view['uid'])
 462          {
 463              flash_message($lang->error_invalid_view_delete, 'error');
 464              admin_redirect($base_url."&action=views");
 465          }
 466  
 467          if($mybb->request_method == "post")
 468          {
 469              $db->delete_query("adminviews", "vid='{$admin_view['vid']}'");
 470              flash_message($lang->success_view_deleted, 'success');
 471              admin_redirect($base_url."&action=views");
 472          }
 473          else
 474          {
 475              $page->output_confirm_action($base_url."&amp;action=views&amp;do=delete&amp;vid={$admin_view['vid']}", $lang->confirm_view_deletion);
 476          }
 477      }
 478  
 479      // Export views
 480      else if($mybb->input['do'] == "export")
 481      {
 482          $xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?".">\n";
 483          $xml = "<adminviews version=\"".$mybb->version_code."\" exported=\"".TIME_NOW."\">\n";
 484  
 485          if($mybb->input['type'])
 486          {
 487              $type_where = "type='".$db->escape_string($mybb->input['type'])."'";
 488          }
 489  
 490          $query = $db->simple_select("adminviews", "*", $type_where);
 491          while($admin_view = $db->fetch_array($query))
 492          {
 493              $fields = my_unserialize($admin_view['fields']);
 494              $conditions = my_unserialize($admin_view['conditions']);
 495  
 496              $admin_view['title'] = str_replace(']]>', ']]]]><![CDATA[>', $admin_view['title']);
 497              $admin_view['sortby'] = str_replace(']]>', ']]]]><![CDATA[>', $admin_view['sortby']);
 498              $admin_view['sortorder'] = str_replace(']]>', ']]]]><![CDATA[>', $admin_view['sortorder']);
 499              $admin_view['view_type'] = str_replace(']]>', ']]]]><![CDATA[>', $admin_view['view_type']);
 500  
 501              $xml .= "\t<view vid=\"{$admin_view['vid']}\" uid=\"{$admin_view['uid']}\" type=\"{$admin_view['type']}\" visibility=\"{$admin_view['visibility']}\">\n";
 502              $xml .= "\t\t<title><![CDATA[{$admin_view['title']}]]></title>\n";
 503              $xml .= "\t\t<fields>\n";
 504              foreach($fields as $field)
 505              {
 506                  $xml .= "\t\t\t<field name=\"{$field}\" />\n";
 507              }
 508              $xml .= "\t\t</fields>\n";
 509              $xml .= "\t\t<conditions>\n";
 510              foreach($conditions as $name => $condition)
 511              {
 512                  if(!$conditions) continue;
 513                  if(is_array($condition))
 514                  {
 515                      $condition = my_serialize($condition);
 516                      $is_serialized = " is_serialized=\"1\"";
 517                  }
 518                  $condition = str_replace(']]>', ']]]]><![CDATA[>', $condition);
 519                  $xml .= "\t\t\t<condition name=\"{$name}\"{$is_serialized}><![CDATA[{$condition}]]></condition>\n";
 520              }
 521              $xml .= "\t\t</conditions>\n";
 522              $xml .= "\t\t<sortby><![CDATA[{$admin_view['sortby']}]]></sortby>\n";
 523              $xml .= "\t\t<sortorder><![CDATA[{$admin_view['sortorder']}]]></sortorder>\n";
 524              $xml .= "\t\t<perpage><![CDATA[{$admin_view['perpage']}]]></perpage>\n";
 525              $xml .= "\t\t<view_type><![CDATA[{$admin_view['view_type']}]]></view_type>\n";
 526              $xml .= "\t</view>\n";
 527          }
 528          $xml .= "</adminviews>\n";
 529          $mybb->settings['bbname'] = urlencode($mybb->settings['bbname']);
 530          header("Content-disposition: filename=".$mybb->settings['bbname']."-views.xml");
 531          header("Content-Length: ".my_strlen($xml));
 532          header("Content-type: unknown/unknown");
 533          header("Pragma: no-cache");
 534          header("Expires: 0");
 535          echo $xml;
 536          exit;
 537      }
 538  
 539      // Generate a listing of all current views
 540      else
 541      {
 542          $page->output_header($lang->view_manager);
 543  
 544          $page->output_nav_tabs($sub_tabs, 'views');
 545  
 546          $table = new Table;
 547          $table->construct_header($lang->view);
 548          $table->construct_header($lang->controls, array("class" => "align_center", "width" => 150));
 549  
 550          $default_view = fetch_default_view($type);
 551  
 552          $query = $db->simple_select("adminviews", "COUNT(vid) as views");
 553          $views = $db->fetch_field($query, "views");
 554  
 555          $query = $db->query("
 556              SELECT v.*, u.username
 557              FROM ".TABLE_PREFIX."adminviews v
 558              LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=v.uid)
 559              WHERE v.visibility='2' OR (v.visibility='1' AND v.uid='{$mybb->user['uid']}')
 560              ORDER BY title
 561          ");
 562          while($view = $db->fetch_array($query))
 563          {
 564              $created = "";
 565              if($view['uid'] == 0)
 566              {
 567                  $view_type = "default";
 568                  $default_class = "grey";
 569              }
 570              else if($view['visibility'] == 2)
 571              {
 572                  $view_type = "group";
 573                  if($view['username'])
 574                  {
 575                      $username = htmlspecialchars_uni($view['username']);
 576                      $created = "<br /><small>{$lang->created_by} {$username}</small>";
 577                  }
 578              }
 579              else
 580              {
 581                  $view_type = "user";
 582              }
 583  
 584              $default_add = '';
 585              if($default_view == $view['vid'])
 586              {
 587                  $default_add = " ({$lang->default})";
 588              }
 589  
 590              $title_string = "view_title_{$view['vid']}";
 591  
 592              if(isset($lang->$title_string))
 593              {
 594                  $view['title'] = $lang->$title_string;
 595              }
 596  
 597              $table->construct_cell("<div class=\"float_right\"><img src=\"styles/{$page->style}/images/icons/{$view_type}.png\" title=\"".$lang->sprintf($lang->this_is_a_view, $view_type)."\" alt=\"{$view_type}\" /></div><div class=\"{$default_class}\"><strong><a href=\"{$base_url}&amp;action=views&amp;do=edit&amp;vid={$view['vid']}\" >{$view['title']}</a></strong>{$default_add}{$created}</div>");
 598  
 599              $popup = new PopupMenu("view_{$view['vid']}", $lang->options);
 600              $popup->add_item($lang->edit_view, "{$base_url}&amp;action=views&amp;do=edit&amp;vid={$view['vid']}");
 601              if($view['vid'] != $default_view)
 602              {
 603                  $popup->add_item($lang->set_as_default, "{$base_url}&amp;action=views&amp;do=set_default&amp;vid={$view['vid']}&amp;my_post_key={$mybb->post_code}");
 604              }
 605  
 606              if($views > 1 && $view['vid'] != 1)
 607              {
 608                  $popup->add_item($lang->delete_view, "{$base_url}&amp;action=views&amp;do=delete&amp;vid={$view['vid']}&amp;my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_view_deletion}')");
 609              }
 610              $controls = $popup->fetch();
 611              $table->construct_cell($controls, array("class" => "align_center"));
 612              $table->construct_row();
 613          }
 614  
 615          $table->output($lang->view);
 616  
 617          echo <<<LEGEND
 618  <br />
 619  <fieldset>
 620  <legend>{$lang->legend}</legend>
 621  <img src="styles/{$page->style}/images/icons/default.png" alt="{$lang->default}" style="vertical-align: middle;" /> {$lang->default_view_desc}<br />
 622  <img src="styles/{$page->style}/images/icons/group.png" alt="{$lang->public}" style="vertical-align: middle;" /> {$lang->public_view_desc}<br />
 623  <img src="styles/{$page->style}/images/icons/user.png" alt="{$lang->private}" style="vertical-align: middle;" /> {$lang->private_view_desc}</fieldset>
 624  LEGEND;
 625          $page->output_footer();
 626      }
 627  }
 628  
 629  function set_default_view($type, $vid)
 630  {
 631      global $mybb, $db;
 632  
 633      $query = $db->simple_select("adminoptions", "defaultviews", "uid='{$mybb->user['uid']}'");
 634      $default_views = my_unserialize($db->fetch_field($query, "defaultviews"));
 635      $create = !$db->num_rows($query);
 636  
 637      $default_views[$type] = $vid;
 638      $default_views = my_serialize($default_views);
 639      $updated_admin = array("defaultviews" => $db->escape_string($default_views));
 640  
 641      if($create == true)
 642      {
 643          $updated_admin['uid'] = $mybb->user['uid'];
 644          $updated_admin['notes'] = '';
 645          $updated_admin['permissions'] = '';
 646          $db->insert_query("adminoptions", $updated_admin);
 647      }
 648      else
 649      {
 650          $db->update_query("adminoptions", $updated_admin, "uid='{$mybb->user['uid']}'");
 651      }
 652  }
 653  
 654  /**
 655   * @param string $type
 656   *
 657   * @return bool|array
 658   */
 659  function fetch_default_view($type)
 660  {
 661      global $mybb, $db;
 662      $query = $db->simple_select("adminoptions", "defaultviews", "uid='{$mybb->user['uid']}'");
 663      $default_views = my_unserialize($db->fetch_field($query, "defaultviews"));
 664      if(!is_array($default_views))
 665      {
 666          return false;
 667      }
 668      return $default_views[$type];
 669  }


2005 - 2021 © MyBB.de | Alle Rechte vorbehalten! | Sponsor: netcup Cross-referenced by PHPXref