Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add UC People Widget
-Add UC People widget, using same form UI as a Person post
-Change Specific People field to return ID
--Makes it easier to fill out the 'post__in' array value in $args array
  • Loading branch information
szk11001 committed Nov 4, 2015
1 parent ce851fe commit 2ccd55d
Show file tree
Hide file tree
Showing 3 changed files with 267 additions and 3 deletions.
11 changes: 9 additions & 2 deletions acf-export.php
Expand Up @@ -28,7 +28,7 @@ if(function_exists("register_field_group"))
'name' => 'specific_people',
'type' => 'relationship',
'instructions' => 'Choose specific people to display. Leave right side blank to display all People.',
'return_format' => 'object',
'return_format' => 'id',
'post_type' => array (
0 => 'person',
),
Expand Down Expand Up @@ -120,6 +120,13 @@ if(function_exists("register_field_group"))
'group_no' => 0,
),
),
array (
array (
'param' => 'widget',
'operator' => '==',
'value' => 'uc_people_widget',
),
),
),
'options' => array (
'position' => 'normal',
Expand All @@ -131,7 +138,7 @@ if(function_exists("register_field_group"))
));
}

//adds boxes to the "People" pages.
//adds boxes to the "People" pages.
if(function_exists("register_field_group"))
{
register_field_group(array (
Expand Down
257 changes: 257 additions & 0 deletions uc-people-widget.php
@@ -0,0 +1,257 @@
<?php

Class UC_People_Widget extends WP_Widget {
private $fields = array('title','about','file','email','phone','phone_(alternate)','fax','mailing_address','office_location','office_hours','courses');

public function __construct(){
parent::__construct( 'uc_people_widget', 'UC People', array( 'classname' => __CLASS__, 'description' => 'A widget to display People' ) );
}

private function get_people_grid( $args, $information_to_display ){
$the_query = new WP_Query( $args );
$out = '';
if( $the_query->have_posts() ){
$out = '<div class="row">';
$person_count = 1;

while( $the_query->have_posts() ){
$the_query->the_post();
$out .= '<div class="col-sm-3 personcount-'.$person_count.'" id="person-'.get_the_id().'">';
$out .= '<div class="person">';

$out .= '<a href="'.get_the_permalink().'" class="person-permalink">';
if (in_array('photo', $information_to_display)) {
$out .= '<div class="person-image">'.get_the_post_thumbnail('large').'</div>';
};
if (in_array('first_name', $information_to_display) || in_array('middle_name', $information_to_display) || in_array('last_name', $information_to_display)){
$out .= '<h4 class="person-name">';
if (in_array('first_name', $information_to_display)) {
$out .= get_field('first_name').' ';
};
if (in_array('middle_name', $information_to_display)) {
$out .= get_field('middle_name').' ';
};
if (in_array('last_name', $information_to_display)) {
$out .= get_field('last_name');
};
$out .= '</h4>';
};
$out .= '</a>';

foreach( $this->fields as $f ){
if( $f == 'file' && in_array('file', $information_to_display) ){
$file = get_field('file');
$out .= '<p class="person-file"><a href="'.$file[url].'">'.$file[title].'</a>'.'</p>';
} elseif( $f == 'email' && in_array( 'email', $information_to_display ) ){
$out .= '<p class="person-email"><a href="mailto:'.get_field('email').'">'.get_field('email').'</a>'.'</p>';
} else if( $f == 'title' && in_array( 'title', $information_to_display ) ){
$out .= '<p class="person-title"><strong>'.get_field('title').'</strong></p>';
} else {
if ( in_array($f, $information_to_display) ) {
$out .= '<p class="person-'.$f.'">'.get_field($f).'</p>';
};
}
}
$out .= '</div></div>'; // div.person and div.col-sm-3

// check to see if we need to close this row...
if ($person_count % 4 == 0){
// if this is the 4th, 8th, 16th, etc person...
echo '</div><!-- /row --><div class="row">';
}
$person_count++;
} //end of while posts
$out .= '</div>'; // div.row
} else {

} //end of if posts

return $out;
}

private function createTextCell( $field, $information_to_display ){
$cell = '';
if (in_array($field, $information_to_display)) {
$cell .= '<td class="person-'.$field.'">'.get_field($field).'</td>';
}
return $cell;
}

private function get_people_table( $args, $information_to_display ){
$the_query = new WP_Query( $args );
$out = '';
if ( $the_query->have_posts() ) {
// how many columns? Based on what they chose to display.
$num_cols = count($information_to_display);

$out .= '<table class="table table-striped">';
$out.= '<legend class="sr-only">List of People</legend>';
$out .= '<thead><tr>';

$nameCell = false;
foreach($information_to_display as $value){
if ($value == 'first_name' || $value == 'middle_name' || $value == 'last_name'){
if ($nameCell == false){
$out .= '<th>Name</th>';
$nameCell = true;
};
} elseif ($value == 'photo') {
$out .= '<th>&nbsp;</th>';
} else {
$arr = get_field_object('field_'.$value);
$label = $arr['label'];
$out .= '<th>'.$label.'</th>';
}
}
$out .= '</tr></thead>';
$out .= '<tbody>';

while ( $the_query->have_posts() ) {
$the_query->the_post();

$out .= '<tr>';
if (in_array('photo', $information_to_display)) {
$out .= '<td class="person-image"><a href="'.get_the_permalink().'">'.the_post_thumbnail(array('65', '65')).'</a></td>';
}
if (in_array('first_name', $information_to_display) || in_array('middle_name', $information_to_display) || in_array('last_name', $information_to_display)){
$out .= '<td class="person-name"><a href="'.get_the_permalink().'">';
if (in_array('first_name', $information_to_display)) {
$out .= get_field('first_name');
$out .= ' ';
};
if (in_array('middle_name', $information_to_display)) {
$out .= get_field('middle_name');
$out .= ' ';
};
if (in_array('last_name', $information_to_display)) {
$out .= get_field('last_name');
};
$out .= '</a></td>';
}

foreach( $this->fields as $f ){
if( $f == 'file' && in_array('file', $information_to_display) ){
$file = get_field('file');
$out .= '<td class="person-file"><a href="'.$file[url].'">'.$file[title].'</a>';
} else if( $f == 'email' && in_array('email', $information_to_display) ){
$out .= '<td class="person-email"><a href="mailto:'.get_field('email').'">'.get_field('email').'</a></td>';
} else {
$out .= $this->createTextCell($f, $information_to_display);
}
}
$out .= '</tr>';
} //end of posts
$out .= '</tbody>';
$out .= '</table>';
} else {
// no posts found
}
return $out;
}

public function widget( $args, $instance ){
$settings = array( 'layout' => '', 'specific_people' => '', 'specific_groups' => '', 'specific_tags' => '', 'break_into_groups' => '', 'information_to_display' => '');
foreach( $settings as $k => $v ){
$settings[$k] = get_field( $k, 'widget_' . $args['widget_id'] );
}

$wpQueryArgs = array(
'posts_per_page' => -1,
'post_type' => 'person',
'orderby' => 'menu_order title',
'order' => 'ASC',
'post__in' => ( ( !is_null($settings['specific_people']) ) ? $settings['specific_people'] : array() )
);

if ( $settings['specific_groups'] != false || $settings['specific_tags'] != false ){
$tax_query = array();

if ( $settings['specific_groups'] != false ) {
$tax_query[] = array(
'taxonomy' => 'group',
'field' => 'term_id',
'terms' => $settings['specific_groups']
);
}
if ( $settings['specific_tags'] != false ) {
$tax_query[] = array(
'taxonomy' => 'persontag',
'field' => 'term_id',
'terms' => $settings['specific_tags']
);
}
$wpQueryArgs['tax_query'] = $tax_query;
}

if( $settings['break_into_groups'] != false ){
// get all the people
$the_query = new WP_Query( $wpQueryArgs );

// focusing on just the people, not the rest of the query.
$people = $the_query->posts;

// look at each person, and see each group used, use that to create a list of terms.
$groups_in_use = array();

foreach($people as $value){
//$id = $value->ID;
$id = $value;
$terms = get_the_terms($id, 'group');
if (is_array($terms)){
foreach($terms as $key => $v){
//duplicates will overwrite themselves...
$slug = $v->slug;
$groups_in_use[$slug]= $slug;
}
};
}

// sort the groups in use alphabetically
sort($groups_in_use);

// for each item in the list of terms, do a new query, but this time we're going to limit it to ONLY items from that one group.
foreach($groups_in_use as $value){

// this sets up the query we'll need, and will overwrite any group queries from the original settings.
$tax_query = array();
$group_query = array(
'taxonomy' => 'group',
'field' => 'slug',
'terms' => $value
);
array_push($tax_query, $group_query);
$wpQueryArgs['tax_query'] = $tax_query;

// with $arg updated, let's do a new query.
echo '<h3 class="group-title">'.get_term_by('slug', $value, 'group')->name.'</h3>';

if( $settings['layout'] == 'grid' ){
echo $this->get_people_grid( $wpQueryArgs, $settings['information_to_display'] );
} else if( $settings['layout'] == 'table' ){
echo $this->get_people_table( $wpQueryArgs, $settings['information_to_display'] );
}
}
} else {
if( $settings['layout'] == 'grid' ){
echo $this->get_people_grid( $wpQueryArgs, $settings['information_to_display'] );
} else if( $settings['layout'] == 'table' ){
echo $this->get_people_table( $wpQueryArgs, $settings['information_to_display'] );
}
}
}

public function form( $instance ){
//Form is handled by ACF, code can be found in wp-content/plugins/uc-people/acf-export.php
}

public function update( $new_instance, $old_instance ){
//Update is handled by ACF
}
}

function register_uc_people_widget(){
register_widget( 'UC_People_Widget' );
}
add_action( 'widgets_init', 'register_uc_people_widget' );

?>
2 changes: 1 addition & 1 deletion uc-people.php
Expand Up @@ -12,7 +12,7 @@ if ( ! defined( 'WPINC' ) ) {
}
require 'acf-export.php';
require_once(WP_CONTENT_DIR . '/ldap.php');

include 'uc-people-widget.php';

function create_custom_custom_post_type(){
$labels = array(
Expand Down

0 comments on commit 2ccd55d

Please sign in to comment.