欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

自己亲自写的代码 使用 jamf api 有大用 有大大用 有大大大用 有大大大大用

custom_twenty_three_ise.module

<?php    
function _my_jamf_get_base64_encode()
{
    $name = 'aaaa';
    $pwd = 'bbbb';
    return base64_encode("$name:$pwd");
}
//jamf 网络等级键值对    
function _jamf_level()
{
    return array(
        'aaaaaoffice'=>'XXXXXXfice-Group',
        'aaaaanst'=>'XXXXXXT-Group',
        'aaaaanyb'=>'XXXXXXB-Group',
        'aaaaamst'=>'XXXXXXT-Group',
        'aaaaamyb'=>'XXXXXXB-Group',
        'aaaaatst'=>'XXXXXXT-Group',
        'aaaaatyb'=>'XXXXXXB-Group',
    );
}

   
//静态组以  组id与组名组成的键值对    
function _jamf_static_group()
{
    return array(
        23=>'XXXXXXfice-Group',
        86=>'XXXXXXT-Group',
        87=>'XXXXXXB-Group',
        89=>'XXXXXXT-Group',
        90=>'XXXXXXB-Group',
        301=>'XXXXXXT-Group',
        302=>'XXXXXXB-Group',
    );
}

   
//静态组以  组id与组名组成的键值对的反转    
function _jamf_static_group_flip()
{
    return array_flip(_jamf_static_group());
}

   
//array_flip键值反转 jamf 的 键值等级反转    
function _jamf_level_flip()
{
    return array_flip(_jamf_level());
}

   
function custom_twenty_three_jamf_permission()
{
    return array('operation jamf'=>array(
        'title' => t('operation jamf'),
        'description' => t('operation jamf'),
    )
    );
}

   
function custom_twenty_three_jamf_menu()
{
    $items['query_jamf_by_name'] = array(
        'title' => '根据计算机名查询jamf',
        'page callback' => 'custom_twenty_three_jamf_query_jamf_by_name',
        'access arguments' => array('operation jamf'),
    );
    $items['ajax_update_jamf_name_by_id'] = array(
        'title' => '根据计算机名查询jamf',
        'page callback' => 'custom_twenty_three_jamf_ajax_update_jamf_name_by_id',
        'access arguments' => array('operation jamf'),
    );
    $items['ajax_update_jamf_static_group_by_id'] = array(
        'title' => '根据计算机名查询jamf',
        'page callback' => 'custom_twenty_three_jamf_ajax_update_jamf_static_group_by_id',
        'access arguments' => array('operation jamf'),
    );
    $items['query_modify_jamf_by_mac'] = array(
        'title' => '根据MAC查询更改jamf',
        'page callback' => 'custom_twenty_three_jamf_query_jamf_by_mac',
        'access arguments' => array('operation jamf'),
    );
    return $items;
}



   
//得到 登录 jamf 的 token    
function get_jamf_token(){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://yourServer.jamfcloud.com/uapi/auth/tokens");
    $headers = array('Authorization:Basic ' . _my_jamf_get_base64_encode(), 'Content-Type: application/json');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // to resolve your current error    
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    if (!empty($data_arr)) {
        curl_setopt($ch, CURLOPT_POSTFIELDS, drupal_json_encode($data_arr));
    }
    $response = curl_exec($ch);
    if (curl_error($ch)) {
        $response = curl_error($ch);
    }
    curl_close($ch);
    return $response;
}

   
//根据 $mac 获得静态组信息 (这里的mac为冒号分隔的mac,$token为认证jamf后获取的$token值)    
function _get_groups_account_by_mac_from_jamf($mac,$token,$subset='groups_accounts'){
    $ch = curl_init();
//    curl_setopt($ch, CURLOPT_URL, "https://yourServer.jamfcloud.com/JSSResource/computers/macaddress/${mac}");    
    curl_setopt($ch, CURLOPT_URL, "https://yourServer.jamfcloud.com/JSSResource/computers/macaddress/${mac}/subset/{$subset}");
//    curl_setopt($ch, CURLOPT_URL, "https://yourServer.jamfcloud.com/JSSResource/computers/macaddress/${mac}/subset/General&groups_accounts");    
    $headers = array('Authorization:Bearer ' . $token, 'Content-Type: text/xml;charset=utf-8');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // to resolve your current error    
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    if (!empty($data_arr)) {
        curl_setopt($ch, CURLOPT_POSTFIELDS, drupal_json_encode($data_arr));
    }
    $response = curl_exec($ch);
    if (curl_error($ch)) {
        $response = curl_error($ch);
    }
    curl_close($ch);
    return $response;
}

   
//根据 id 获得静态组信息    
function _get_groups_account_by_id_from_jamf($id,$token,$subset='groups_accounts'){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://yourServer.jamfcloud.com/JSSResource/computers/id/{$id}/subset/{$subset}");
//    curl_setopt($ch, CURLOPT_URL, "https://yourServer.jamfcloud.com/JSSResource/computers/macaddress/${mac}/subset/{$subset}");    
//    curl_setopt($ch, CURLOPT_URL, "https://yourServer.jamfcloud.com/JSSResource/computers/macaddress/${mac}/subset/General&groups_accounts");    
    $headers = array('Authorization:Bearer ' . $token, 'Content-Type: text/xml;charset=utf-8');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // to resolve your current error    
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    if (!empty($data_arr)) {
        curl_setopt($ch, CURLOPT_POSTFIELDS, drupal_json_encode($data_arr));
    }
    $response = curl_exec($ch);
    if (curl_error($ch)) {
        $response = curl_error($ch);
    }
    curl_close($ch);
    return $response;
}


   
//根据 计算机名称 (这里是模糊查询吧)    
function _get_groups_account_by_name_from_jamf($name,$token){
    $ch = curl_init();
//    curl_setopt($ch, CURLOPT_URL, "https://yourServer.jamfcloud.com/JSSResource/computers/macaddress/${mac}");    
    curl_setopt($ch, CURLOPT_URL, "https://yourServer.jamfcloud.com/JSSResource/computers/match/{$name}");
//    curl_setopt($ch, CURLOPT_URL, "https://yourServer.jamfcloud.com/JSSResource/computers/macaddress/${mac}/subset/General&groups_accounts");    
    $headers = array('Authorization:Bearer ' . $token, 'Content-Type: text/xml;charset=utf-8','Accept' => 'application/xml');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // to resolve your current error    
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    if (!empty($data_arr)) {
        curl_setopt($ch, CURLOPT_POSTFIELDS, drupal_json_encode($data_arr));
    }
    $response = curl_exec($ch);
    if (curl_error($ch)) {
        $response = curl_error($ch);
    }
    curl_close($ch);
    return $response;
}


   
//根据 $mac (这里的mac为冒号分隔的mac,$token为认证jamf后获取的$token值)    
function _update_groups_account_by_id_from_jamf($id,$token,$data){
    $ch = curl_init();
//    curl_setopt($ch, CURLOPT_URL, "https://yourServer.jamfcloud.com/JSSResource/computers/macaddress/${mac}");    
    curl_setopt($ch, CURLOPT_URL, "https://yourServer.jamfcloud.com/JSSResource/computers/id/{$id}");
//    curl_setopt($ch, CURLOPT_URL, "https://yourServer.jamfcloud.com/uapi/computers/${mac}");    
//    curl_setopt($ch, CURLOPT_URL, "https://yourServer.jamfcloud.com/JSSResource/computers/macaddress/${mac}/subset/General&groups_accounts");    
    $headers = array('Authorization:Bearer ' . $token, 'Content-Type: application/xml;charset=utf-8','Content-Length: ' . strlen($data),'Accept' => 'application/xml');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // to resolve your current error    
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
//    curl_setopt($ch, CURLOPT_PUT, 1);//加上这行 好像有报错,    
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

   
    if (!empty($data_arr)) {
        curl_setopt($ch, CURLOPT_POSTFIELDS, drupal_json_encode($data_arr));
    }
    $response = curl_exec($ch);
    if (curl_error($ch)) {
        $response = curl_error($ch);
    }
    curl_close($ch);
    return $response;
}

   
//从 计算机组中增加或删除一台计算机,不使用 update 来更新    
function _add_delete_a_computer_from_groups_from_jamf($group_id,$token,$data){
    $ch = curl_init();
//    curl_setopt($ch, CURLOPT_URL, "https://yourServer.jamfcloud.com/JSSResource/computers/macaddress/${mac}");    
//    curl_setopt($ch, CURLOPT_URL, "https://yourServer.jamfcloud.com/JSSResource/computers/id/272");    
//    curl_setopt($ch, CURLOPT_URL, "https://yourServer.jamfcloud.com/uapi/computers/${mac}");    
//    curl_setopt($ch, CURLOPT_URL, "https://yourServer.jamfcloud.com/JSSResource/computers/macaddress/${mac}/subset/General&groups_accounts");    
    curl_setopt($ch, CURLOPT_URL, "https://yourServer.jamfcloud.com/JSSResource/computergroups/id/{$group_id}");
    $headers = array('Authorization:Bearer ' . $token, 'Content-Type: application/xml;charset=utf-8','Accept' => 'application/xml');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // to resolve your current error    
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
//    curl_setopt($ch, CURLOPT_PUT, 1);//加上这行 好像有报错,    
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

   
    if (!empty($data_arr)) {
        curl_setopt($ch, CURLOPT_POSTFIELDS, drupal_json_encode($data_arr));
    }
    $response = curl_exec($ch);
    if (curl_error($ch)) {
        $response = curl_error($ch);
    }
    curl_close($ch);
    return $response;
}

   
//这里得到的键值对类似于 array('JS-MAC-Office-Group'=>'js_office')    array('JS-MAC-NST-Group'=>'js_nst')    
//有可能获取两个静态分组,,,比如  array('JS-MAC-Office-Group'=>'js_office','JS-MAC-NST-Group'=>'js_nst'),,,在我们的思路中,就是错误的了    
function _get_jamf_level($groups_account_arr)
{
    $all_jamf_levels = _jamf_level();
    $all_jamf_levels_flip = _jamf_level_flip();
    $curren_devel_level =  array();
    foreach($groups_account_arr as $key=>$value)
    {
        if(in_array($value,$all_jamf_levels)){
            $curren_devel_level[$value] = $all_jamf_levels_flip[$value];
        }
    }
    return $curren_devel_level;
}

   
function js_jamf_form()
{
    $form['mac'] = array(
        '#type' => 'textfield',
        '#title' => t('mac地址:'),
        '#size' => 30,
        '#default_value' =>!empty($_GET['mac'])?_removeCnEnSpace($_GET['mac']):'' ,
    );
    $all_jamf_static_groups = _jamf_level();
//    $all_jamf_static_groups =  array_values($all_jamf_static_groups);// 让键全部变成数字,,,,,   这里不执行这一行吧    
    $all_jamf_static_groups  = array(-1=>'请选择',)+ $all_jamf_static_groups;
    $form['group'] = array(
        '#type' => 'select',
        '#options' => $all_jamf_static_groups,
//        '#default_value' => !empty($_GET['group'])?$_GET['group']:''    
        '#default_value' => '',
        '#description' => '请选择,更改时,其实jamf中删除原静态分组'    
    );
    $form['diqu'] = array('#type' => 'hidden', '#value' => _my_node_jses_terminal_manager_diqu());
    $form['#method'] = 'get';
    $form['#action'] = '/query_modify_jamf_by_mac';
    //提交按钮  //    
    $form['submit'] = array('#type' => 'submit', '#value' => t('查询'));
    $form['submit1'] = array('#type' => 'submit', '#value' => t('更改'));
    $form['#attributes']['class']  =  'js_ise_form_class js_jamf_form_class';
//    $e = kprint_r($form,TRUE);    
//    print $e;    
    return $form;
}
function js_jamf_modify_name_form($form,&$form_state,$a_computer_info)
{
    if(!empty($_POST['name'])){
        $name_default_value = _removeCnEnSpace($_POST['name']);
    }else if(!empty($a_computer_info['computer_name'])){
        $name_default_value = _removeCnEnSpace($a_computer_info['computer_name']);
    }
    $form['id'] = array('#type' => 'hidden', '#value' => $a_computer_info['computer_id']);
    $form['name'] = array(
        '#type' => 'textfield',
        '#title' => t('计算机名称:'),
        '#size' => 30,
        '#required' => TRUE,
        '#default_value' =>$name_default_value,
    );

   
    $form['submit'] = array('#type' => 'submit', '#value' => t('改名'));
    $form['#attributes']['class']  =  'js_ise_form_class';
//    $e = kprint_r($form,TRUE);    
//    print $e;    
    return $form;
}
function js_jamf_modify_name_form_validate($form, &$form_state)
{
    //计算机名称    
    $name = _removeCnEnSpace($form_state['values']['name']);
    $id = _removeCnEnSpace($form_state['values']['id']);
    $data = "<computer><general>    
<name>{$name}</name>    
</general></computer>";
    $token_expires = get_jamf_token();
    $token_expires = json_decode($token_expires,true);
    $token = $token_expires['token'];
    $a_computer_info_xml_from_jamf = _get_groups_account_by_id_from_jamf($id,$token,'General');
    $a_computer_info = _get_a_computer_info_from_jamf_xml($a_computer_info_xml_from_jamf);
    $response = _update_groups_account_by_id_from_jamf($id,$token,$data);
    $xml = simplexml_load_string($response); //是个xml的内容    
    $arr = json_decode(json_encode($xml), true);
    $computer_id = $arr['id'];
    if(!empty($computer_id)){
        drupal_set_message("计算机名称已由 {$a_computer_info['computer_name']} 更改为 {$name}");
    }
}

   
function _get_a_computer_info_from_jamf_xml($a_computer_info_xml_from_jamf)
{
    $xml = simplexml_load_string($a_computer_info_xml_from_jamf); //是个xml的内容    
    $computer_id = $xml->general->id;
    $computer_id = _object_to_array($computer_id);
    $computer_id = implode(",",$computer_id);
//        var_dump($computer_id);    

   
    $computer_name = $xml->general->name;
    $computer_name = _object_to_array($computer_name);
    $computer_name = implode(",",$computer_name);
//        var_dump($computer_name);    
    $groups_account = $xml->groups_accounts->computer_group_memberships->group;//得到的是所有组(包括静态组)的信息    
    $groups_account = _object_to_array($groups_account);// $groups_account结果是所有的组(包括智能组和静态组)大约 类似于array('All Managed Clients','FileVault 2 is Eligibility','10.14+','All Managed Clients - JS','管理员权限查询','JS SITE','11 之前设备','Name','JS-MAC-NST-Group')    

   
    $groups_static_key_is_value = _get_jamf_level($groups_account);//此时 $groups_static_key_is_value 结果大约 类似于 array('JS-MAC-Office-Group'=>'js_office')或 array('JS-MAC-NST-Group'=>'js_nst') 或 array('JS-MAC-Office-Group'=>'js_office','JS-MAC-NST-Group'=>'js_nst','error'=>"在jamf中,这个电脑有两个静态组")    
   // unset($groups_static_key_is_value['error']);//移除 其中的 error 键 ,error 键 可以见 _get_jamf_level()函数    
    $groups_static = $groups_static_tag_is_value = array_flip($groups_static_key_is_value); // $groups_static_tag_is_value 结果大约 类似于 array('js_office'=>'JS-MAC-Office-Group'    array('js_nst'=>'JS-MAC-NST-Group')    
    $groups_static_str = implode(',',$groups_static_tag_is_value);
//        var_dump($groups_static_str);    
    $have_jamf_result =  true;
    return compact('computer_id','computer_name','groups_static_key_is_value','groups_static_tag_is_value','groups_static','groups_static_str','have_jamf_result');
}
function custom_twenty_three_jamf_query_jamf_by_mac()
{
    $form = drupal_get_form('js_jamf_form');
    $mac = $_GET['mac'];
    if(!empty($_GET['op']) && empty($_GET['mac'])){
        drupal_set_message('无线mac地址不能为空','warning');
        return $form;
    }
    $mac = _isMacAddressOrEmtpy($mac,':');
    if (!$mac) {
        drupal_set_message('无线mac地址错误','warning');
        return $form;
    } else {
        $mac = strtoupper($mac);
    }

   
    if($_GET['op'] == '查询' ) {
        $token_expires = get_jamf_token();
        $token_expires = json_decode($token_expires,true);
        $token = $token_expires['token'];
        $a_computer_info_xml_from_jamf = _get_groups_account_by_mac_from_jamf($mac,$token,'General&groups_accounts');
        $a_computer_info = _get_a_computer_info_from_jamf_xml($a_computer_info_xml_from_jamf);
        $groups_static = $a_computer_info['groups_static'];//$groups_static结果大约 类似于 array('js_office'=>'JS-MAC-Office-Group'    array('js_nst'=>'JS-MAC-NST-Group')    
        if(!empty($groups_static) && count($groups_static)>1){ //这个mac 在jamf 中有两个或两个以上的分组    
            drupal_set_message("有两个jamf静态组 <span style='color:red;'>{$a_computer_info['groups_static_str']}</span>, 请到 <a href='https://yourServer.jamfcloud.com' target='_blank'> jamf 网站   </a> 查看并修改",'warning');//此时就不更改静态组了吧    
        }
    }
    else if($_GET['op'] == '更改'  && empty($_POST) ){


   
        $token_expires = get_jamf_token();
        $token_expires = json_decode($token_expires,true);
        $token = $token_expires['token'];
        $a_computer_info_xml_from_jamf = _get_groups_account_by_mac_from_jamf($mac,$token,'General&groups_accounts');
        $a_computer_info_old = $a_computer_info = _get_a_computer_info_from_jamf_xml($a_computer_info_xml_from_jamf);

   
        $groups_static = $a_computer_info['groups_static'];//$groups_static结果大约 类似于 array('js_office'=>'JS-MAC-Office-Group'    array('js_nst'=>'JS-MAC-NST-Group')    
        if(!empty($groups_static) && count($groups_static)>1){ //这个mac 在jamf 中有两个或两个以上的分组    
            $groups_static_str = implode(',',array_flip($groups_static));//array_flip($groups_static))的结果类似于 array('js_office'=>'JS-MAC-Office-Group')    array('js_nst'=>'JS-MAC-NST-Group')    
            drupal_set_message("本来有两个jamf静态组 <span style='color:red;'>{$a_computer_info['groups_static_str']}</span>",'warning');//此时就不更改静态组了吧    
        }
        else if(empty($groups_static)) {
            drupal_set_message("在jamf中 <span style='color:red;'>没有静态分组</span>");
        }
          $group = $_GET['group'];
          $to_group_static = _jamf_level()[$group]; //将要改的静态组,,,$to_group_static  的值就是 JS-MAC-Office-Group JS-MAC-NST-Group 等等    
          foreach($groups_static as $key=>$from_group_static) // $from_group_static 的值为 'JS-MAC-Office-Group' 或 'JS-MAC-NST-Group',是单个值    
          {
              $delete_xml_data = "<computer_group>    
                        <computer_deletions>    
                        <computer><id>{$a_computer_info['computer_id']}</id></computer>    
                        </computer_deletions>    
                        </computer_group>";
              $old_group_id = _jamf_static_group_flip()[$from_group_static];
              $response = _add_delete_a_computer_from_groups_from_jamf($old_group_id,$token,$delete_xml_data);//这里是从静态组中删除一个计算机    
          }
            if(!empty($to_group_static)){//假到 要改的静态组不为空时,才在 要改的静态组里 增加这个 计算机    
                $add_xml_data = "<computer_group>    
                            <computer_additions>    
                            <computer><id>{$a_computer_info['computer_id']}</id></computer>    
                            </computer_additions>    
                </computer_group>";
                $new_group_id =  _jamf_static_group_flip()[$to_group_static];
                $response = _add_delete_a_computer_from_groups_from_jamf($new_group_id,$token,$add_xml_data);//这里是从静态组中增加一个计算机    
            }

   
            $a_computer_info_xml_from_jamf = _get_groups_account_by_id_from_jamf($a_computer_info['computer_id'],$token,'General&groups_accounts');
            $a_computer_info_new = $a_computer_info = _get_a_computer_info_from_jamf_xml($a_computer_info_xml_from_jamf);
            drupal_set_message("静态组已由 {$a_computer_info_old['groups_static_str']} 改成  {$a_computer_info_new['groups_static_str']}");
    }

   
    if(!empty($a_computer_info['groups_static_key_is_value']) && count($a_computer_info['groups_static_key_is_value'])>1){
        $a_computer_info['groups_static_str'] = "<span style='color:#f00'>{$a_computer_info['groups_static_str']}</span>";
    }
    $output = array(
        'first_para' => $form,
        'second_para' =>$a_computer_info['have_jamf_result']?array(
            '#type' => 'markup',
            '#markup' => empty($a_computer_info['computer_id'])?'无结果':"<table style='width: auto;'><tr><td>id:  {$a_computer_info['computer_id']} </td><td>mac: {$mac} </td><td>计算机名称:  {$a_computer_info['computer_name']} </td><td>静态组:  {$a_computer_info['groups_static_str']} </td></tr></table>",
        ):array(),
        'third_para' =>!empty($a_computer_info['computer_id'])?drupal_get_form('js_jamf_modify_name_form',$a_computer_info):''    
    );
    return $output;
}
function js_jamf_search_name_form($form,&$form_state,$a_computer_info)
{

   
    $form['name'] = array(
        '#type' => 'textfield',
        '#title' => t('计算机名称:'),
        '#size' => 30,
        '#required' => TRUE,
        '#default_value' =>!empty($_GET['name'])?_removeCnEnSpace($_GET['name']):'' ,
    );
    $form['#method'] = 'get';
    $form['submit'] = array('#type' => 'submit', '#value' => t('查找'));
    $form['#attributes']['class']  =  'js_ise_form_class';
//    $e = kprint_r($form,TRUE);    
//    print $e;    
    return $form;
}

   
function custom_twenty_three_jamf_ajax_update_jamf_name_by_id()
{
    $name =  _removeCnEnSpace($_POST['name']);
    $id =  _removeCnEnSpace($_POST['id']);
    //修改计算机名称    
    $data = "<computer><general>    
<name>{$name}</name>    
</general></computer>";

   
    $token_expires = get_jamf_token();
    $token_expires = json_decode($token_expires,true);
    $token = $token_expires['token'];
    $a_computer_info_xml_from_jamf = _get_groups_account_by_id_from_jamf($id,$token,'General');
    $a_computer_info = _get_a_computer_info_from_jamf_xml($a_computer_info_xml_from_jamf);
    $response = _update_groups_account_by_id_from_jamf($id,$token,$data);
    $xml = simplexml_load_string($response); //是个xml的内容    
    $arr = json_decode(json_encode($xml), true);
    $computer_id = $arr['id'];
    if(!empty($computer_id)){
    drupal_json_output(array("status"=>'ok',"data"=>"计算机名称已由 {$a_computer_info['computer_name']} 更改为 {$name}"));
}else{
    drupal_json_output(array("status"=>'error'));
}
    exit;



   
}

   
//此时 $groups_static_key_is_value 结果大约 类似于 array('JS-MAC-Office-Group'=>'js_office')或    
// array('JS-MAC-NST-Group'=>'js_nst') 或 array('JS-MAC-Office-Group'=>'js_office','JS-MAC-NST-Group'=>'js_nst','error'=>"在jamf中,这个电脑有两个静态组")    
function _get_stetic_group_select($groups_static_key_is_value)
{
    $select_str = "<select name='group' class='jamf_static_group_select'>";
    $select_str .= "<option value='-1'>请选择</option>";
    $all_jamf_static_groups = _jamf_level();
    foreach($all_jamf_static_groups as $key=>$value){
        $bool_select = false;
        foreach($groups_static_key_is_value as $second_value){
            if($key == $second_value){
                $bool_select = true;
            }
        }
        if($bool_select){
            $select_str .= "<option value='{$key}' selected>{$value}</option>";
         }
         else{
             $select_str .= "<option value='{$key}' >{$value}</option>";
         }
    }

   
    $select_str .= "</select>";
    return $select_str;
}
function custom_twenty_three_jamf_ajax_update_jamf_static_group_by_id()
{
    $group =  _removeCnEnSpace($_POST['group']);
    $id =  _removeCnEnSpace($_POST['id']);
    $token_expires = get_jamf_token();
    $token_expires = json_decode($token_expires,true);
    $token = $token_expires['token'];
    $a_computer_info_xml_from_jamf = _get_groups_account_by_id_from_jamf($id,$token,'groups_accounts');
    $a_computer_info_old = $a_computer_info = _get_a_computer_info_from_jamf_xml($a_computer_info_xml_from_jamf);
    $groups_static = $a_computer_info['groups_static'];//$groups_static结果大约 类似于 array('js_office'=>'JS-MAC-Office-Group'    array('js_nst'=>'JS-MAC-NST-Group')    
    $to_group_static = _jamf_level()[$group]; //将要改的静态组,,,$to_group_static  的值就是 JS-MAC-Office-Group JS-MAC-NST-Group 等等    
    foreach($groups_static as $key=>$from_group_static) // $from_group_static 的值为 'JS-MAC-Office-Group' 或 'JS-MAC-NST-Group',是单个值    
    {
        $delete_xml_data = "<computer_group>    
                        <computer_deletions>    
                        <computer><id>{$id}</id></computer>    
                        </computer_deletions>    
                        </computer_group>";
        $old_group_id = _jamf_static_group_flip()[$from_group_static];
        $response = _add_delete_a_computer_from_groups_from_jamf($old_group_id,$token,$delete_xml_data);//这里是从静态组中删除一个计算机    
    }
    if(!empty($to_group_static)){//假到 要改的静态组不为空时,才在 要改的静态组里 增加这个 计算机    
        $add_xml_data = "<computer_group>    
                            <computer_additions>    
                            <computer><id>{$id}</id></computer>    
                            </computer_additions>    
                </computer_group>";
        $new_group_id =  _jamf_static_group_flip()[$to_group_static];
        $response = _add_delete_a_computer_from_groups_from_jamf($new_group_id,$token,$add_xml_data);//这里是从静态组中增加一个计算机    
    }
    $a_computer_info_xml_from_jamf = _get_groups_account_by_id_from_jamf($id,$token,'General&groups_accounts');
    $a_computer_info_new = $a_computer_info = _get_a_computer_info_from_jamf_xml($a_computer_info_xml_from_jamf);
    if(!empty($a_computer_info_new['computer_id'])){
        drupal_json_output(array("status"=>'ok','data'=>"静态组已由 {$a_computer_info_old['groups_static_str']} 改成  {$a_computer_info_new['groups_static_str']}"));
    }else{
        drupal_json_output(array("status"=>'error'));
    }
    exit;

   
}

   
function custom_twenty_three_jamf_query_jamf_by_name()
{

   
    $form = drupal_get_form('js_jamf_search_name_form');
    $name = $_GET['name'];
    if(!empty($_GET['op']) && empty(_removeCnEnSpace($name))){
        drupal_set_message('计算机名称不能为空!','warning');
        return $form;
    }


   
    if(!empty($_GET['op']) && $_GET['op'] == '查找') {
        $token_expires = get_jamf_token();
        $token_expires = json_decode($token_expires, true);
        $token = $token_expires['token'];

   
        $name = "*" . $name . "*";
        $computers_xml_from_jamf = _get_groups_account_by_name_from_jamf($name, $token);
        $xml = simplexml_load_string($computers_xml_from_jamf); //是个xml的内容    
        $arr = json_decode(json_encode($xml), true);

   
        $output_table = '<table>';

   
        $output_table .= '<tr><td>id</td><td>name</td><td>mac 地址</td><td>第二 mac 地址</td><td>静态组</td><td>更新静态组</td></tr>';
//        $output_table .= '<tr><td>id</td><td>name</td><td>mac 地址</td><td>第二 mac 地址</td><td>更新静态组</td></tr>';    
        $computers = $arr['computer'];
        foreach($computers as $key=>$row)
        {
            $id = $row['id'];
            $a_computer_info_xml_from_jamf = _get_groups_account_by_id_from_jamf($id,$token,'groups_accounts');
            $a_computer_info = _get_a_computer_info_from_jamf_xml($a_computer_info_xml_from_jamf);
            $row['groups_static_str'] = $a_computer_info['groups_static_str'];
            if(!empty($a_computer_info['groups_static_key_is_value']) && count($a_computer_info['groups_static_key_is_value'])>1){
                $row['groups_static_str'] = "<span style='color:#f00'>{$a_computer_info['groups_static_str']}</span>";
             }
            $row['groups_static_str_select'] = _get_stetic_group_select($a_computer_info['groups_static_key_is_value']);

   
            $computers[$key] = $row;
        }

   
        foreach ($computers as $key => $row) {
            $output_table .= '<tr>';
            $output_table .= "<td>{$row['id']}</td><td><div class='jamf_name_outer'><input attr_id='{$row['id']}'  class='jamf_name_text' type='text' value='{$row['name']}'/> <button type='button' class='jamf_name_button'>更改</button><span class='jamf_name_hidden'></span></div></td><td>{$row['mac_address']}</td><td>{$row['alt_mac_address']}</td><td>{$row['groups_static_str']}</td><td>{$row['groups_static_str_select']}<span attr_id='{$row['id']}' class='jamf_static_group_hidden'></span></td>";
//            $output_table .= "<td>{$row['id']}</td><td><div class='jamf_name_outer'><input attr_id='{$row['id']}'  class='jamf_name_text' type='text' value='{$row['name']}'/> <button type='button' class='jamf_name_button'>更改</button><span class='jamf_name_hidden'></span></div></td><td>{$row['mac_address']}</td><td>{$row['alt_mac_address']}</td><td>{$row['groups_static_str_select']}</td>";    
            $output_table .= '</tr>';
        }
        $output_table .= '</table>';

   
        $output = array(
            'first_para' => $form,
            'second_para' => array(
                '#type' => 'markup',
                '#markup' => $output_table    
            ),
        );
        return $output;
    }

   
    return $form;


   
}


普通分类: