diff --git a/acf-export.php b/acf-export.php
index 34d0a2f..9806066 100644
--- a/acf-export.php
+++ b/acf-export.php
@@ -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',
),
@@ -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',
@@ -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 (
@@ -299,6 +306,22 @@ if(function_exists("register_field_group"))
'formatting' => 'html',
'maxlength' => '',
),
+ array (
+ 'key' => 'field_url',
+ 'label' => 'URL',
+ 'name' => 'url',
+ 'type' => 'url',
+ 'instructions' => '',
+ 'required' => 0,
+ 'conditional_logic' => 0,
+ 'wrapper' => array (
+ 'width' => '',
+ 'class' => '',
+ 'id' => '',
+ ),
+ 'default_value' => '',
+ 'placeholder' => '',
+ ),
),
'location' => array (
array (
diff --git a/uc-people-widget.php b/uc-people-widget.php
new file mode 100644
index 0000000..3748fbd
--- /dev/null
+++ b/uc-people-widget.php
@@ -0,0 +1,314 @@
+ __CLASS__, 'description' => 'A widget to display People' ) );
+ }
+
+ private static function sort_by_last_then_first($a,$b) {
+ setlocale(LC_CTYPE, 'en_US.UTF8'); // Using setlocale and iconv incase a name has an accent or other similar characters in them
+ $r = strnatcasecmp( iconv('UTF-8', 'ASCII//TRANSLIT', get_field('last_name', $a)), iconv('UTF-8', 'ASCII//TRANSLIT', get_field('last_name', $b)) );
+ if( $r === 0 ){
+ $r = strnatcasecmp( iconv('UTF-8', 'ASCII//TRANSLIT', get_field('first_name', $a)), iconv('UTF-8', 'ASCII//TRANSLIT', get_field('first_name', $b)) );
+ }
+ return $r;
+ }
+
+ private static function sort_group_by_order( $a, $b ){
+ // Getting the order for groups $a and $b
+ $groupA = get_term_by('slug', $a, 'group')->term_id;
+ $array_orderGroupA = get_option( "taxonomy_{$groupA}" );
+ $orderGroupA = $array_orderGroupA['group_order'];
+
+ $groupB = get_term_by('slug', $b, 'group')->term_id;
+ $array_orderGroupB = get_option( "taxonomy_{$groupB}" );
+ $orderGroupB = $array_orderGroupB['group_order'];
+
+ $r = strnatcasecmp( $orderGroupA, $orderGroupB );
+ if( $r === 0 ){
+ $r = strnatcasecmp( $a, $b );
+ }
+ return $r;
+ }
+
+ private function createTextCell( $field, $information_to_display, $id ){
+ $cell = '';
+ if (in_array($field, $information_to_display)) {
+ $cell .= '
'.get_field($field, $id ).' ';
+ }
+ return $cell;
+ }
+
+ private function get_people_grid( $args, $information_to_display ){
+ $the_query = new WP_Query( $args );
+ $out = '';
+ if( $the_query->have_posts() ){
+ $out = '';
+ $person_count = 1;
+
+ $people = $the_query->get_posts();
+ usort( $people, array('UC_People_Widget', 'sort_by_last_then_first') );
+
+ foreach( $people as $id ){
+ $out .= '
';
+ $out .= '
';
+
+ $out .= '
';
+ if (in_array('photo', $information_to_display)) {
+ $out .= ''.get_the_post_thumbnail( $id, 'large').'
';
+ };
+ if (in_array('first_name', $information_to_display) || in_array('middle_name', $information_to_display) || in_array('last_name', $information_to_display)){
+ $out .= '';
+ if (in_array('first_name', $information_to_display)) {
+ $out .= get_field('first_name', $id ).' ';
+ };
+ if (in_array('middle_name', $information_to_display)) {
+ $out .= get_field('middle_name', $id ).' ';
+ };
+ if (in_array('last_name', $information_to_display)) {
+ $out .= get_field('last_name', $id );
+ };
+ $out .= ' ';
+ };
+ $out .= ' ';
+
+ foreach( $this->fields as $f ){
+ if( $f == 'file' && in_array('file', $information_to_display) ){
+ $file = get_field('file', $id );
+ $out .= '
'.$file[title].' '.'
';
+ } elseif( $f == 'email' && in_array( 'email', $information_to_display ) ){
+ $out .= '
'.get_field('email', $id ).' '.'
';
+ } else if( $f == 'title' && in_array( 'title', $information_to_display ) ){
+ $out .= '
';
+ $titlePieces = explode(";", get_field('title', $id ));
+ foreach( $titlePieces as $t ){
+ $out .= ( !empty($t) ? "{$t} ": "" );
+ }
+ $out .= '
';
+ } else {
+ if ( in_array($f, $information_to_display) ) {
+ $out .= '
'.get_field($f, $id ).'
';
+ };
+ }
+ }
+ $out .= '
'; // 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 '
';
+ }
+ $person_count++;
+ }
+ $out .= '
'; // div.row
+ } else {
+
+ } //end of if posts
+
+ return $out;
+ }
+
+ private function get_people_table( $args, $information_to_display ){
+ $the_query = new WP_Query( $args );
+
+ $out = '';
+ if ( $the_query->have_posts() ) {
+ $people = $the_query->get_posts();
+ usort( $people, array('UC_People_Widget', 'sort_by_last_then_first') );
+
+ // how many columns? Based on what they chose to display.
+ $num_cols = count($information_to_display);
+
+ $out .= '';
+ $out.= 'List of People ';
+ $out .= '';
+
+ $nameCell = false;
+ foreach($information_to_display as $value){
+ if ($value == 'first_name' || $value == 'middle_name' || $value == 'last_name'){
+ if ($nameCell == false){
+ $out .= 'Name ';
+ $nameCell = true;
+ };
+ } elseif ($value == 'photo') {
+ $out .= ' ';
+ } else {
+ $arr = get_field_object('field_'.$value);
+ $label = $arr['label'];
+ $out .= ''.$label.' ';
+ }
+ }
+ $out .= ' ';
+ $out .= '';
+
+ foreach( $people as $id ){
+ $out .= '';
+ if (in_array('photo', $information_to_display)) {
+ $out .= ''.get_the_post_thumbnail($id, array('65', '65')).' ';
+ }
+ if (in_array('first_name', $information_to_display) || in_array('middle_name', $information_to_display) || in_array('last_name', $information_to_display)){
+ $out .= '';
+ if (in_array('first_name', $information_to_display)) {
+ $out .= get_field('first_name', $id );
+ $out .= ' ';
+ };
+ if (in_array('middle_name', $information_to_display)) {
+ $out .= get_field('middle_name', $id );
+ $out .= ' ';
+ };
+ if (in_array('last_name', $information_to_display)) {
+ $out .= get_field('last_name', $id );
+ };
+ $out .= ' ';
+ }
+
+ foreach( $this->fields as $f ){
+ if( $f == 'file' && in_array('file', $information_to_display) ){
+ $file = get_field('file', $id );
+ $out .= ''.$file[title].' ';
+ } else if( $f == 'email' && in_array('email', $information_to_display) ){
+ $out .= ''.get_field('email', $id ).' ';
+ } else if( $f == 'title' && in_array('title', $information_to_display) ){
+ $out .= '';
+ $titlePieces = explode(";", get_field('title', $id ));
+ foreach( $titlePieces as $t ){
+ $out .= ( !empty($t) ? "{$t} ": "" );
+ }
+ $out .= ' ';
+ } else {
+ $out .= $this->createTextCell($f, $information_to_display, $id );
+ }
+ }
+ $out .= ' ';
+ }
+ $out .= ' ';
+ $out .= '
';
+ } 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',
+ //'order' => 'post__in',
+ 'post__in' => ( ( !is_null($settings['specific_people']) ) ? $settings['specific_people'] : array() ),
+ 'fields' => 'ids'
+ );
+
+ if ( $settings['specific_groups'] != false || $settings['specific_tags'] != false ){
+ $tax_query = array();
+ $isGroupSet = false;
+ $isTagSet = false;
+
+ if ( $settings['specific_groups'] != false ) {
+ $isGroupSet = true;
+ $taxGroupArray = array(
+ 'taxonomy' => 'group',
+ 'field' => 'term_id',
+ 'terms' => $settings['specific_groups']
+ );
+ $tax_query[] = $taxGroupArray;
+ }
+ if ( $settings['specific_tags'] != false ) {
+ $isTagSet = true;
+ $taxTagArray = array(
+ 'taxonomy' => 'persontag',
+ 'field' => 'term_id',
+ 'terms' => $settings['specific_tags']
+ );
+ $tax_query[] = $taxTagArray;
+ }
+ $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);
+ usort($groups_in_use, array('UC_People_Widget', 'sort_group_by_order') );
+
+ // 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);
+ /*if( $isGroupSet != false ){
+ array_push($tax_query, $taxGroupArray);
+ }*/
+ if( $isTagSet != false ){
+ array_push($tax_query, $taxTagArray);
+ }
+ $wpQueryArgs['tax_query'] = $tax_query;
+
+ // with $arg updated, let's do a new query.
+ echo ''.get_term_by('slug', $value, 'group')->name.' ';
+
+ 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' );
+
+?>
\ No newline at end of file
diff --git a/uc-people.php b/uc-people.php
index 6925df3..c36ca08 100644
--- a/uc-people.php
+++ b/uc-people.php
@@ -2,7 +2,7 @@
/**
* Plugin Name: UC People
* Description: Displays information about people, a replacement for UUP.
- * Version: 1.0
+ * Version: 1.1
* Author: Andrew Bacon and Salman Kaleem of UITS Web Dev
*/
@@ -11,8 +11,8 @@ if ( ! defined( 'WPINC' ) ) {
die;
}
require 'acf-export.php';
-require_once(WP_CONTENT_DIR . '/ldap.php');
-
+//require_once(WP_CONTENT_DIR . '/ldap.php');
+include 'uc-people-widget.php';
function create_custom_custom_post_type(){
$labels = array(
@@ -32,9 +32,11 @@ function create_custom_custom_post_type(){
'public' => true,
'menu_position' => 35,
'menu_icon' => 'dashicons-groups',
- 'supports' => array( 'tags', 'thumbnail', 'revisions', 'page-attributes', 'author' ),
+ 'supports' => array( 'title', 'tags', 'thumbnail', 'revisions', 'page-attributes', 'author' ),
'has_archive' => true,
- 'rewrite' => false
+ 'rewrite' => array(
+ 'slug' => '/person'
+ )
);
register_post_type( 'person', $args );
@@ -77,6 +79,51 @@ function create_custom_custom_post_type(){
}
add_action( 'init', 'create_custom_custom_post_type', 0 );
+// Add Order field to Add New Group Page
+function uc_people_new_group_order_field(){
+ ?>
+
+ term_id}" );
+ $order = $term_meta['group_order'];
+ ?>
+
+ Order
+
+
+ Enter a value for this field or leave it blank
+
+
+ 'NetID',
+ 'role' => 'Role',
'first_name' => 'First Name',
'last_name' => 'Last Name',
'title' => 'Title',
@@ -146,9 +195,21 @@ function importFile( $filename ){
'office_hours' => 'Office Hours',
'courses' => 'Courses',
'about' => 'About',
+ 'url' => 'Website',
);
foreach( $data as $k => $v ){
+ $user = username_exists( $v['NetID'] );
+ $postAuthorFlag = false;
+ if( $user != false && is_user_member_of_blog($user, get_current_blog_id() ) ){
+ $postAuthorFlag = true;
+ $role = $v['Role'];
+ if( $role == 'profile_user' ){
+ $userObject = new WP_User( $user );
+ $userObject->remove_role('profile_user');
+ $userObject->add_role('contributor');
+ }
+ }
$title = $v['First Name'].' '.$v['Last Name'];
$args = array(
'post_title' => $title,
@@ -156,11 +217,15 @@ function importFile( $filename ){
'post_status' => 'publish',
'post_type' => 'person',
'menu_order' => ( !empty($v['Order']) ? $v['Order'] : 0 ),
+ 'post_author' => ( $postAuthorFlag == true ? $user: get_current_user_id() ),
);
$id = wp_insert_post( $args, true );
wp_set_object_terms( $id, explode(' ', $v['Tags']), 'tag' );
set_post_thumbnail( $id, intval($v['Profile Image']) );
foreach ($fields as $l => $w) {
+ if( $l == 'netid' || $l == 'role' ){
+ continue;
+ }
update_field($l, $v[$w], $id);
}
}
@@ -171,6 +236,8 @@ function importFile( $filename ){
}
}
+
+
function uc_people_settings_page_menu(){
add_submenu_page('tools.php', 'Import People', 'Import People', 'manage_options', 'uc-import-people', 'uc_people_settings_page' );
}