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

\app\Config\bootstrap.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


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

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.