⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jsclass_async.js

📁 SugarCRM5.1 开源PHP客户关系管理系统
💻 JS
字号:
/* * SugarCRM is a customer relationship management program developed by * SugarCRM, Inc. Copyright (C) 2004 - 2007 SugarCRM Inc. *  * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3 as published by the * Free Software Foundation with the addition of the following permission added * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. *  * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more * details. *  * You should have received a copy of the GNU General Public License along with * this program; if not, see http://www.gnu.org/licenses or write to the Free * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. *  * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. *  * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU General Public License version 3. *  * In accordance with Section 7(b) of the GNU General Public License version 3, * these Appropriate Legal Notices must retain the display of the "Powered by * SugarCRM" logo. If the display of the logo is not reasonably feasible for * technical reasons, the Appropriate Legal Notices must display the words * "Powered by SugarCRM". *///////////////////////////////////////////////////////////////////// called on the return of a JSON-RPC async request,// and calls the display() method on the widget registered// in the registry at the request_id key returned by the server//////////////////////////////////////////////////////////////////function method_callback (request_id,rslt,e) {	if(rslt == null) {	    return;	}	if(typeof (global_request_registry[request_id]) != 'undefined') {		    widget = global_request_registry[request_id][0];	    method_name = global_request_registry[request_id][1];	    widget[method_name](rslt);	}}                                                                                   //////////////////////////////////////////////////// class: SugarVCalClient// async retrieval/parsing of vCal freebusy info // //////////////////////////////////////////////////SugarClass.inherit("SugarVCalClient","SugarClass");function SugarVCalClient() {	this.init();}      SugarVCalClient.prototype.init = function(){      //this.urllib = importModule("urllib");    }    SugarVCalClient.prototype.load = function(user_id,request_id){      this.user_id = user_id;      // get content at url and declare the callback using anon function:      urllib.getURL('./index.php?entryPoint=vcal_server&type=vfb&source=outlook&user_id='+user_id,[["Content-Type", "text/plain"]], function (result) {                   if (typeof GLOBAL_REGISTRY.freebusy == 'undefined')                  {                     GLOBAL_REGISTRY.freebusy = new Object();                  }   		          if (typeof GLOBAL_REGISTRY.freebusy_adjusted == 'undefined')                  {                     GLOBAL_REGISTRY.freebusy_adjusted = new Object();                  }                  // parse vCal and put it in the registry using the user_id as a key:                  GLOBAL_REGISTRY.freebusy[user_id] = SugarVCalClient.parseResults(result.responseText, false);                  // parse for current user adjusted vCal                  GLOBAL_REGISTRY.freebusy_adjusted[user_id] = SugarVCalClient.parseResults(result.responseText, true);                  // now call the display() on the widget registered at request_id:                  global_request_registry[request_id][0].display();                  })    }    // parse vCal freebusy info and return object    SugarVCalClient.prototype.parseResults = function(textResult, adjusted){      var match = /FREEBUSY.*?\:([\w]+)\/([\w]+)/g;    //  datetime = new SugarDateTime();      var result;      var timehash = new Object();      var dst_start;      var dst_end;	  if(GLOBAL_REGISTRY.current_user.fields.dst_start == null) 	  	dst_start = '19700101T000000Z';	  else 		dst_start = GLOBAL_REGISTRY.current_user.fields.dst_start.replace(/ /gi, 'T').replace(/:/gi,'').replace(/-/gi,'') + 'Z';			  if(GLOBAL_REGISTRY.current_user.fields.dst_end == null) 			  	dst_end = '19700101T000000Z';      else    		dst_end = GLOBAL_REGISTRY.current_user.fields.dst_end.replace(/ /gi, 'T').replace(/:/gi,'').replace(/-/gi,'') + 'Z';   		      gmt_offset_secs = GLOBAL_REGISTRY.current_user.fields.gmt_offset * 60;      // loop thru all FREEBUSY matches      while(((result= match.exec(textResult))) != null)      {        var startdate;        var enddate;      	if(adjusted) {// send back adjusted for current_user		  startdate = SugarDateTime.parseAdjustedDate(result[1], dst_start, dst_end, gmt_offset_secs);          enddate = SugarDateTime.parseAdjustedDate(result[2], dst_start, dst_end, gmt_offset_secs);      	}      	else { // GMT	      startdate = SugarDateTime.parseUTCDate(result[1]);          enddate = SugarDateTime.parseUTCDate(result[2]);	    }        var startmins = startdate.getUTCMinutes();        // pick the start slot based on the minutes        if ( startmins >= 0 && startmins < 15) {          startdate.setUTCMinutes(0);        }        else if ( startmins >= 15 && startmins < 30) {          startdate.setUTCMinutes(15);        }        else if ( startmins >= 30 && startmins < 45) {          startdate.setUTCMinutes(30);        }        else {          startdate.setUTCMinutes(45);        }         // starting at startdate, create hash of each busy 15 min         // timeslot and store as a key        for(var i=0;i<100;i++)        {          if (startdate.valueOf() < enddate.valueOf())          {            var hash = SugarDateTime.getUTCHash(startdate);            if (typeof (timehash[hash]) == 'undefined')            {              timehash[hash] = 0;                        }            timehash[hash] += 1;                        startdate = new Date(startdate.valueOf()+(15*60*1000));          }          else          {            break;          }        }      }      return timehash;      }    SugarVCalClient.parseResults = SugarVCalClient.prototype.parseResults;//////////////////////////////////////////////////// class: SugarRPCClient// wrapper around async JSON-RPC client class// //////////////////////////////////////////////////SugarRPCClient.allowed_methods = ['retrieve','query','save','set_accept_status','get_objects_from_module', 'email', 'get_user_array', 'get_full_list'];SugarClass.inherit("SugarRPCClient","SugarClass");function SugarRPCClient() {	this.init();}/* * PUT NEW METHODS IN THIS ARRAY: */SugarRPCClient.prototype.allowed_methods = ['retrieve','query','save','set_accept_status', 'get_objects_from_module', 'email', 'get_user_array', 'get_full_list'];SugarRPCClient.prototype.init = function() {	this._serviceProxy;	this._showError= function (e){ 		alert("ERROR CONNECTING to: ./index.php?entryPoint=json_server.php, ERROR:"+e); 	}	this.serviceURL = './index.php?entryPoint=json_server';	this._serviceProxy = new jsonrpc.ServiceProxy(this.serviceURL,this.allowed_methods);}// send a 3rd argument of value 'true' to make the call synchronous.// in synchronous mode, the return will be the result.// in asynchronous mode, the return will be the request_id to map the call-back function to.SugarRPCClient.prototype.call_method = function(method,args) {	var self=this;	try {	  	var the_result;  			if(arguments.length == 3 && arguments[2] == true) {	  		// aha! fooled you! this function can be called synchronous!			the_result = this._serviceProxy[method](args);		} else {	  		// make the call asynchronous  			this._serviceProxy[method](args, method_callback);  			the_result = this._serviceProxy.httpConn.request_id;		}		return the_result;	} catch(e) {//error before calling server		this._showError(e);	}}var global_rpcClient =  new SugarRPCClient();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -