示例#1
0
function HandleSearch($backend, $devid, $protocolversion)
{
    global $zpushdtd;
    global $input, $output;
    global $auth_user, $auth_domain, $auth_pw;
    $decoder = new WBXMLDecoder($input, $zpushdtd);
    $encoder = new WBXMLEncoder($output, $zpushdtd);
    if (!$decoder->getElementStartTag(SYNC_SEARCH_SEARCH)) {
        return false;
    }
    if (!$decoder->getElementStartTag(SYNC_SEARCH_STORE)) {
        return false;
    }
    if (!$decoder->getElementStartTag(SYNC_SEARCH_NAME)) {
        return false;
    }
    $searchname = $decoder->getElementContent();
    if (!$decoder->getElementEndTag()) {
        return false;
    }
    if (!$decoder->getElementStartTag(SYNC_SEARCH_QUERY)) {
        return false;
    }
    //START CHANGED dw2412 V12.0 Support
    switch (strtolower($searchname)) {
        case 'documentlibrary':
            $searchquery['query'] = ParseQuery($decoder);
            break;
        case 'mailbox':
            $searchquery['query'] = ParseQuery($decoder);
            break;
        case 'gal':
            $searchquery['query'] = $decoder->getElementContent();
            break;
    }
    if (!$decoder->getElementEndTag()) {
        return false;
    }
    if ($decoder->getElementStartTag(SYNC_SEARCH_OPTIONS)) {
        $searchquerydeeptraversal = false;
        $searchqueryrebuildresults = false;
        $searchschema = false;
        $rightsmanagementsupport = false;
        $mimesupport = 0;
        while (($searchoptionstag = $decoder->getElementStartTag(SYNC_SEARCH_RANGE) ? SYNC_SEARCH_RANGE : ($decoder->getElementStartTag(SYNC_SEARCH_DEEPTRAVERSAL) ? SYNC_SEARCH_DEEPTRAVERSAL : ($decoder->getElementStartTag(SYNC_SEARCH_REBUILDRESULTS) ? SYNC_SEARCH_REBUILDRESULTS : ($decoder->getElementStartTag(SYNC_SEARCH_USERNAME) ? SYNC_SEARCH_USERNAME : ($decoder->getElementStartTag(SYNC_SEARCH_PASSWORD) ? SYNC_SEARCH_PASSWORD : ($decoder->getElementStartTag(SYNC_SEARCH_SCHEMA) ? SYNC_SEARCH_SCHEMA : ($decoder->getElementStartTag(SYNC_SEARCH_PICTURE) ? SYNC_SEARCH_PICTURE : ($decoder->getElementStartTag(SYNC_MIMESUPPORT) ? SYNC_MIMESUPPORT : ($decoder->getElementStartTag(SYNC_MIMETRUNCATION) ? SYNC_MIMETRUNCATION : ($decoder->getElementStartTag(SYNC_AIRSYNCBASE_BODYPREFERENCE) ? SYNC_AIRSYNCBASE_BODYPREFERENCE : ($decoder->getElementStartTag(SYNC_RIGHTSMANAGEMENT_RIGHTSMANAGEMENTSUPPORT) ? SYNC_RIGHTSMANAGEMENT_RIGHTSMANAGEMENTSUPPORT : -1))))))))))) != -1) {
            switch ($searchoptionstag) {
                case SYNC_SEARCH_RANGE:
                    if ($searchrange = $decoder->getElementContent()) {
                        if (!$decoder->getElementEndTag()) {
                            return false;
                        }
                    }
                    break;
                    //START ADDED dw2412 V12.0 Support
                //START ADDED dw2412 V12.0 Support
                case SYNC_SEARCH_DEEPTRAVERSAL:
                    if (!($searchdeeptraversal = $decoder->getElementContent())) {
                        $searchquerydeeptraversal = true;
                    } else {
                        if (!$decoder->getElementEndTag()) {
                            return false;
                        }
                    }
                    break;
                case SYNC_SEARCH_REBUILDRESULTS:
                    if (!($searchrebuildresults = $decoder->getElementContent())) {
                        $searchqueryrebuildresults = true;
                    } else {
                        if (!$decoder->getElementEndTag()) {
                            return false;
                        }
                    }
                    break;
                case SYNC_SEARCH_USERNAME:
                    if (!($searchqueryusername = $decoder->getElementContent())) {
                        return false;
                    } else {
                        if (!$decoder->getElementEndTag()) {
                            return false;
                        }
                    }
                    break;
                case SYNC_SEARCH_PASSWORD:
                    if (!($searchquerypassword = $decoder->getElementContent())) {
                        return false;
                    } else {
                        if (!$decoder->getElementEndTag()) {
                            return false;
                        }
                    }
                    break;
                case SYNC_SEARCH_SCHEMA:
                    if (!($searchschema = $decoder->getElementContent())) {
                        $searchschema = true;
                    } else {
                        if (!$decoder->getElementEndTag()) {
                            return false;
                        }
                    }
                    break;
                case SYNC_MIMESUPPORT:
                    $mimesupport = $decoder->getElementContent();
                    if (!$decoder->getElementEndTag()) {
                        return false;
                    }
                    break;
                case SYNC_MIMETRUNCATION:
                    $mimetruncation = $decoder->getElementContent();
                    if (!$decoder->getElementEndTag()) {
                        return false;
                    }
                    break;
                case SYNC_AIRSYNCBASE_BODYPREFERENCE:
                    $bodypreference = array();
                    while (($bodypreferencefield = $decoder->getElementStartTag(SYNC_AIRSYNCBASE_TYPE) ? SYNC_AIRSYNCBASE_TYPE : ($decoder->getElementStartTag(SYNC_AIRSYNCBASE_TRUNCATIONSIZE) ? SYNC_AIRSYNCBASE_TRUNCATIONSIZE : ($decoder->getElementStartTag(SYNC_AIRSYNCBASE_PREVIEW) ? SYNC_AIRSYNCBASE_PREVIEW : ($decoder->getElementStartTag(SYNC_AIRSYNCBASE_ALLORNONE) ? SYNC_AIRSYNCBASE_ALLORNONE : -1)))) != -1) {
                        switch ($bodypreferencefield) {
                            case SYNC_AIRSYNCBASE_TYPE:
                                $bodypreference["Type"] = $decoder->getElementContent();
                                if (!$decoder->getElementEndTag()) {
                                    return false;
                                }
                                break;
                            case SYNC_AIRSYNCBASE_TRUNCATIONSIZE:
                                $bodypreference["TruncationSize"] = $decoder->getElementContent();
                                if (!$decoder->getElementEndTag()) {
                                    return false;
                                }
                                break;
                            case SYNC_AIRSYNCBASE_PREVIEW:
                                $bodypreference["Preview"] = $decoder->getElementContent();
                                if (!$decoder->getElementEndTag()) {
                                    return false;
                                }
                                break;
                            case SYNC_AIRSYNCBASE_ALLORNONE:
                                $bodypreference["AllOrNone"] = $decoder->getElementContent();
                                if (!$decoder->getElementEndTag()) {
                                    return false;
                                }
                                break;
                        }
                        if (isset($bodypreference["Type"])) {
                            $searchbodypreference[$bodypreference["Type"]] = $bodypreference;
                        }
                    }
                    $decoder->getElementEndTag();
                    break;
                case SYNC_SEARCH_PICTURE:
                    $searchpicture = array();
                    while (($searchpicturefield = $decoder->getElementStartTag(SYNC_SEARCH_MAXSIZE) ? SYNC_SEARCH_MAXSIZE : ($decoder->getElementStartTag(SYNC_SEARCH_MAXPICTURES) ? SYNC_SEARCH_MAXPICTURES : -1)) != -1) {
                        switch ($searchpicturefield) {
                            case SYNC_SEARCH_MAXSIZE:
                                $searchpicture["MaxSize"] = $decoder->getElementContent();
                                if (!$decoder->getElementEndTag()) {
                                    return false;
                                }
                                break;
                            case SYNC_SEARCH_MAXPICTURES:
                                $searchpicture["MaxPictures"] = $decoder->getElementContent();
                                if (!$decoder->getElementEndTag()) {
                                    return false;
                                }
                                break;
                        }
                    }
                    if (count($searchpicture) > 0) {
                        $decoder->getElementEndTag();
                    }
                    break;
                case SYNC_RIGHTSMANAGEMENT_RIGHTSMANAGEMENTSUPPORT:
                    $rightsmanagementsupport = $decoder->getElementContent();
                    if (!$decoder->getElementEndTag()) {
                        return false;
                    }
                    break;
            }
            //END ADDED dw2412 V12.0 Support
        }
        if (!$decoder->getElementEndTag()) {
            //options
            return false;
        }
    }
    if (!$decoder->getElementEndTag()) {
        //store
        return false;
    }
    if (!$decoder->getElementEndTag()) {
        //search
        return false;
    }
    //START CHANGED dw2412 V12.0 Support
    switch (strtolower($searchname)) {
        case 'documentlibrary':
            if (isset($searchqueryusername)) {
                if (strpos($searchqueryusername, "\\")) {
                    list($searchquery['username']['domain'], $searchquery['username']['username']) = explode("\\", $searchqueryusername);
                } else {
                    $searchquery['username'] = array('domain' => "", 'username' => $searchqueryusername);
                }
            } else {
                $searchquery['username']['domain'] = $auth_domain;
                $searchquery['username']['username'] = $auth_user;
            }
            $searchquery['password'] = isset($searchquerypassword) ? $searchquerypassword : $auth_pw;
            $searchquery['range'] = $searchrange;
            break;
        case 'mailbox':
            $searchquery['rebuildresults'] = $searchqueryrebuildresults;
            $searchquery['deeptraversal'] = $searchquerydeeptraversal;
            $searchquery['range'] = $searchrange;
            break;
        case 'gal':
            $searchquery['range'] = $searchrange;
            if (isset($searchpicture)) {
                $searchquery['searchpicture'] = $searchpicture;
            }
            break;
    }
    //get search results from backend
    $result = $backend->getSearchResults($searchquery, $searchname);
    //END CHANGED dw2412 V12.0 Support
    $encoder->startWBXML();
    // START ADDED dw2412 Protocol Version 12 Support
    if (isset($searchbodypreference)) {
        $encoder->_bodypreference = $searchbodypreference;
    }
    // END ADDED dw2412 Protocol Version 12 Support
    $encoder->startTag(SYNC_SEARCH_SEARCH);
    $encoder->startTag(SYNC_SEARCH_STATUS);
    $encoder->content($result['global_search_status']);
    $encoder->endTag();
    $encoder->startTag(SYNC_SEARCH_RESPONSE);
    $encoder->startTag(SYNC_SEARCH_STORE);
    $encoder->startTag(SYNC_SEARCH_STATUS);
    $encoder->content($result['status']);
    $encoder->endTag();
    if ($result['status'] == 1) {
        // CHANGED dw2412 AS V12.0 Support (mentain single return way...)
        if (isset($result['rows']) && is_array($result['rows']) && !empty($result['rows'])) {
            $searchtotal = count($result['rows']);
            // CHANGED dw2412 AS V12.0 Support (honor the range in request...)
            $range = explode("-", $searchrange);
            $returnitems = $range[1] - $range[0];
            $returneditems = 0;
            $result['rows'] = array_slice($result['rows'], $range[0], $returnitems + 1, true);
            // CHANGED dw2412 AS V12.0 Support (mentain single return way...)
            foreach ($result['rows'] as $u) {
                // CHANGED dw2412 AS V12.0 Support (honor the range in request...)
                if ($returneditems > $returnitems) {
                    break;
                }
                $returneditems++;
                switch (strtolower($searchname)) {
                    case 'documentlibrary':
                        $encoder->startTag(SYNC_SEARCH_RESULT);
                        $encoder->startTag(SYNC_SEARCH_PROPERTIES);
                        $encoder->startTag(SYNC_DOCUMENTLIBRARY_LINKID);
                        $encoder->content($u['linkid']);
                        $encoder->endTag();
                        $encoder->startTag(SYNC_DOCUMENTLIBRARY_DISPLAYNAME);
                        $encoder->content($u['displayname']);
                        $encoder->endTag();
                        $encoder->startTag(SYNC_DOCUMENTLIBRARY_CREATIONDATE);
                        $encoder->content($u['creationdate']);
                        $encoder->endTag();
                        $encoder->startTag(SYNC_DOCUMENTLIBRARY_LASTMODIFIEDDATE);
                        $encoder->content($u['lastmodifieddate']);
                        $encoder->endTag();
                        $encoder->startTag(SYNC_DOCUMENTLIBRARY_ISHIDDEN);
                        $encoder->content($u['ishidden']);
                        $encoder->endTag();
                        $encoder->startTag(SYNC_DOCUMENTLIBRARY_ISFOLDER);
                        $encoder->content($u['isfolder']);
                        $encoder->endTag();
                        if ($u['isfolder'] == "0") {
                            $encoder->startTag(SYNC_DOCUMENTLIBRARY_CONTENTLENGTH);
                            $encoder->content($u['contentlength']);
                            $encoder->endTag();
                            $encoder->startTag(SYNC_DOCUMENTLIBRARY_CONTENTTYPE);
                            $encoder->content($u['contenttype']);
                            $encoder->endTag();
                        }
                        $encoder->endTag();
                        //result
                        $encoder->endTag();
                        //properties
                        break;
                    case 'mailbox':
                        $encoder->startTag(SYNC_SEARCH_RESULT);
                        $encoder->startTag(SYNC_FOLDERTYPE);
                        $encoder->content('Email');
                        $encoder->endTag();
                        $encoder->startTag(SYNC_SEARCH_LONGID);
                        $encoder->content($u['uniqueid']);
                        $encoder->endTag();
                        $encoder->startTag(SYNC_FOLDERID);
                        $encoder->content($u['searchfolderid']);
                        $encoder->endTag();
                        $encoder->startTag(SYNC_SEARCH_PROPERTIES);
                        $msg = $backend->ItemOperationsFetchMailbox($u['uniqueid'], $searchbodypreference, $mimesupport);
                        $msg->encode($encoder);
                        $encoder->endTag();
                        //properties
                        $encoder->endTag();
                        //result
                        break;
                    case 'gal':
                        $encoder->startTag(SYNC_SEARCH_RESULT);
                        $encoder->startTag(SYNC_SEARCH_PROPERTIES);
                        if (isset($u["fullname"]) && $u["fullname"] != "") {
                            $encoder->startTag(SYNC_GAL_DISPLAYNAME);
                            $encoder->content($u["fullname"]);
                            $encoder->endTag();
                        }
                        if (isset($u["phone"]) && $u["phone"] != "") {
                            $encoder->startTag(SYNC_GAL_PHONE);
                            $encoder->content($u["phone"]);
                            $encoder->endTag();
                        }
                        if (isset($u["homephone"]) && $u["homephone"] != "") {
                            $encoder->startTag(SYNC_GAL_HOMEPHONE);
                            $encoder->content($u["homephone"]);
                            $encoder->endTag();
                        }
                        if (isset($u["mobilephone"]) && $u["mobilephone"] != "") {
                            $encoder->startTag(SYNC_GAL_MOBILEPHONE);
                            $encoder->content($u["mobilephone"]);
                            $encoder->endTag();
                        }
                        if (isset($u["company"]) && $u["company"] != "") {
                            $encoder->startTag(SYNC_GAL_COMPANY);
                            $encoder->content($u["company"]);
                            $encoder->endTag();
                        }
                        if (isset($u["office"]) && $u["office"] != "") {
                            $encoder->startTag(SYNC_GAL_OFFICE);
                            $encoder->content($u["office"]);
                            $encoder->endTag();
                        }
                        if (isset($u["title"]) && $u["title"] != "") {
                            $encoder->startTag(SYNC_GAL_TITLE);
                            $encoder->content($u["title"]);
                            $encoder->endTag();
                        }
                        if (isset($u["username"]) && $u["username"] != "") {
                            $encoder->startTag(SYNC_GAL_ALIAS);
                            $encoder->content($u["username"]);
                            $encoder->endTag();
                        }
                        //it's not possible not get first and last name of an user
                        //from the gab and user functions, so we just set fullname
                        //to lastname and leave firstname empty because nokia needs
                        //first and lastname in order to display the search result
                        $encoder->startTag(SYNC_GAL_FIRSTNAME);
                        $encoder->content("");
                        $encoder->endTag();
                        $encoder->startTag(SYNC_GAL_LASTNAME);
                        $encoder->content($u["fullname"]);
                        $encoder->endTag();
                        $encoder->startTag(SYNC_GAL_EMAILADDRESS);
                        $encoder->content($u["emailaddress"]);
                        $encoder->endTag();
                        $encoder->endTag();
                        //result
                        $encoder->endTag();
                        //properties
                        break;
                }
            }
            $searchrange = $range[0] . "-" . ($range[0] + $returneditems - 1);
            $encoder->startTag(SYNC_SEARCH_RANGE);
            $encoder->content($searchrange);
            $encoder->endTag();
            $encoder->startTag(SYNC_SEARCH_TOTAL);
            $encoder->content($searchtotal);
            $encoder->endTag();
        }
    }
    $encoder->endTag();
    //store
    $encoder->endTag();
    //response
    $encoder->endTag();
    //search
    return true;
}
示例#2
0
function HandleSearch($backend, $devid, $protocolversion)
{
    global $zpushdtd;
    global $input, $output;
    global $auth_user, $auth_domain, $auth_pw;
    $decoder = new WBXMLDecoder($input, $zpushdtd);
    $encoder = new WBXMLEncoder($output, $zpushdtd);
    if (!$decoder->getElementStartTag(SYNC_SEARCH_SEARCH)) {
        return false;
    }
    if (!$decoder->getElementStartTag(SYNC_SEARCH_STORE)) {
        return false;
    }
    if (!$decoder->getElementStartTag(SYNC_SEARCH_NAME)) {
        return false;
    }
    $searchname = $decoder->getElementContent();
    if (!$decoder->getElementEndTag()) {
        return false;
    }
    if (!$decoder->getElementStartTag(SYNC_SEARCH_QUERY)) {
        return false;
    }
    //START CHANGED dw2412 V12.0 Support
    switch (strtolower($searchname)) {
        case 'documentlibrary':
            $searchquery['query'] = ParseQuery($decoder);
            break;
        case 'mailbox':
            $searchquery['query'] = ParseQuery($decoder);
            break;
        case 'gal':
            $searchquery = $decoder->getElementContent();
            break;
    }
    if (!$decoder->getElementEndTag()) {
        return false;
    }
    if ($decoder->getElementStartTag(SYNC_SEARCH_OPTIONS)) {
        while (1) {
            if ($decoder->getElementStartTag(SYNC_SEARCH_RANGE)) {
                $searchrange = $decoder->getElementContent();
                if (!$decoder->getElementEndTag()) {
                    return false;
                }
            }
            //START ADDED dw2412 V12.0 Support
            if ($decoder->getElementStartTag(SYNC_SEARCH_DEEPTRAVERSAL)) {
                if (!($searchdeeptraversal = $decoder->getElementContent())) {
                    $searchquerydeeptraversal = true;
                } else {
                    if (!$decoder->getElementEndTag()) {
                        return false;
                    }
                }
            }
            if ($decoder->getElementStartTag(SYNC_SEARCH_REBUILDRESULTS)) {
                if (!($searchrebuildresults = $decoder->getElementContent())) {
                    $searchqueryrebuildresults = true;
                } else {
                    if (!$decoder->getElementEndTag()) {
                        return false;
                    }
                }
            }
            if ($decoder->getElementStartTag(SYNC_SEARCH_USERNAME)) {
                if (!($searchqueryusername = $decoder->getElementContent())) {
                    return false;
                } else {
                    if (!$decoder->getElementEndTag()) {
                        return false;
                    }
                }
            }
            if ($decoder->getElementStartTag(SYNC_SEARCH_PASSWORD)) {
                if (!($searchquerypassword = $decoder->getElementContent())) {
                    return false;
                } else {
                    if (!$decoder->getElementEndTag()) {
                        return false;
                    }
                }
            }
            if ($decoder->getElementStartTag(SYNC_SEARCH_SCHEMA)) {
                if (!($searchschema = $decoder->getElementContent())) {
                    $searchschema = true;
                } else {
                    if (!$decoder->getElementEndTag()) {
                        return false;
                    }
                }
            }
            if ($decoder->getElementStartTag(SYNC_AIRSYNCBASE_BODYPREFERENCE)) {
                $bodypreference = array();
                while (1) {
                    if ($decoder->getElementStartTag(SYNC_AIRSYNCBASE_TYPE)) {
                        $bodypreference["Type"] = $decoder->getElementContent();
                        if (!$decoder->getElementEndTag()) {
                            return false;
                        }
                    }
                    if ($decoder->getElementStartTag(SYNC_AIRSYNCBASE_TRUNCATIONSIZE)) {
                        $bodypreference["TruncationSize"] = $decoder->getElementContent();
                        if (!$decoder->getElementEndTag()) {
                            return false;
                        }
                    }
                    if ($decoder->getElementStartTag(SYNC_AIRSYNCBASE_ALLORNONE)) {
                        $bodypreference["AllOrNone"] = $decoder->getElementContent();
                        if (!$decoder->getElementEndTag()) {
                            return false;
                        }
                    }
                    $e = $decoder->peek();
                    if ($e[EN_TYPE] == EN_TYPE_ENDTAG) {
                        $decoder->getElementEndTag();
                        if (!isset($searchbodypreference["wanted"])) {
                            $searchbodypreference["wanted"] = $bodypreference["Type"];
                        }
                        if (isset($bodypreference["Type"])) {
                            $searchbodypreference[$bodypreference["Type"]] = $bodypreference;
                        }
                        break;
                    }
                }
            }
            //END ADDED dw2412 V12.0 Support
            $e = $decoder->peek();
            if ($e[EN_TYPE] == EN_TYPE_ENDTAG) {
                $decoder->getElementEndTag();
                break;
            }
        }
    }
    if (!$decoder->getElementEndTag()) {
        //store
        return false;
    }
    if (!$decoder->getElementEndTag()) {
        //search
        return false;
    }
    //START CHANGED dw2412 V12.0 Support
    switch (strtolower($searchname)) {
        case 'documentlibrary':
            if (isset($searchqueryusername)) {
                if (strpos($searchqueryusername, "\\")) {
                    list($searchquery['username']['domain'], $searchquery['username']['username']) = explode("\\", $searchqueryusername);
                } else {
                    $searchquery['username'] = array('domain' => "", 'username' => $searchqueryusername);
                }
            } else {
                $searchquery['username']['domain'] = $auth_domain;
                $searchquery['username']['username'] = $auth_user;
            }
            $searchquery['password'] = isset($searchquerypassword) ? $searchquerypassword : $auth_pw;
            $searchquery['range'] = $searchrange;
            break;
        case 'mailbox':
            $searchquery['rebuildresults'] = $searchqueryrebuildresults;
            $searchquery['deeptraversal'] = $searchquerydeeptraversal;
            $searchquery['range'] = $searchrange;
            break;
    }
    //get search results from backend
    $result = $backend->getSearchResults($searchquery, $searchname);
    //END CHANGED dw2412 V12.0 Support
    $encoder->startWBXML();
    // START ADDED dw2412 Protocol Version 12 Support
    if (isset($searchbodypreference)) {
        $encoder->_bodypreference = $searchbodypreference;
    }
    // END ADDED dw2412 Protocol Version 12 Support
    $encoder->startTag(SYNC_SEARCH_SEARCH);
    $encoder->startTag(SYNC_SEARCH_STATUS);
    $encoder->content(1);
    $encoder->endTag();
    $encoder->startTag(SYNC_SEARCH_RESPONSE);
    $encoder->startTag(SYNC_SEARCH_STORE);
    $encoder->startTag(SYNC_SEARCH_STATUS);
    $encoder->content($result['status']);
    $encoder->endTag();
    // CHANGED dw2412 AS V12.0 Support (mentain single return way...)
    if (is_array($result['rows']) && !empty($result['rows'])) {
        $searchtotal = count($result['rows']);
        // CHANGED dw2412 AS V12.0 Support (honor the range in request...)
        eregi("(.*)\\-(.*)", $searchrange, $range);
        $returnitems = $range[2] - $range[1];
        $returneditems = 0;
        $result['rows'] = array_slice($result['rows'], $range[1], $returnitems + 1, true);
        // CHANGED dw2412 AS V12.0 Support (mentain single return way...)
        foreach ($result['rows'] as $u) {
            // CHANGED dw2412 AS V12.0 Support (honor the range in request...)
            if ($returneditems > $returnitems) {
                break;
            }
            $returneditems++;
            switch (strtolower($searchname)) {
                case 'documentlibrary':
                    $encoder->startTag(SYNC_SEARCH_RESULT);
                    $encoder->startTag(SYNC_SEARCH_PROPERTIES);
                    $encoder->startTag(SYNC_DOCUMENTLIBRARY_LINKID);
                    $encoder->content($u['linkid']);
                    $encoder->endTag();
                    $encoder->startTag(SYNC_DOCUMENTLIBRARY_DISPLAYNAME);
                    $encoder->content($u['displayname']);
                    $encoder->endTag();
                    $encoder->startTag(SYNC_DOCUMENTLIBRARY_CREATIONDATE);
                    $encoder->content($u['creationdate']);
                    $encoder->endTag();
                    $encoder->startTag(SYNC_DOCUMENTLIBRARY_LASTMODIFIEDDATE);
                    $encoder->content($u['lastmodifieddate']);
                    $encoder->endTag();
                    $encoder->startTag(SYNC_DOCUMENTLIBRARY_ISHIDDEN);
                    $encoder->content($u['ishidden']);
                    $encoder->endTag();
                    $encoder->startTag(SYNC_DOCUMENTLIBRARY_ISFOLDER);
                    $encoder->content($u['isfolder']);
                    $encoder->endTag();
                    if ($u['isfolder'] == "0") {
                        $encoder->startTag(SYNC_DOCUMENTLIBRARY_CONTENTLENGTH);
                        $encoder->content($u['contentlength']);
                        $encoder->endTag();
                        $encoder->startTag(SYNC_DOCUMENTLIBRARY_CONTENTTYPE);
                        $encoder->content($u['contenttype']);
                        $encoder->endTag();
                    }
                    $encoder->endTag();
                    //result
                    $encoder->endTag();
                    //properties
                    break;
                case 'mailbox':
                    $encoder->startTag(SYNC_SEARCH_RESULT);
                    $encoder->startTag(SYNC_FOLDERTYPE);
                    $encoder->content('Email');
                    $encoder->endTag();
                    $encoder->startTag(SYNC_SEARCH_LONGID);
                    $encoder->content($u['uniqueid']);
                    $encoder->endTag();
                    $encoder->startTag(SYNC_FOLDERID);
                    $encoder->content($u['searchfolderid']);
                    $encoder->endTag();
                    $encoder->startTag(SYNC_SEARCH_PROPERTIES);
                    $msg = $backend->ItemOperationsFetchMailbox($u['uniqueid'], $searchbodypreference);
                    $msg->encode($encoder);
                    $encoder->endTag();
                    //properties
                    $encoder->endTag();
                    //result
                    break;
                case 'gal':
                    $encoder->startTag(SYNC_SEARCH_RESULT);
                    $encoder->startTag(SYNC_SEARCH_PROPERTIES);
                    $encoder->startTag(SYNC_GAL_DISPLAYNAME);
                    $encoder->content($u["fullname"]);
                    $encoder->endTag();
                    $encoder->startTag(SYNC_GAL_PHONE);
                    $encoder->content($u["businessphone"]);
                    $encoder->endTag();
                    $encoder->startTag(SYNC_GAL_ALIAS);
                    $encoder->content($u["username"]);
                    $encoder->endTag();
                    //it's not possible not get first and last name of an user
                    //from the gab and user functions, so we just set fullname
                    //to lastname and leave firstname empty because nokia needs
                    //first and lastname in order to display the search result
                    $encoder->startTag(SYNC_GAL_FIRSTNAME);
                    $encoder->content("");
                    $encoder->endTag();
                    $encoder->startTag(SYNC_GAL_LASTNAME);
                    $encoder->content($u["fullname"]);
                    $encoder->endTag();
                    $encoder->startTag(SYNC_GAL_EMAILADDRESS);
                    $encoder->content($u["emailaddress"]);
                    $encoder->endTag();
                    $encoder->endTag();
                    //result
                    $encoder->endTag();
                    //properties
                    break;
            }
        }
        $searchrange = $range[1] . "-" . ($range[1] + $returneditems - 1);
        $encoder->startTag(SYNC_SEARCH_RANGE);
        $encoder->content($searchrange);
        $encoder->endTag();
        $encoder->startTag(SYNC_SEARCH_TOTAL);
        $encoder->content($searchtotal);
        $encoder->endTag();
    }
    $encoder->endTag();
    //store
    $encoder->endTag();
    //response
    $encoder->endTag();
    //search
    return true;
}