function getModAndParentNamesWithSharedSupport($fhir, &$displayname, &$parent) { // PUT IN HERE YOUR SHARED FOLDER PREFIXES $shared_prefix = ["#Users", "#Public"]; $serverdelimiter = "/"; if (!isset($displayname) || strlen($displayname) == 0) { if (count($fhir) > 1) { foreach ($shared_prefix as $prefix) { if (strcasecmp($fhir[0], $prefix) == 0) { printf("Found shared prefix\n"); // Remove first element, it's the shared prefix array_shift($fhir); $displayname = "SHARED " . $fhir[count($fhir) - 1]; $parent = implode($serverdelimiter, $fhir); return; } } } } printf("displayname is: %s\n", $displayname); // if mod is already set add the previous part to it as it might be a folder which has // delimiter in its name $displayname = isset($displayname) && strlen($displayname) > 0 ? $displayname = array_pop($fhir) . $serverdelimiter . $displayname : array_pop($fhir); $parent = implode($serverdelimiter, $fhir); printf("displayname after is: %s\n", $displayname); if (count($fhir) == 1 || checkIfIMAPFolder($parent)) { return; } //recursion magic getModAndParentNames($fhir, $displayname, $parent); }
function GetFolder($imapid) { $folder = array(); // explode hierarchy $fhir = explode(getServerDelimiter(), $imapid); if (strcasecmp($imapid, create_name_folder(IMAP_FOLDER_INBOX)) == 0) { $folder["parentid"] = "0"; $folder["displayname"] = "Inbox"; $folder["type"] = "SYNC_FOLDER_TYPE_INBOX"; } else { if (strcasecmp($imapid, create_name_folder(IMAP_FOLDER_DRAFT)) == 0) { $folder["parentid"] = "0"; $folder["displayname"] = "Drafts"; $folder["type"] = "SYNC_FOLDER_TYPE_DRAFTS"; } else { if (strcasecmp($imapid, create_name_folder(IMAP_FOLDER_SENT)) == 0) { $folder["parentid"] = "0"; $folder["displayname"] = "Sent"; $folder["type"] = "SYNC_FOLDER_TYPE_SENTMAIL"; } else { if (strcasecmp($imapid, create_name_folder(IMAP_FOLDER_TRASH)) == 0) { $folder["parentid"] = "0"; $folder["displayname"] = "Trash"; $folder["type"] = "SYNC_FOLDER_TYPE_WASTEBASKET"; } else { if (defined('IMAP_FOLDER_PREFIX') && strlen(IMAP_FOLDER_PREFIX) > 0) { if (strcasecmp($fhir[0], IMAP_FOLDER_PREFIX) == 0) { // Discard prefix array_shift($fhir); } else { printf("GetFolder('%s'): '%s'; using server delimiter '%s', first part '%s' is not equal to the prefix defined '%s'. Something is wrong with your config.\n", $id, $imapid, getServerDelimiter(), $fhir[0], IMAP_FOLDER_PREFIX); } } if (count($fhir) == 1) { $folder["displayname"] = $fhir[0]; $folder["parentid"] = "0"; } else { getModAndParentNames($fhir, $folder["displayname"], $imapparent); $folder["displayname"] = $folder["displayname"]; if ($imapparent === null) { printf("GetFolder('%s'): '%s'; we didn't found a valid parent name for the folder, but we should... contact the developers for further info\n", $id, $imapid); $folder["parentid"] = "0"; // We put the folder as root folder, so we see it } else { $folder["parentid"] = $imapparent; } } $folder["type"] = "SYNC_FOLDER_TYPE_USER_MAIL"; } } } } // print_r($folder); }