mirror of
https://github.com/EGroupware/egroupware.git
synced 2025-02-22 21:30:54 +01:00
use own wrapperfunctions on used but possibly missing imap_rfc822_* functions; work to handle default horde stuff for (auto) loading vs. old Horde stuff used with lib/core.php
This commit is contained in:
parent
4867709a6e
commit
570d9a76bd
@ -70,6 +70,119 @@ function cut_bytes(&$data,$offset,$len=null)
|
||||
return $func_overload & 2 ? mb_substr($data,$offset,$len,'ascii') : substr($data,$offset,$len);
|
||||
}
|
||||
|
||||
if (!function_exists('imap_rfc822_parse_adrlist'))
|
||||
{
|
||||
/**
|
||||
* parses a (comma-separated) address string
|
||||
*
|
||||
* Examples:
|
||||
* - Joe Doe <doe@example.com>
|
||||
* - "Doe, Joe" <doe@example.com>
|
||||
* - "\'Joe Doe\'" <doe@example.com> // actually not necessary to quote
|
||||
* - postmaster@example.com
|
||||
* - root
|
||||
* - "Joe on its way Down Under :-\)" <doe@example.com>
|
||||
* - "Giant; \"Big\" Box" <sysservices@example.net>
|
||||
* - sysservices@example.net <sysservices@example.net> // this is wrong, because @ need to be quoted
|
||||
*
|
||||
* Invalid addresses, if detected, set host to '.SYNTAX-ERROR.'
|
||||
*
|
||||
* @param string $address - A string containing addresses
|
||||
* @param string $default_host - The default host name
|
||||
* @return array of objects. The objects properties are:
|
||||
* mailbox - the mailbox name (username)
|
||||
* host - the host name
|
||||
* personal - the personal name
|
||||
* adl - at domain source route
|
||||
*/
|
||||
function imap_rfc822_parse_adrlist($address, $default_host)
|
||||
{
|
||||
error_log(__METHOD__.__LINE__);
|
||||
$addresses = array();
|
||||
$pending = '';
|
||||
foreach(explode(',', $address) as $part)
|
||||
{
|
||||
$trimmed = trim(($pending ? $pending.',' : '').$part);
|
||||
if ($trimmed[0] == '"' && substr($trimmed, -1) != '>')
|
||||
{
|
||||
$pending .= ($pending ? $pending.',' : '').$part;
|
||||
continue;
|
||||
}
|
||||
$pending = '';
|
||||
$matches = $personal = $mailbox = $host = null;
|
||||
if (preg_match('/^(.*)<([^>@]+)(@([^>]+))?>$/', $trimmed, $matches))
|
||||
{
|
||||
$personal = trim($matches[1]);
|
||||
$mailbox = $matches[2];
|
||||
$host = $matches[4];
|
||||
}
|
||||
elseif (strpos($trimmed, '@') !== false)
|
||||
{
|
||||
list($mailbox, $host) = explode('@', $trimmed);
|
||||
}
|
||||
else
|
||||
{
|
||||
$mailbox = $trimmed;
|
||||
}
|
||||
if ($personal[0] == '"' && substr($personal, -1) == '"')
|
||||
{
|
||||
$personal = str_replace('\\', '', substr($personal, 1, -1));
|
||||
}
|
||||
if (empty($host)) $host = $default_host;
|
||||
|
||||
$addresses[] = (object)array_diff(array(
|
||||
'mailbox' => $mailbox,
|
||||
'host' => $host,
|
||||
'personal' => $personal,
|
||||
), array(null, ''));
|
||||
}
|
||||
return $addresses;
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('imap_rfc822_write_address'))
|
||||
{
|
||||
/**
|
||||
* Returns a properly formatted email address given the mailbox, host, and personal info
|
||||
* @param string $mailbox - The mailbox name, see imap_open() for more information
|
||||
* @param string $host - The email host part
|
||||
* @param string $personal - The name of the account owner
|
||||
* @return string properly formatted email address as defined in » RFC2822.
|
||||
*/
|
||||
function imap_rfc822_write_address($mailbox, $host, $personal)
|
||||
{
|
||||
//if (!preg_match('/^[!#$%&\'*+/0-9=?A-Z^_`a-z{|}~-]+$/u', $personal)) // that's how I read the rfc(2)822
|
||||
if ($personal && !preg_match('/^[0-9A-Z -]*$/iu', $personal)) // but quoting is never wrong, so quote more then necessary
|
||||
{
|
||||
$personal = '"'.str_replace(array('\\', '"'),array('\\\\', '\\"'), $personal).'"';
|
||||
}
|
||||
return ($personal ? $personal.' <' : '').$mailbox.($host ? '@'.$host : '').($personal ? '>' : '');
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('imap_mime_header_decode'))
|
||||
{
|
||||
/**
|
||||
* Decodes MIME message header extensions that are non ASCII text (RFC2047)
|
||||
*
|
||||
* Uses Horde_Mime::decode() and therefore always returns only a single array element!
|
||||
*
|
||||
* @param string $text
|
||||
* @return array with single object with attribute text already in our internal encoding and charset
|
||||
* @deprecated use Horde_Mime::decode()
|
||||
*/
|
||||
function imap_mime_header_decode($text)
|
||||
{
|
||||
//error_log(__METHOD__.__LINE__.function_backtrace());
|
||||
//pear install horde/Horde_Mime
|
||||
if (class_exists('Horde_Mime',false)==false && (@include_once 'Horde/Mime.php') === false ) throw new egw_exception_assertion_failed(lang('IMAP Extension NOT installed, and required PEAR class Horde/Mime.php (for fallback) not found.'));
|
||||
return array((object)array(
|
||||
'text' => Horde_Mime::decode($text),
|
||||
'charset' => translation::charset(), // is already in our internal encoding!
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('mb_strlen'))
|
||||
{
|
||||
/**
|
||||
@ -1535,9 +1648,13 @@ function __autoload($class)
|
||||
// eGW api classes containing multiple classes in on file, eg. egw_exception
|
||||
isset($components[0]) && file_exists($file = EGW_API_INC.'/class.'.$app.'_'.$components[0].'.inc.php') ||
|
||||
// eGW eTemplate classes using the old naming schema, eg. etemplate
|
||||
file_exists($file = EGW_INCLUDE_ROOT.'/etemplate/inc/class.'.$class.'.inc.php'))// ||
|
||||
file_exists($file = EGW_INCLUDE_ROOT.'/etemplate/inc/class.'.$class.'.inc.php') ||
|
||||
// classes of the current application using the old naming schema
|
||||
// file_exists($file = EGW_INCLUDE_ROOT.'/'.$GLOBALS['egw_info']['flags']['currentapp'].'/inc/class.'.$class.'.inc.php'))
|
||||
// include PEAR and PSR0 classes from include_path
|
||||
// need to use include (not include_once) as eg. a previous included EGW_API_INC/horde/Horde/String.php causes
|
||||
// include_once('Horde/String.php') to return true, even if the former was included with an absolute path
|
||||
!isset($GLOBALS['egw_info']['apps'][$app]) && @include($file = strtr($class, array('_'=>'/','\\'=>'/')).'.php'))
|
||||
{
|
||||
//error_log("autoloaded class $class from $file");
|
||||
include_once($file);
|
||||
|
@ -82,7 +82,8 @@ class Horde_iCalendar {
|
||||
$type = String::lower($type);
|
||||
$class = 'Horde_iCalendar_' . $type;
|
||||
if (!class_exists($class)) {
|
||||
include 'Horde/iCalendar/' . $type . '.php';
|
||||
// include relative from current dir, as we no longer set (old) Horde dir in include path
|
||||
include 'iCalendar/' . $type . '.php';
|
||||
}
|
||||
if (class_exists($class)) {
|
||||
$component = new $class();
|
||||
|
56
phpgwapi/inc/horde/lib/core.php
Normal file
56
phpgwapi/inc/horde/lib/core.php
Normal file
@ -0,0 +1,56 @@
|
||||
<?php
|
||||
/**
|
||||
* Horde Application Framework core services file.
|
||||
*
|
||||
* This file sets up any necessary include path variables and includes
|
||||
* the minimum required Horde libraries.
|
||||
*
|
||||
* $Horde: horde/lib/core.php,v 1.27 2005/01/03 14:35:14 jan Exp $
|
||||
*
|
||||
* Copyright 1999-2005 Chuck Hagenbuch <chuck@horde.org>
|
||||
*
|
||||
* See the enclosed file COPYING for license information (LGPL). If you
|
||||
* did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
|
||||
*/
|
||||
|
||||
/* Turn PHP stuff off that can really screw things up. */
|
||||
ini_set('magic_quotes_sybase', 0);
|
||||
ini_set('magic_quotes_runtime', 0);
|
||||
|
||||
/* If the Horde Framework packages are not installed in PHP's global
|
||||
* include_path, you must add an ini_set() call here to add their location to
|
||||
* the include_path. */
|
||||
// ini_set('include_path', dirname(__FILE__) . PATH_SEPARATOR . ini_get('include_path'));
|
||||
//set_include_path(dirname(__FILE__). '/../../horde/' . PATH_SEPARATOR . dirname(__FILE__). '/../../../../egw-pear/' . PATH_SEPARATOR . get_include_path());
|
||||
|
||||
@define('EGW_BASE', realpath(dirname(dirname(__FILE__) . '/../../../../rpc.php')));
|
||||
// Check for a prior definition of HORDE_BASE (perhaps by an
|
||||
// auto_prepend_file definition for site customization).
|
||||
if (!defined('HORDE_BASE')) {
|
||||
@define('HORDE_BASE', EGW_BASE . '/phpgwapi/inc/horde/');
|
||||
}
|
||||
|
||||
$save_include_path = set_include_path(HORDE_BASE . PATH_SEPARATOR . EGW_BASE . '/egw-pear/' . PATH_SEPARATOR . get_include_path());
|
||||
/* PEAR base class. */
|
||||
include_once 'PEAR.php';
|
||||
|
||||
/* Horde core classes. */
|
||||
include_once 'Horde.php';
|
||||
include_once 'Horde/Registry.php';
|
||||
#include_once 'Horde/DataTree.php';
|
||||
include_once 'Horde/String.php';
|
||||
include_once 'Horde/Date.php';
|
||||
include_once 'Horde/NLS.php';
|
||||
include_once 'Horde/iCalendar.php';
|
||||
//include_once 'Horde/Notification.php';
|
||||
//include_once 'Horde/Auth.php';
|
||||
//include_once 'Horde/Browser.php';
|
||||
//include_once 'Horde/Perms.php';
|
||||
|
||||
/* Browser detection object. *
|
||||
if (class_exists('Browser')) {
|
||||
$browser = &Browser::singleton();
|
||||
}
|
||||
*/
|
||||
// restore EGroupware include path to NOT conflict with new Horde code installed in include-path
|
||||
set_include_path($save_include_path);
|
2
rpc.php
2
rpc.php
@ -13,7 +13,7 @@ error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT);
|
||||
@define('EGW_API_INC', dirname(__FILE__) . '/phpgwapi/inc/');
|
||||
@define('HORDE_BASE', EGW_API_INC . '/horde/');
|
||||
require_once HORDE_BASE . '/lib/core.php';
|
||||
require_once 'Horde/RPC.php';
|
||||
require_once HORDE_BASE . 'Horde/RPC.php';
|
||||
//require_once EGW_API_INC . '/common_functions.inc.php';
|
||||
|
||||
$GLOBALS['egw_info'] = array(
|
||||
|
Loading…
Reference in New Issue
Block a user