diff --git a/uc-people.js b/uc-people.js index 3af157d..fe4951c 100644 --- a/uc-people.js +++ b/uc-people.js @@ -1,25 +1,38 @@ jQuery(document).ready(function($){ - if( $('#uc_people_netid_lookup').length ){ - $('#uc_people_netid_search').click(function(ev){ + if( $('#uc_people_lookup').length ){ + $('#uc_people_lookup_search').click(function(ev){ ev.preventDefault(); - var query = $('#uc_people_netid_lookup').val(); + var query = $('#uc_people_lookup').val(); + var type = null; if( query.length == 8 && query.match(/[a-z]{3}[0-9]{5}/) ){ + var type = 'netid'; + } else if( query.match(/uconn.edu/) ){ + var type = 'email'; + } + + if( type != null ){ $.ajax({ url: ajax_object.ajax_url, - data: { 'action': 'uc_netid_lookup', 'netid': query }, + data: { 'action': 'uc_people_lookup', 'query': query, 'type': type }, success: function(response){ if( !isEmpty(response) ){ + $('#uc_people_lookup_metabox p.howto').text("Person found"); var fields = ['first_name', 'last_name', 'phone', 'email']; fields.forEach(function(el,i,a){ + $('#acf-field-'+el).val(""); if( response.hasOwnProperty(el) ){ $('#acf-field-'+el).val( response[el] ); } }); + } else { + $('#uc_people_lookup_metabox p.howto').text("Person not found"); } }, dataType: 'json' }); + } else { + $('#uc_people_lookup_metabox p.howto').text("Invalid e-mail address or NetID entered"); } }); } diff --git a/uc-people.php b/uc-people.php index 9f05b49..1f6fc01 100644 --- a/uc-people.php +++ b/uc-people.php @@ -10,8 +10,9 @@ if ( ! defined( 'WPINC' ) ) { die; } -include 'acf-export.php'; -require_once(WP_CONTENT_DIR . '/ldap.php'); +require 'acf-export.php'; +//require_once(WP_CONTENT_DIR . '/ldap.php'); + function create_custom_custom_post_type(){ $labels = array( @@ -130,7 +131,7 @@ function importFile(){ $title = $v['First Name'].' '.$v['Last Name']; $args = array( 'post_title' => $title, - 'post_name' => 'testing-contact', + 'post_name' => strtolower($v['First Name']).'-'.strtolower($v['Last Name']), 'post_status' => 'publish', 'post_type' => 'person', 'menu_order' => ( !empty($v['Order']) ? $v['Order'] : 0 ), @@ -182,32 +183,93 @@ function uc_people_settings_page(){ '; - echo ''; - echo ''; +add_action( 'add_meta_boxes', 'uc_people_lookup_metabox' ); +function uc_people_lookup_metabox_callback(){ + echo '
'; + echo '

'; + echo '

'; + echo '

'; echo '
'; } + function uc_acf_admin_enqueue_scripts(){ wp_enqueue_script( 'ucpeoplejs', plugin_dir_url(__FILE__).'/uc-people.js', array('jquery'), '1.0' ); + wp_localize_script( 'ucpeoplejs', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) ); } add_action('acf/input/admin_enqueue_scripts', 'uc_acf_admin_enqueue_scripts'); -add_action( 'wp_ajax_uc_netid_lookup', 'uc_netid_lookup_callback' ); -function uc_netid_lookup_callback(){ - $query = $_GET['netid']; +if( !function_exists('uc_people_lookup') ){ + function uc_people_lookup( $query, $type ){ + if( is_null($query) || is_null($type) ){ + return false; + } + //LDAP Config + $ldapdn = 'uid=web-aurora,ou=accounts,ou=ldap,dc=uconn,dc=edu'; + $ldappass = 'nyZqY6evmFBft2oS5fJDReeIa1W36CXViEPZCXpTRyD5IuiM2GCdeiDOlNJQOiu0'; + + $ldaphost = 'ldaps://ldap.uconn.edu:636'; + $ldapconn = ldap_connect($ldaphost) or die('Can\'t contact LDAP'); + + if($ldapconn){ + ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3); + $ldapbind = ldap_bind($ldapconn, $ldapdn, $ldappass) or die('Can\'t bind LDAP'); + + $search = ''; + if( $type == 'netid' ){ + $field = 'uid'; + } else if( $type == 'email' ){ + $field = 'mail'; + } + $search = '('.$field.'='.$query.')'; + + $ldap_fields = array('uid', 'title','cn', 'telephoneNumber', 'postalAddress', 'givenName', 'sn','mail','uconnpersonaffiliation','l','ou'); + $results = ldap_search($ldapconn, 'dc=uconn,dc=edu', $search, $ldap_fields); + if($results == false){ + return; + } + + $var = ldap_get_entries($ldapconn, $results); + $ldap_keys = array('title' ,'cn', 'telephonenumber', 'postaladdress', 'givenname', 'sn','mail','uconnpersonaffiliation','l','ou'); + $meta_keys = array('title', 'name', 'phone', 'address', 'first_name', 'last_name','email','affiliation','campus','department'); + $fields = array_combine($ldap_keys, $meta_keys); + $user_data = array(); + foreach( $var as $k=>$result ){ + if( is_int($k) ){ + foreach ($fields as $ldap_key=>$meta_key){ + if( isset($result) && isset($result[$ldap_key]) && isset($result[$ldap_key][0]) ){ + $count = $result[$ldap_key]['count'] - 1; + if( $count > 0 ){ + for ($i=0; $i <= $count; $i++) { + $user_data[$meta_key][$i] = $result[$ldap_key][$i]; + } + } else if( $count == 0 ) { + $user_data[$meta_key] = $result[$ldap_key][0]; + } + } + } + } + } + return $user_data; + } + ldap_close($ldapconn); + } +} + +add_action( 'wp_ajax_uc_people_lookup', 'uc_people_lookup_callback' ); +function uc_people_lookup_callback(){ + $query = $_GET['query']; + $type = $_GET['type']; - $userInfo = netid_lookup($query); + $userInfo = uc_people_lookup($query, $type); echo wp_json_encode($userInfo); wp_die(); } -?> +?> \ No newline at end of file