Sharepoint 2013 からCakePHPでデータを取得する



\app\Config\bootstrap.php

```php
    define('SHAREPOINT_USER', 'USER');
    define('SHAREPOINT_PASS', 'PASSWORD);
    
    define('SHAREPOINT_TABLE', 'XXXリスト');      
    define('SHAREPOINT_WSDL', 'http://servername/sitename/listname/_vti_bin/Lists.asmx?WSDL');
    define('SHAREPOINT_VIEW_GUID', '{9496E6ED-C0B3-47C5-AF2C-E0C13CBCEF77}');//GUID
```


Controller

```php:Sharepoint2MySQLController
<?php
App::import('Lib', 'SharepointLib');

/**
 * シェアポイントからデータを取得する
 */
class Sharepoint2MySQLController extends AppController {
    public function getCompanyList(){
        $this->autoRender = false;

		//Sharepointからデータをロードする
		$PartnerList = SharepointLib::getList();
        //print_r($PartnerList);
        
        if (count($PartnerList) == 0){
            SharepointErrorReport::Send_Sharepoint2SqlserverErrorReport();
            return;
        }
        
    }
}

```

Lib

```php
<?php

App::import('Lib', 'SharePointAPI\SharePointAPI');

class SharepointLib
{

    
	//部課チーム情報取得
	public static function getList(){
		$NTLM = true;

        try {
            //シェアポイントからデータを取得する
            $sp = new SharePointAPI(SHAREPOINT_USER, SHAREPOINT_PASS, SHAREPOINT_WSDL, $NTLM);
            $PartnerList = $sp->read(SHAREPOINT_TABLE, null, null, SHAREPOINT_VIEW_GUID); 
            //pr($PartnerList);
        } catch (Exception $e) {
			return array();
		}
        
        //リストの取得に失敗したら空の配列を返す
        if (isset($PartnerList['warning'])) return array();

        //Sharepoint情報のメールアドレスをパースする。
        $ret = self::perse_sharepoint_data($PartnerList);
                
		return $ret;
	}

    
    //Sharepoint情報をパースする。
	private static function perse_sharepoint_data($PartnerList)
	{  
        //pr($PartnerList);
        
        foreach($PartnerList as &$partner){ //$partnerのデータを上書きできるように & を付ける
        	//pr($partner);

            //ユーザー情報をパースする。「;#」で分割し、[id]と[name]に格納する。 
            $userName = $partner[SHAREPOINT_TABLE_COLUMN_PERSON_NAME];
            
            //メールアドレス情報をパースする。「;#」で分割し、[id]と[name]に格納する。 
            $mailAddress = $partner[SHAREPOINT_TABLE_COLUMN_MAILADDRESS_x003a_mail_x30a2__x3];
            //pr($mailAddress);

            $userString = 'name';
            $personList = self::perse_person($userName, 'id', $userString);
            $mailAdressList = self::perse_person($mailAddress, 'id', SHAREPOINT_TABLE_MAIL_ADDRESS);
            //pr($mailAdressList);
            //pr($personList);

            if (count($personList) < 1) continue;
            if (count($mailAdressList) < 1) continue;

            //ユーザー番号からメールアドレスと氏名を結合する。
            foreach($mailAdressList as &$mail){
                $id = $mail['id'];
                if (isset($personList[$id])) $user = $personList[$id];
                if (isset($user[$userString])) $mail['Name'] = $user[$userString];
                //pr($person);
            }

            //新しい連想配列に作成したメールアドレス情報をセットする。
            $partner[SHAREPOINT_TABLE_MAIL_ADDRESS_LIST] = $mailAdressList;
        }
        
        //pr($PartnerList);
        return $PartnerList;
    }
    
    
    
    //配列をパースする。
    //$userNameが空の場合は、array()を返す
    //85;#aaaa;#78;#bbbb;#74;#cccc 
    //  ↓に変換
    //  Array(
    //    [85] => Array
    //        (
    //            [id] => 85
    //            [name] => aaaa
    //        )
    //
    //    [78] => Array
    //        (
    //            [id] => 78
    //            [name] => bbbb
    //        )
    //
    //    [74] => Array
    //        (
    //            [id] => 74
    //            [name] => cccc
    //        )
    //      )
	private static function perse_person($userName, $keyString, $valueString)
	{  
        $persons = array();
        $user = explode(";#", $userName );
        if (count($user) <= 1) return$persons;

        for($i=0; $i < count($user); $i += 2)
        {
        	//pr($user);
            $person = array();
            $person[$keyString] = trim($user[$i]);
            $person[$valueString] = trim($user[$i+1]);
            $persons[$person[$keyString]] = $person;
        }
        
        //pr($persons);
        return $persons;
    }
}
```





[thybag/PHP-SharePoint-Lists-API: A simple PHP API to make working with SharePoint lists easy.](https://github.com/thybag/PHP-SharePoint-Lists-API)