forked from extern/egroupware
Merge branch 'master' of github.com:EGroupware/egroupware
This commit is contained in:
commit
4f59bc2ccf
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/php -qC
|
#!/usr/bin/env php
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* Admin - Command line interface
|
* Admin - Command line interface
|
||||||
|
@ -127,7 +127,7 @@ class admin_customfields
|
|||||||
{
|
{
|
||||||
// determine appname
|
// determine appname
|
||||||
$this->appname = $this->appname ? $this->appname : ($_GET['appname'] ? $_GET['appname'] : ($content['appname'] ? $content['appname'] : false));
|
$this->appname = $this->appname ? $this->appname : ($_GET['appname'] ? $_GET['appname'] : ($content['appname'] ? $content['appname'] : false));
|
||||||
if(!$this->appname) die(lang('Error! No appname found'));
|
if(!$this->appname || !Api\Link::get_registry($this->appname, 'title')) die(lang('Error! No appname found'));
|
||||||
|
|
||||||
$this->use_private = !isset($_GET['use_private']) || (boolean)$_GET['use_private'] || $content['use_private'];
|
$this->use_private = !isset($_GET['use_private']) || (boolean)$_GET['use_private'] || $content['use_private'];
|
||||||
|
|
||||||
|
@ -48,6 +48,11 @@ var et2_customfields_list = (function(){ "use strict"; return et2_valueWidget.ex
|
|||||||
'private': {
|
'private': {
|
||||||
ignore: true,
|
ignore: true,
|
||||||
type: 'boolean'
|
type: 'boolean'
|
||||||
|
},
|
||||||
|
'sub_app': {
|
||||||
|
'name': 'sub app name',
|
||||||
|
'type': "string",
|
||||||
|
'description': "Name of sub application"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -126,6 +126,7 @@ class Customfields extends Transformer
|
|||||||
if(!$app)
|
if(!$app)
|
||||||
{
|
{
|
||||||
$app =& $this->setElementAttribute(self::GLOBAL_VALS, 'app', $GLOBALS['egw_info']['flags']['currentapp']);
|
$app =& $this->setElementAttribute(self::GLOBAL_VALS, 'app', $GLOBALS['egw_info']['flags']['currentapp']);
|
||||||
|
if ($this->attrs['sub-app']) $app .= '-'.$this->attrs['sub-app'];
|
||||||
$customfields =& $this->setElementAttribute(self::GLOBAL_VALS, 'customfields', Api\Storage\Customfields::get($app));
|
$customfields =& $this->setElementAttribute(self::GLOBAL_VALS, 'customfields', Api\Storage\Customfields::get($app));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -283,7 +284,7 @@ class Customfields extends Transformer
|
|||||||
$widget->id = self::$prefix.$fname;
|
$widget->id = self::$prefix.$fname;
|
||||||
$widget->attrs['type'] = $type;
|
$widget->attrs['type'] = $type;
|
||||||
$widget->set_attrs($xml);
|
$widget->set_attrs($xml);
|
||||||
|
|
||||||
// some type-specific (default) attributes
|
// some type-specific (default) attributes
|
||||||
switch($type)
|
switch($type)
|
||||||
{
|
{
|
||||||
@ -402,7 +403,7 @@ class Customfields extends Transformer
|
|||||||
// Arrays are not valid, but leave filemanager alone, we'll catch it
|
// Arrays are not valid, but leave filemanager alone, we'll catch it
|
||||||
// when saving. This allows files for new entries.
|
// when saving. This allows files for new entries.
|
||||||
if (is_array($valid) && $field_settings['type'] !== 'filemanager') $valid = implode(',', $valid);
|
if (is_array($valid) && $field_settings['type'] !== 'filemanager') $valid = implode(',', $valid);
|
||||||
|
|
||||||
// NULL is valid for most fields, but not custom fields due to backend handling
|
// NULL is valid for most fields, but not custom fields due to backend handling
|
||||||
// See so_sql_cf->save()
|
// See so_sql_cf->save()
|
||||||
if (is_null($valid)) $valid = false;
|
if (is_null($valid)) $valid = false;
|
||||||
|
@ -6997,6 +6997,54 @@ class Mail
|
|||||||
fclose($message);
|
fclose($message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check and fix headers of raw message for headers with line width
|
||||||
|
* more than 998 chars per line, as none folding long headers might
|
||||||
|
* break the mail content. RFC 2822 (2.2.3 Long Header fields)
|
||||||
|
* https://www.ietf.org/rfc/rfc2822.txt
|
||||||
|
*
|
||||||
|
* @param string|resource $message
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
static private function _checkAndfixLongHeaderFields($message)
|
||||||
|
{
|
||||||
|
$eol = Horde_Mime_Part::RFC_EOL.Horde_Mime_Part::RFC_EOL;
|
||||||
|
$needsFix = false;
|
||||||
|
if (is_resource($message))
|
||||||
|
{
|
||||||
|
fseek($message, 0, SEEK_SET);
|
||||||
|
$m = '';
|
||||||
|
while (!feof($message)) {
|
||||||
|
$m .= fread($message, 8192);
|
||||||
|
}
|
||||||
|
$message = $m;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_string($message))
|
||||||
|
{
|
||||||
|
$start = substr($message,0, strpos($message, $eol));
|
||||||
|
$body = substr($message, strlen($start));
|
||||||
|
$hlength = strpos($start, $eol) ? strpos($start, $eol) : strlen($start);
|
||||||
|
$headers = Horde_Mime_Headers::parseHeaders(substr($start, 0,$hlength));
|
||||||
|
foreach($headers->toArray() as $header => $value)
|
||||||
|
{
|
||||||
|
$needsReplacement = false;
|
||||||
|
foreach((array)$value as &$val)
|
||||||
|
{
|
||||||
|
if (strlen($val) > 998)
|
||||||
|
{
|
||||||
|
$needsReplacement = $needsFix = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($needsReplacement) {
|
||||||
|
$headers->removeHeader($header);
|
||||||
|
$headers->addHeader($header, $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $needsFix ? ($headers->toString(array('canonical'=>true)).$body) : $message;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses a message/rfc mail from file to the mailobject
|
* Parses a message/rfc mail from file to the mailobject
|
||||||
*
|
*
|
||||||
@ -7009,6 +7057,9 @@ class Mail
|
|||||||
{
|
{
|
||||||
if (is_string($message) || is_resource($message))
|
if (is_string($message) || is_resource($message))
|
||||||
{
|
{
|
||||||
|
// Check and fix long header fields
|
||||||
|
$message = self::_checkAndfixLongHeaderFields($message);
|
||||||
|
|
||||||
$structure = Horde_Mime_Part::parseMessage($message);
|
$structure = Horde_Mime_Part::parseMessage($message);
|
||||||
//error_log(__METHOD__.__LINE__.'#'.$structure->getPrimaryType().'#');
|
//error_log(__METHOD__.__LINE__.'#'.$structure->getPrimaryType().'#');
|
||||||
if ($force8bitOnPrimaryPart&&$structure->getPrimaryType()=='text')
|
if ($force8bitOnPrimaryPart&&$structure->getPrimaryType()=='text')
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env php -qC
|
#!/usr/bin/env php
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* EGroupware - check namespace usage in converted code
|
* EGroupware - check namespace usage in converted code
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env php -qC
|
#!/usr/bin/env php
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* EGroupware - check namespace usage in converted code
|
* EGroupware - check namespace usage in converted code
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env php -dapc.enable_cli=1
|
#!/usr/bin/env php
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* EGroupware Test Runner
|
* EGroupware Test Runner
|
||||||
@ -12,6 +12,8 @@ if (php_sapi_name() !== 'cli') // security precaution: forbit calling as web-pag
|
|||||||
die('<h1>test-cli.php must NOT be called as web-page --> exiting !!!</h1>');
|
die('<h1>test-cli.php must NOT be called as web-page --> exiting !!!</h1>');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ini_set('apc.enable_cli', true);
|
||||||
|
|
||||||
require_once dirname(__DIR__).'/api/src/loader/common.php';
|
require_once dirname(__DIR__).'/api/src/loader/common.php';
|
||||||
|
|
||||||
$_SERVER['argv'][] = '--verbose';
|
$_SERVER['argv'][] = '--verbose';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env php -qC
|
#!/usr/bin/env php
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* EGroupware Filemanager - Command line interface
|
* EGroupware Filemanager - Command line interface
|
||||||
@ -94,6 +94,11 @@ while(!is_null($option = array_shift($args)))
|
|||||||
{
|
{
|
||||||
if ($option == '-' || $option[0] != '-') // no option --> argument
|
if ($option == '-' || $option[0] != '-') // no option --> argument
|
||||||
{
|
{
|
||||||
|
// remove quotes from arguments
|
||||||
|
if (in_array($option[0], array('"', "'")) && $option[0] == substr($option, -1))
|
||||||
|
{
|
||||||
|
$option = substr($option, 1, -1);
|
||||||
|
}
|
||||||
$argv[] = $option;
|
$argv[] = $option;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -297,8 +302,8 @@ switch($cmd)
|
|||||||
{
|
{
|
||||||
$url = array_shift($argv);
|
$url = array_shift($argv);
|
||||||
|
|
||||||
load_wrapper($url);
|
if (strpos($url, '://')) load_wrapper($url);
|
||||||
echo "$cmd $url (long=".(int)$long.", numeric=".(int)$numeric.", recursive=".(int)$recursive.")\n";
|
echo "$cmd $url (long=".(int)$long.", numeric=".(int)$numeric.", recursive=".(int)$recursive.") ".implode(' ', $argv)."\n";
|
||||||
|
|
||||||
switch($cmd)
|
switch($cmd)
|
||||||
{
|
{
|
||||||
@ -341,8 +346,8 @@ switch($cmd)
|
|||||||
{
|
{
|
||||||
$mode = $url; // first param is mode
|
$mode = $url; // first param is mode
|
||||||
$url = array_shift($argv);
|
$url = array_shift($argv);
|
||||||
|
load_wrapper($url); // not loaded because mode was in url
|
||||||
}
|
}
|
||||||
if (Vfs::parse_url($url,PHP_URL_SCHEME)) load_wrapper($url); // cant use stat or Vfs::mode2int otherwise!
|
|
||||||
|
|
||||||
if (strpos($mode,'+') !== false || strpos($mode,'-') !== false)
|
if (strpos($mode,'+') !== false || strpos($mode,'-') !== false)
|
||||||
{
|
{
|
||||||
@ -367,7 +372,7 @@ switch($cmd)
|
|||||||
{
|
{
|
||||||
$owner = $url; // first param is owner/group
|
$owner = $url; // first param is owner/group
|
||||||
$url = array_shift($argv);
|
$url = array_shift($argv);
|
||||||
if (Vfs::parse_url($url,PHP_URL_SCHEME)) load_wrapper($url); // we need the header loaded
|
load_wrapper($url); // not loaded because owner/group was in url
|
||||||
if ($owner == 'root')
|
if ($owner == 'root')
|
||||||
{
|
{
|
||||||
$owner = 0;
|
$owner = 0;
|
||||||
@ -559,7 +564,7 @@ function load_egw($user,$passwd,$domain='default')
|
|||||||
}
|
}
|
||||||
|
|
||||||
$cmd = $GLOBALS['cmd'];
|
$cmd = $GLOBALS['cmd'];
|
||||||
if (!in_array($cmd,array('ls','find','mount','umount','eacl')) && $GLOBALS['egw_info']['server']['files_dir'] && !is_writable($GLOBALS['egw_info']['server']['files_dir']))
|
if (!in_array($cmd,array('ls','find','mount','umount','eacl','touch','chmod','chown','chgrp')) && $GLOBALS['egw_info']['server']['files_dir'] && !is_writable($GLOBALS['egw_info']['server']['files_dir']))
|
||||||
{
|
{
|
||||||
echo "\nError: eGroupWare's files directory {$GLOBALS['egw_info']['server']['files_dir']} is NOT writable by the user running ".basename(__FILE__)."!\n".
|
echo "\nError: eGroupWare's files directory {$GLOBALS['egw_info']['server']['files_dir']} is NOT writable by the user running ".basename(__FILE__)."!\n".
|
||||||
"--> Please run it as the same user the webserver uses or root, otherwise the $cmd command will fail!\n\n";
|
"--> Please run it as the same user the webserver uses or root, otherwise the $cmd command will fail!\n\n";
|
||||||
|
@ -921,7 +921,7 @@ class mail_ui
|
|||||||
), 'move');
|
), 'move');
|
||||||
break;
|
break;
|
||||||
case 'ham':
|
case 'ham':
|
||||||
if ($ham)
|
if (isset($this->mail_bo->icServer->acc_folder_ham) && !isset($this->mail_bo->icServer->acc_spam_api))
|
||||||
{
|
{
|
||||||
$this->ajax_copyMessages($ham, array(
|
$this->ajax_copyMessages($ham, array(
|
||||||
'all' => false,
|
'all' => false,
|
||||||
|
@ -5498,7 +5498,7 @@ app.classes.mail = AppJS.extend(
|
|||||||
}
|
}
|
||||||
var data = egw.dataGetUIDdata(id);
|
var data = egw.dataGetUIDdata(id);
|
||||||
var fromaddress = data.data.fromaddress.match(/<([^\'\" <>]+)>$/);
|
var fromaddress = data.data.fromaddress.match(/<([^\'\" <>]+)>$/);
|
||||||
var email = fromaddress[1]?fromaddress[1]:fromaddress;
|
var email = (fromaddress && fromaddress[1])?fromaddress[1]:data.data.fromaddress;
|
||||||
var domain = '@'+email.split('@')[1];
|
var domain = '@'+email.split('@')[1];
|
||||||
this.egw.json('mail.mail_ui.ajax_spamAction', [
|
this.egw.json('mail.mail_ui.ajax_spamAction', [
|
||||||
_action.id,
|
_action.id,
|
||||||
@ -5516,7 +5516,7 @@ app.classes.mail = AppJS.extend(
|
|||||||
var id = _sender[0].id;
|
var id = _sender[0].id;
|
||||||
var data = egw.dataGetUIDdata(id);
|
var data = egw.dataGetUIDdata(id);
|
||||||
var fromaddress = data.data.fromaddress.match(/<([^\'\" <>]+)>$/);
|
var fromaddress = data.data.fromaddress.match(/<([^\'\" <>]+)>$/);
|
||||||
var email = fromaddress[1]?fromaddress[1]:fromaddress;
|
var email = (fromaddress && fromaddress[1]) ?fromaddress[1]:data.data.fromaddress;
|
||||||
var domain = email.split('@')[1];
|
var domain = email.split('@')[1];
|
||||||
switch (_action.id)
|
switch (_action.id)
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env php -qC
|
#!/usr/bin/env php
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* Setup - Command line interface
|
* Setup - Command line interface
|
||||||
|
Loading…
Reference in New Issue
Block a user