Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Jan 13th, 2011  |  syntax: PHP  |  size: 9.10 KB  |  views: 23  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. <?php
  2. /*
  3. Plugin Name: Argus Administration Tool
  4. Plugin URI: http://toro.azwestern.edu
  5. Description: Argus is an Administration Tool used to manage and track Visitors in the ACCL along with providing a way to report problems within the ACCL. This tool also incorporates the Offenders database for tracking offenders in the ACCL.
  6. Version: 1.3
  7. Author: Zack Loveless
  8. Author URI: http://www.unifiedtech.org
  9. */
  10.  
  11. /*
  12.  * Special Note: permissions follow the following format: argus_<action>_<module>
  13.  *                      where <action> is a wordpress standard action ("edit", "publish", etc)
  14.  *                      and <module> is the module name ("visitors")
  15.  *
  16.  * Special Note: methods prefixed with "_" indicate that the method is an action
  17.  *                      or filter for wordpress. Methods prefixed with "__" are 'protected'
  18.  *                      methods for the argus class.
  19.  */
  20.  
  21. if ( ! class_exists( 'argus' ) )
  22. {
  23.         class argus
  24.         {
  25.                 /**#@+
  26.                   * Internal reference variables
  27.                   *
  28.                   * @var        mixed
  29.                   * @since 1.0
  30.                   */
  31.                 protected $db;
  32.                 /**#@-*/
  33.  
  34.                 public function __construct( )
  35.                 {
  36.                         global $wpdb;
  37.  
  38.                         $this->db =& $wpdb;
  39.  
  40.                         add_action( 'init', array( &$this, '_wp_init' ) );
  41.                         //add_action( 'admin_init', array( &$this, '_wp_admin_init' ) );
  42.                         add_action( 'save_post', array( &$this, '_wp_save_post' ), 1, 2 );
  43.  
  44.                         add_action( 'manage_posts_custom_column', array( &$this, '_wp_filter_visitor_column_view' ) );
  45.                         add_filter( 'manage_edit-visitor_columns', array( &$this, '_wp_filter_visitor_columns' ) );
  46.                 }
  47.  
  48.                 /* Wordpress Initializations */
  49.                 public function _visitors_meta_box_cb( )
  50.                 {
  51.                         // http://www.deluxeblogtips.com/2010/04/how-to-create-meta-box-wordpress-post.html
  52.                         $m_visitor_info = array(
  53.                                         'id' => 'argus_edit_visitor',
  54.                                         'name' => 'Visitor Information',
  55.                                         'cb' => array( &$this, '_argus_edit_visitor' ),
  56.                                         'type' => 'visitor',
  57.                                         'context' => 'normal',
  58.                                         'priority' => 'high',
  59.                                 );
  60.  
  61.                         add_meta_box( $m_visitor_info['id'], $m_visitor_info['name'], $m_visitor_info['cb'], $m_visitor_info['type'], $m_visitor_info['context'], $m_visitor_info['priority'] );
  62.                         //add_meta_box( 'argus_edit_visitor', 'Visitor Information', array( &$this, '_argus_edit_visitor' ), 'visitor', 'advanced', 'high' );
  63.                         //add_meta_box( $id, $title, $callback, $page, $context, $priority, $callback_args );
  64.                 }
  65.  
  66.                 public function _wp_filter_visitor_column_view( $column )
  67.                 {
  68.                         global $post;
  69.                         if ( $column == "name" )
  70.                         {
  71.                                 $name = get_post_meta( $post->ID, 'v_f_name', true );
  72.                                 $name .= ' ' . get_post_meta( $post->ID, 'v_l_name', true );
  73.                                 echo $name;
  74.                         }
  75.                         elseif ( $column == "type" )
  76.                         {
  77.                                 $types = get_the_terms( $post->ID, 'v_types' );
  78.                                 echo substr(implode( ', ', $types ), 0, -2);    // Outputs the visitor types in a CSV-state.
  79.                         }
  80.                         elseif ( $column == "loggedin" OR $column == "workstation" )
  81.                         {
  82.                                 $workstation = get_post_meta( $post->ID, 'v_workstation', true );
  83.                                 if ( $column == "workstation" ) echo $workstation;
  84.                                 elseif ( $column == "loggedin" ) echo ( !empty($workstation) OR !isset( $workstation ) ) ? 'No' : 'Yes';
  85.                         }
  86.                         elseif ( $column == "id" )
  87.                         {
  88.                                 echo get_post_meta( $post->ID, 'v_id', true );
  89.                         }
  90.                 }
  91.  
  92.                 public function _wp_filter_visitor_columns( $columns )
  93.                 {
  94.                         $columns = array(
  95.                                         'cb' => '<input type="checkbox" />',
  96.                                         'title' => 'Name',
  97.                                         'type' => 'Type',
  98.                                         'loggedin' => 'Logged In?',
  99.                                         'id' => 'Visitor ID',
  100.                                 );
  101.  
  102.                         return $columns;
  103.                 }
  104.  
  105.                 public function _wp_init( )
  106.                 {
  107.                         $v_args = array(
  108.                                         'labels' => array (
  109.                                                         'name' => 'Visitors', // TODO: __('Visitors')
  110.                                                         'singular_name' => 'Visitor',
  111.                                                         'add_new_item' => 'Register New Visitor', // TODO: http://codex.wordpress.org/Function_Reference/register_post_type#Arguments
  112.                                                 ),
  113.                                         'public' => true,
  114.                                         'publicly_queryable' => false,
  115.                                         'exclude_from_search' => true,
  116.                                         'show_ui' => true,
  117.                                         'hiearchical' => false,
  118.                                         'supports' => array( '' ),
  119.                                         'register_meta_box_cb' => array ( &$this, '_visitors_meta_box_cb' ),
  120.                                 );
  121.  
  122.                         register_post_type( 'visitor', $v_args );
  123.                         flush_rewrite_rules( /* flushing rewrite rules for safety. (JIC) */ );
  124.  
  125.                         $v_args_taxonomy = array(
  126.                                         'label' => 'Visitor Types',
  127.                                         'hierarchical' => true,         // Treats this taxonomy as categories for each visitor, not tags
  128.                                         'singular_label' => 'Visitor Type',
  129.                                         'rewrite' => false,
  130.                                         'public' => true,
  131.                                         'show_tagcloud' => false,
  132.                                         'show_ui' => true,
  133.                                         'show_in_nav_menus' => false,
  134.                                         'capabilities' => array (
  135.                                                         //'assign_terms' => 'argus_edit_visitors',
  136.                                                 ),
  137.                                 );
  138.  
  139.                         $v_args_accts = array(
  140.                                         'label' => 'Accounts',
  141.                                         'hierarchical' => true,
  142.                                         'singular_label' => 'Account',
  143.                                         'rewrite' => false,
  144.                                         'public' => true,
  145.                                         'show_tagcloud' => false,
  146.                                         'show_ui' => true,
  147.                                         'show_in_nav_menus' => false,
  148.                                         'capabilities' => array (
  149.                                                         //'assign_terms' => 'argus_edit_visitors',
  150.                                                 ),
  151.                                 );
  152.  
  153.                         register_taxonomy( 'v_types', array( 'visitor' ), $v_args_taxonomy );
  154.                         //register_taxonomy( 'a_wkstas', array( 'visitor' ), $v_args_wksta );
  155.                         register_taxonomy( 'v_accts', array( 'visitor' ), $v_args_accts );
  156.                 }
  157.  
  158.                 public function _wp_save_post( $post_id, $post )
  159.                 {
  160.                         if ( empty($_POST)
  161.                                         OR !isset($_POST['argus_edit_visitor'])
  162.                                         OR !wp_verify_nonce( $_POST['argus_edit_visitor'], 'argus_edit_visitor' ) )
  163.                         {
  164.                                 echo "Erm. Why?";
  165.                                 return $post->ID;
  166.                         }
  167.  
  168.                         if ( ! current_user_can( 'edit_post', $post->ID ) ) return $post->ID;
  169.  
  170.                         // v_f_name | v_l_name | v_workstation | v_id
  171.                         // Argh!
  172.  
  173.                         $this->__update_post_meta( $post->ID, 'v_f_name', $_POST['v_f_name'] );
  174.                         $this->__update_post_meta( $post->ID, 'v_l_name', $_POST['v_l_name'] );
  175.                         $this->__update_post_meta( $post->ID, 'v_workstation', $_POST['v_workstation'] );
  176.                         $this->__update_post_meta( $post->ID, 'v_id', $_POST['v_id'] );
  177.                 }
  178.  
  179.                 /* Argus Visitors */
  180.                 public function _argus_edit_visitor(  )
  181.                 {
  182.                         global $post;
  183.                         $data = get_post_custom( $post->ID );
  184.  
  185.                         $firstName = get_post_meta( $post->ID, 'v_f_name', true );
  186.                         $lastName = get_post_meta( $post->ID, 'v_l_name', true );
  187.                         $workstation = get_post_meta( $post->ID, 'v_workstation', true );
  188.                         $vid = get_post_meta( $post->ID, 'v_id', true );
  189.                         $nonce = wp_create_nonce( plugin_basename( __FILE__ ) );
  190.  
  191.                         $workstations = $this->__getWorkstationList( isset($workstation) AND !empty($workstation) ? $workstation : '' );
  192.  
  193.                         $html = <<<HTML
  194. <table class="form-table">
  195. <tr>
  196.         <th style="width:20%;"><label for="v_f_name">First Name:</label></th>
  197.         <td>
  198.                 <input name="v_f_name" id="v_f_name" value="{$firstName}" size="30" style="width:97%;" /><br />
  199.         </td>
  200. </tr>
  201. <tr>
  202.         <th style="width:20%;"><label for="v_l_name">Last Name:</label></th>
  203.         <td>
  204.                 <input name="v_l_name" id="v_l_name" value="{$lastName}" size="30" style="width:97%;" /><br />
  205.         </td>
  206. </tr>
  207. <tr>
  208.         <th style="width:20%;"><label for="v_id">Visitor ID:</label></th>
  209.         <td>
  210.                 <input name="v_id" id="v_id" value="{$vid}" size="30" style="width:97%" /><br />
  211.                 <p>Enter the visitor's ID number as it appears on their form of identification.</p>
  212.         </td>
  213. </tr>
  214. <tr>
  215.         <th style="width:20%;"><label for="v_workstations">Location:</label></th>
  216.         <td>
  217.                 {$workstations}<br />
  218.                 <p>Select the workstation that the visitor would like to sit at.</p>
  219.         </td>
  220. </tr>
  221. <input type="hidden" name="argus_edit_visitor" id="argus_edit_visitor" value="{$nonce}" />
  222. </table>
  223. HTML;
  224.                         echo $html;
  225.                 }
  226.  
  227.                 /* Argus Internal Functions */
  228.  
  229.                 /**
  230.                  * Gets a list of workstations from the database and returns them as a <select> control
  231.                  *
  232.                  * @param       string          The currently selected option
  233.                  * @param       string          The prefix to append to the control output
  234.                  * @return      object
  235.                  * @since 1.1
  236.                  */
  237.                 protected function __getWorkstationList( $meta, $field_id = 'v_workstations' )
  238.                 {
  239.                         $sql = "SELECT w.workstation_name AS computer, w.workstation_id AS ID
  240.                                                 FROM wp_argus_workstations AS w
  241.                                                         ORDER BY w.workstation_id;";
  242.  
  243.                         $results = $this->db->get_results( $sql );
  244.  
  245.                         $html = "<select name='{$field_id}' id='{$field_id}' style='width:30%;'>";
  246.  
  247.                         foreach ($results as $row)
  248.                         {
  249.                                 $html .= '<option ' . ($meta == $row->computer ? 'selected="selected"' : '') . ' value="' . $row->ID . '">' . $row->computer . '</option>';
  250.                         }
  251.  
  252.                         $html .= '</select>';
  253.  
  254.                         return $html;
  255.                 }
  256.  
  257.                 /**
  258.                   * Updates post meta for a post. It also automatically deletes or adds the value to field_name if specified
  259.                   *
  260.                   * @access             protected
  261.                   * @param              integer         The post ID for the post we're updating
  262.                   * @param              string          The field we're updating/adding/deleting
  263.                   * @param              string          [Optional] The value to update/add for field_name. If left blank, data will be deleted.
  264.                   * @since 1.3
  265.                   */
  266.                 protected function __update_post_meta( $post_id, $field_name, $value = '' )
  267.                 {
  268.                         if ( empty( $value ) OR ! $value )
  269.                         {
  270.                                 delete_post_meta( $post_id, $field_name );
  271.                         }
  272.                         elseif ( ! get_post_meta( $post_id, $field_name ) )
  273.                         {
  274.                                 add_post_meta( $post_id, $field_name, $value );
  275.                         }
  276.                         else
  277.                         {
  278.                                 update_post_meta( $post_id, $field_name, $value );
  279.                         }
  280.                 }
  281.         }
  282. }
  283.  
  284. $argus = new argus();
clone this paste RAW Paste Data