mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-22 14:41:29 +01:00
modified client-side to call new server-side classes in api, instead compatibility classes in etemplate
This commit is contained in:
parent
6af1e23b66
commit
df7d8c414a
@ -468,7 +468,7 @@ var et2_DOMWidget = (function(){ "use strict"; return et2_widget.extend(et2_IDOM
|
|||||||
* the more widget-specific parts.
|
* the more widget-specific parts.
|
||||||
*
|
*
|
||||||
* @param {object} actions {ID: {attributes..}+} map of egw action information
|
* @param {object} actions {ID: {attributes..}+} map of egw action information
|
||||||
* @see etemplate/inc/class.etemplate_widget_nextmatch->egw_actions()
|
* @see api/src/Etemplate/Widget/Nextmatch.php egw_actions() method
|
||||||
*/
|
*/
|
||||||
set_actions: function(actions)
|
set_actions: function(actions)
|
||||||
{
|
{
|
||||||
|
@ -627,7 +627,7 @@ var et2_customfields_list = (function(){ "use strict"; return et2_valueWidget.ex
|
|||||||
// Filemanager select
|
// Filemanager select
|
||||||
{
|
{
|
||||||
label: '',
|
label: '',
|
||||||
method: 'etemplate_widget_link::link_existing',
|
method: 'EGroupware\\Api\\Etemplate\\Widget\\Link::link_existing',
|
||||||
method_id: attrs.path,
|
method_id: attrs.path,
|
||||||
button_label: egw.lang('Link')
|
button_label: egw.lang('Link')
|
||||||
},{type: 'vfs-select'});
|
},{type: 'vfs-select'});
|
||||||
|
@ -390,7 +390,7 @@ var et2_nextmatch_controller = (function(){ "use strict"; return et2_dataview_co
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Link the entries
|
// Link the entries
|
||||||
self.egw.json(self.egw.getAppName()+".etemplate_widget_link.ajax_link.etemplate",
|
self.egw.json("EGroupware\\Api\\Etemplate\\Widget\\Link::ajax_link",
|
||||||
dropped.id.split('::').concat([links]),
|
dropped.id.split('::').concat([links]),
|
||||||
function(result) {
|
function(result) {
|
||||||
if(result)
|
if(result)
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
/**
|
/**
|
||||||
* A widget to display a value from an entry
|
* A widget to display a value from an entry
|
||||||
*
|
*
|
||||||
* Since we have etemplate_widget_transformer, this client side widget exists
|
* Since we have Etemplate\Widget\Transformer, this client side widget exists
|
||||||
* mostly to resolve the problem where the ID for the entry widget is the same
|
* mostly to resolve the problem where the ID for the entry widget is the same
|
||||||
* as the widget where you actually set the value, which prevents transformer
|
* as the widget where you actually set the value, which prevents transformer
|
||||||
* from working.
|
* from working.
|
||||||
|
@ -139,7 +139,7 @@ var et2_file = (function(){ "use strict"; return et2_inputWidget.extend(
|
|||||||
beforeSend: function(form) { return self.beforeSend(form);},
|
beforeSend: function(form) { return self.beforeSend(form);},
|
||||||
|
|
||||||
|
|
||||||
target: egw.ajaxUrl(self.egw().getAppName()+".etemplate_widget_file.ajax_upload.etemplate"),
|
target: egw.ajaxUrl("EGroupware\\Api\\Etemplate\\Widget\\File::ajax_upload"),
|
||||||
query: function(file) {return self.beforeSend(file);},
|
query: function(file) {return self.beforeSend(file);},
|
||||||
// Disable checking for already uploaded chunks
|
// Disable checking for already uploaded chunks
|
||||||
testChunks: false
|
testChunks: false
|
||||||
|
@ -127,7 +127,7 @@ var et2_htmlarea = (function(){ "use strict"; return et2_inputWidget.extend([et2
|
|||||||
}
|
}
|
||||||
else if (this.options.imageUpload[0] !== '/' && this.options.imageUpload.substr(0, 4) != 'http')
|
else if (this.options.imageUpload[0] !== '/' && this.options.imageUpload.substr(0, 4) != 'http')
|
||||||
{
|
{
|
||||||
self.options.config.imageUploadUrl = egw.ajaxUrl(self.egw().getAppName()+".etemplate_widget_vfs.ajax_htmlarea_upload.etemplate")+
|
self.options.config.imageUploadUrl = egw.ajaxUrl("EGroupware\\Api\\Etemplate\\Widget\\Vfs::ajax_htmlarea_upload")+
|
||||||
'&request_id='+self.getInstanceManager().etemplate_exec_id+'&widget_id='+this.options.imageUpload;
|
'&request_id='+self.getInstanceManager().etemplate_exec_id+'&widget_id='+this.options.imageUpload;
|
||||||
self.options.config.imageUploadUrl = self.options.config.imageUploadUrl.substr(egw.webserverUrl.length+1);
|
self.options.config.imageUploadUrl = self.options.config.imageUploadUrl.substr(egw.webserverUrl.length+1);
|
||||||
}
|
}
|
||||||
|
@ -236,7 +236,7 @@ var et2_itempicker = (function(){ "use strict"; return et2_inputWidget.extend(
|
|||||||
|
|
||||||
this.itemlist.addClass("loading");
|
this.itemlist.addClass("loading");
|
||||||
this.clear.css("display", "inline-block");
|
this.clear.css("display", "inline-block");
|
||||||
egw._json("etemplate_widget_itempicker::ajax_item_search::etemplate",
|
egw._json("EGroupware\\Api\\Etemplate\\Widget\\ItemPicker::ajax_item_search",
|
||||||
[this.current_app, '', request.term, request.options],
|
[this.current_app, '', request.term, request.options],
|
||||||
this.queryResults,
|
this.queryResults,
|
||||||
this,true,this
|
this,true,this
|
||||||
|
@ -178,7 +178,7 @@ var et2_link_to = (function(){ "use strict"; return et2_inputWidget.extend(
|
|||||||
|
|
||||||
// Filemanager select
|
// Filemanager select
|
||||||
var select_attrs = {
|
var select_attrs = {
|
||||||
method: 'etemplate_widget_link::link_existing',
|
method: 'EGroupware\\Api\\Etemplate\\Widget\\Link::link_existing',
|
||||||
method_id: function() { return self.options.value.to_app + ':' + self.options.value.to_id;},
|
method_id: function() { return self.options.value.to_app + ':' + self.options.value.to_id;},
|
||||||
button_label: egw.lang('Link')
|
button_label: egw.lang('Link')
|
||||||
};
|
};
|
||||||
@ -296,7 +296,7 @@ var et2_link_to = (function(){ "use strict"; return et2_inputWidget.extend(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var request = egw.json(self.egw().getAppName()+".etemplate_widget_link.ajax_link.etemplate",
|
var request = egw.json("EGroupware\\Api\\Etemplate\\Widget\\Link::ajax_link",
|
||||||
[values.to_app, values.to_id, links],
|
[values.to_app, values.to_id, links],
|
||||||
self._link_result,
|
self._link_result,
|
||||||
self,
|
self,
|
||||||
@ -939,7 +939,7 @@ var et2_link_entry = (function(){ "use strict"; return et2_inputWidget.extend(
|
|||||||
// Remove specific display and revert to CSS file
|
// Remove specific display and revert to CSS file
|
||||||
// show() would use inline, should be inline-block
|
// show() would use inline, should be inline-block
|
||||||
this.clear.css('display','');
|
this.clear.css('display','');
|
||||||
this.request = egw.json(egw_getAppName() + ".etemplate_widget_link.ajax_link_search.etemplate",
|
this.request = egw.json("EGroupware\\Api\\Etemplate\\Widget\\Link::ajax_link_search",
|
||||||
[this.app_select.val(), '', request.term, request.options],
|
[this.app_select.val(), '', request.term, request.options],
|
||||||
this._results,
|
this._results,
|
||||||
this,true,this
|
this,true,this
|
||||||
@ -1036,7 +1036,7 @@ var et2_link_entry = (function(){ "use strict"; return et2_inputWidget.extend(
|
|||||||
// If a link array was passed in, don't make the ajax call
|
// If a link array was passed in, don't make the ajax call
|
||||||
if(typeof _links == 'undefined')
|
if(typeof _links == 'undefined')
|
||||||
{
|
{
|
||||||
var request = egw.json(self.egw().getAppName()+".etemplate_widget_link.ajax_link.etemplate",
|
var request = egw.json("EGroupware\\Api\\Etemplate\\Widget\\Link::ajax_link",
|
||||||
[values.to_app, values.to_id, links],
|
[values.to_app, values.to_id, links],
|
||||||
self._link_result,
|
self._link_result,
|
||||||
this,
|
this,
|
||||||
@ -1346,7 +1346,7 @@ var et2_link_string = (function(){ "use strict"; return expose(et2_valueWidget.e
|
|||||||
{
|
{
|
||||||
_value.only_app = this.options.only_app;
|
_value.only_app = this.options.only_app;
|
||||||
}
|
}
|
||||||
this.egw().jsonq(this.egw().getAppName()+'.etemplate_widget_link.ajax_link_list', [_value], this.set_value, this);
|
this.egw().jsonq('EGroupware\\Api\\Etemplate\\Widget\\Link::ajax_link_list', [_value], this.set_value, this);
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
@ -1549,7 +1549,7 @@ var et2_link_list = (function(){ "use strict"; return et2_link_string.extend(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
remark.addClass("loading");
|
remark.addClass("loading");
|
||||||
var request = egw.json(self.egw().getAppName() + ".etemplate_widget_link.ajax_link_comment.etemplate",
|
var request = egw.json("EGroupware\\Api\\Etemplate\\Widget\\Link::ajax_link_comment",
|
||||||
[link_id, comment],
|
[link_id, comment],
|
||||||
function() {
|
function() {
|
||||||
if(remark)
|
if(remark)
|
||||||
@ -1623,7 +1623,7 @@ var et2_link_list = (function(){ "use strict"; return et2_link_string.extend(
|
|||||||
|
|
||||||
// Download ZIP
|
// Download ZIP
|
||||||
window.location = self.egw().link('/index.php',{
|
window.location = self.egw().link('/index.php',{
|
||||||
menuaction: 'etemplate.etemplate_widget_link.download_zip',
|
menuaction: 'EGroupware\\Api\\Etemplate\\Widget\\Link::download_zip',
|
||||||
app: self.value.to_app,
|
app: self.value.to_app,
|
||||||
id: self.value.to_id
|
id: self.value.to_id
|
||||||
});
|
});
|
||||||
@ -1917,7 +1917,7 @@ var et2_link_list = (function(){ "use strict"; return et2_link_string.extend(
|
|||||||
}
|
}
|
||||||
if(typeof link_id != "object")
|
if(typeof link_id != "object")
|
||||||
{
|
{
|
||||||
egw.json(this.egw().getAppName()+".etemplate_widget_link.ajax_delete.etemplate", [link_id],
|
egw.json("EGroupware\\Api\\Etemplate\\Widget\\Link::ajax_delete", [link_id],
|
||||||
function(data) { if(data) {row.slideUp(row.remove);}}
|
function(data) { if(data) {row.slideUp(row.remove);}}
|
||||||
).sendRequest();
|
).sendRequest();
|
||||||
}
|
}
|
||||||
|
@ -945,7 +945,7 @@ jQuery.extend(et2_selectbox, //(function(){ "use strict"; return
|
|||||||
/**
|
/**
|
||||||
* Some static options, no need to transfer them over and over.
|
* Some static options, no need to transfer them over and over.
|
||||||
* We still need the same thing on the server side to validate, so they
|
* We still need the same thing on the server side to validate, so they
|
||||||
* have to match. See etemplate_widget_menupopup::typeOptions()
|
* have to match. See Etemplate\Widget\Select::typeOptions()
|
||||||
* The type specific legacy options wind up in attrs.other.
|
* The type specific legacy options wind up in attrs.other.
|
||||||
*
|
*
|
||||||
* @param {type} widget
|
* @param {type} widget
|
||||||
@ -1132,7 +1132,7 @@ jQuery.extend(et2_selectbox, //(function(){ "use strict"; return
|
|||||||
// one widget listening for the response by the time it gets back,
|
// one widget listening for the response by the time it gets back,
|
||||||
// and we can't do that when it's queued.
|
// and we can't do that when it's queued.
|
||||||
var req = egw.json(
|
var req = egw.json(
|
||||||
widget.getInstanceManager().app+'.etemplate_widget_menupopup.ajax_get_options.etemplate',
|
'EGroupware\\Api\\Etemplate\\Widget\\Select::ajax_get_options',
|
||||||
[widget._type,options_string,attrs.value]
|
[widget._type,options_string,attrs.value]
|
||||||
).sendRequest(!in_nextmatch);
|
).sendRequest(!in_nextmatch);
|
||||||
if(typeof cache === 'undefined')
|
if(typeof cache === 'undefined')
|
||||||
|
@ -50,7 +50,7 @@ var et2_taglist = (function(){ "use strict"; return et2_selectbox.extend([et2_IR
|
|||||||
"autocomplete_url": {
|
"autocomplete_url": {
|
||||||
"name": "Autocomplete source",
|
"name": "Autocomplete source",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"default": "home.etemplate_widget_taglist.ajax_search.etemplate",
|
"default": "EGroupware\\Api\\Etemplate\\Widget\\Taglist::ajax_search",
|
||||||
"description": "Menuaction (app.class.function) for autocomplete data source. Must return actual JSON, and nothing more."
|
"description": "Menuaction (app.class.function) for autocomplete data source. Must return actual JSON, and nothing more."
|
||||||
},
|
},
|
||||||
"autocomplete_params": {
|
"autocomplete_params": {
|
||||||
@ -838,7 +838,7 @@ var et2_taglist_account = (function(){ "use strict"; return et2_taglist.extend(
|
|||||||
{
|
{
|
||||||
attributes: {
|
attributes: {
|
||||||
"autocomplete_url": {
|
"autocomplete_url": {
|
||||||
"default": "home.etemplate_widget_taglist.ajax_search.etemplate"
|
"default": "EGroupware\\Api\\Etemplate\\Widget\\Taglist::ajax_search"
|
||||||
},
|
},
|
||||||
allowFreeEntries: {
|
allowFreeEntries: {
|
||||||
"default": false,
|
"default": false,
|
||||||
@ -1008,7 +1008,7 @@ var et2_taglist_email = (function(){ "use strict"; return et2_taglist.extend(
|
|||||||
{
|
{
|
||||||
attributes: {
|
attributes: {
|
||||||
"autocomplete_url": {
|
"autocomplete_url": {
|
||||||
"default": "home.etemplate_widget_taglist.ajax_email.etemplate"
|
"default": "EGroupware\\Api\\Etemplate\\Widget\\Taglist::ajax_email"
|
||||||
},
|
},
|
||||||
"autocomplete_params": {
|
"autocomplete_params": {
|
||||||
"default": {}
|
"default": {}
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
/**
|
/**
|
||||||
* Tree widget
|
* Tree widget
|
||||||
*
|
*
|
||||||
* For syntax of nodes supplied via sel_optons or autoloading refer to etemplate_widget_tree class.
|
* For syntax of nodes supplied via sel_optons or autoloading refer to Etemplate\Widget\Tree class.
|
||||||
*
|
*
|
||||||
* @augments et2_inputWidget
|
* @augments et2_inputWidget
|
||||||
*/
|
*/
|
||||||
|
@ -44,7 +44,7 @@ var et2_url = (function(){ "use strict"; return et2_textbox.extend(
|
|||||||
*
|
*
|
||||||
* Using \042 instead of " to NOT stall minifyer!
|
* Using \042 instead of " to NOT stall minifyer!
|
||||||
*
|
*
|
||||||
* Same preg is in etemplate_widget_url PHP class!
|
* Same preg is in Etemplate\Widget\Url PHP class!
|
||||||
*/
|
*/
|
||||||
EMAIL_PREG: new RegExp(/^(([^\042',<][^,<]+|\042[^\042]+\042|\'[^\']+\'|)\s?<)?[^\x00-\x20()<>@,;:\042\[\]]+@([a-z0-9ÄÖÜäöüß](|[a-z0-9ÄÖÜäöüß_-]*[a-z0-9ÄÖÜäöüß])\.)+[a-z]{2,}>?$/i),
|
EMAIL_PREG: new RegExp(/^(([^\042',<][^,<]+|\042[^\042]+\042|\'[^\']+\'|)\s?<)?[^\x00-\x20()<>@,;:\042\[\]]+@([a-z0-9ÄÖÜäöüß](|[a-z0-9ÄÖÜäöüß_-]*[a-z0-9ÄÖÜäöüß])\.)+[a-z]{2,}>?$/i),
|
||||||
/**
|
/**
|
||||||
|
@ -654,7 +654,7 @@ var et2_vfsUpload = (function(){ "use strict"; return et2_file.extend(
|
|||||||
legacyOptions: ["mime"],
|
legacyOptions: ["mime"],
|
||||||
|
|
||||||
asyncOptions: {
|
asyncOptions: {
|
||||||
target: egw.ajaxUrl(self.egw().getAppName()+".etemplate_widget_vfs.ajax_upload.etemplate")
|
target: egw.ajaxUrl("EGroupware\\Api\\Etemplate\\Widget\\Vfs::ajax_upload")
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -176,7 +176,7 @@ class Link extends Etemplate\Widget
|
|||||||
$response->data(is_array($id) ? $id : $result !== false);
|
$response->data(is_array($id) ? $id : $result !== false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function ajax_link_list($value)
|
public static function ajax_link_list($value)
|
||||||
{
|
{
|
||||||
$app = $value['to_app'];
|
$app = $value['to_app'];
|
||||||
$id = $value['to_id'];
|
$id = $value['to_id'];
|
||||||
@ -256,7 +256,7 @@ class Link extends Etemplate\Widget
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function ajax_delete($value)
|
public static function ajax_delete($value)
|
||||||
{
|
{
|
||||||
$response = egw_json_response::get();
|
$response = egw_json_response::get();
|
||||||
$response->data(Api\Link::unlink($value));
|
$response->data(Api\Link::unlink($value));
|
||||||
@ -270,7 +270,7 @@ class Link extends Etemplate\Widget
|
|||||||
* the entry has no linked files, the ZIP will still be returned, but it will
|
* the entry has no linked files, the ZIP will still be returned, but it will
|
||||||
* be empty.
|
* be empty.
|
||||||
*/
|
*/
|
||||||
public function download_zip()
|
public static function download_zip()
|
||||||
{
|
{
|
||||||
$app = $_GET['app'];
|
$app = $_GET['app'];
|
||||||
$id = $_GET['id'];
|
$id = $_GET['id'];
|
||||||
|
@ -94,7 +94,14 @@ class egw_json_request
|
|||||||
if (strpos($menuaction,'::') !== false && strpos($menuaction,'.') === false) // static method name app_something::method
|
if (strpos($menuaction,'::') !== false && strpos($menuaction,'.') === false) // static method name app_something::method
|
||||||
{
|
{
|
||||||
@list($className,$functionName,$handler) = explode('::',$menuaction);
|
@list($className,$functionName,$handler) = explode('::',$menuaction);
|
||||||
list($appName) = explode('_',$className);
|
if (substr($className, 0, 11) == 'EGroupware\\')
|
||||||
|
{
|
||||||
|
list(,$appName) = explode('\\', strtolower($className));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
list($appName) = explode('_',$className);
|
||||||
|
}
|
||||||
|
|
||||||
// Check for a real static method, avoid instanciation if it is
|
// Check for a real static method, avoid instanciation if it is
|
||||||
$m = new ReflectionMethod($menuaction);
|
$m = new ReflectionMethod($menuaction);
|
||||||
@ -137,9 +144,10 @@ class egw_json_request
|
|||||||
|
|
||||||
if(substr($className,0,4) != 'ajax' && substr($className,-4) != 'ajax' &&
|
if(substr($className,0,4) != 'ajax' && substr($className,-4) != 'ajax' &&
|
||||||
$menuaction != 'etemplate.etemplate.process_exec' && substr($functionName,0,4) != 'ajax' ||
|
$menuaction != 'etemplate.etemplate.process_exec' && substr($functionName,0,4) != 'ajax' ||
|
||||||
!preg_match('/^[A-Za-z0-9_-]+(\.[A-Za-z0-9_]+\.|::)[A-Za-z0-9_]+$/',$menuaction))
|
!preg_match('/^[A-Za-z0-9_\\\\-]+(\.[A-Za-z0-9_\\\\]+\.|::)[A-Za-z0-9_]+$/',$menuaction))
|
||||||
{
|
{
|
||||||
// stopped for security reasons
|
// stopped for security reasons
|
||||||
|
error_log("className='$className', functionName='$functionName', menuaction='$menuaction'");
|
||||||
error_log($_SERVER['PHP_SELF']. ' stopped for security reason. '.$menuaction.' is not valid. class- or function-name must start with ajax!!!');
|
error_log($_SERVER['PHP_SELF']. ' stopped for security reason. '.$menuaction.' is not valid. class- or function-name must start with ajax!!!');
|
||||||
// send message also to the user
|
// send message also to the user
|
||||||
throw new Exception($_SERVER['PHP_SELF']. ' stopped for security reason. '.$menuaction.' is not valid. class- or function-name must start with ajax!!!');
|
throw new Exception($_SERVER['PHP_SELF']. ' stopped for security reason. '.$menuaction.' is not valid. class- or function-name must start with ajax!!!');
|
||||||
|
Loading…
Reference in New Issue
Block a user