更新语言文件
+YUCHENG HU+ git-svn-id: https://svn.code.sf.net/p/hawebs/svn@365 a2543c7e-f6e9-4f8a-8bff-1ffc34733512
This commit is contained in:
Binary file not shown.
@@ -0,0 +1,86 @@
|
||||
<?php /* Smarty version 2.6.18, created on 2010-06-19 03:27:06
|
||||
compiled from modules/PickList/AddPickList.tpl */ ?>
|
||||
<div style="position:relative;display: block;" id="orgLay" class="layerPopup">
|
||||
<table border="0" cellpadding="5" cellspacing="0" class="layerHeadingULine">
|
||||
<tr>
|
||||
<td class="layerPopupHeading" align="left" width="40%" nowrap><?php echo $this->_tpl_vars['MOD']['ADD_PICKLIST_VALUES']; ?>
|
||||
- <?php echo $this->_tpl_vars['FIELDLABEL']; ?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100%>
|
||||
<tr>
|
||||
<td rowspan=3 valign=top align=left width=250px;>
|
||||
<b><?php echo $this->_tpl_vars['MOD']['LBL_EXISTING_PICKLIST_VALUES']; ?>
|
||||
</b>
|
||||
<div id="add_availPickList" name="availList" style="overflow:auto; height: 150px;width:200px;border:1px solid #666666;font-family:Arial, Helvetica, sans-serif;font-size:11px;">
|
||||
<table style="padding-left:5px" cellpadding="0" cellspacing="3" width="100%">
|
||||
<?php $_from = $this->_tpl_vars['PICKVAL']; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); }if (count($_from)):
|
||||
foreach ($_from as $this->_tpl_vars['pick_val']):
|
||||
?>
|
||||
<tr style="background-color: #ffffff;">
|
||||
<td>
|
||||
<span class="picklist_existing_options"><?php echo $this->_tpl_vars['pick_val']; ?>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; endif; unset($_from); ?>
|
||||
</table>
|
||||
</div>
|
||||
<br>
|
||||
<?php if (is_array ( $this->_tpl_vars['NONEDITPICKLIST'] )): ?>
|
||||
<b><?php echo $this->_tpl_vars['MOD']['LBL_NON_EDITABLE_PICKLIST_ENTRIES']; ?>
|
||||
:</b>
|
||||
<div id="nonedit_pl_values" name="availList" style="overflow:auto; height: 150px;width:200px;border:1px solid #666666;font-family:Arial, Helvetica, sans-serif;font-size:11px;">
|
||||
<table style="padding-left:5px" cellspacing="3" cellpadding="0" width="100%">
|
||||
<?php $_from = $this->_tpl_vars['NONEDITPICKLIST']; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); }if (count($_from)):
|
||||
foreach ($_from as $this->_tpl_vars['nonedit']):
|
||||
?>
|
||||
<tr style="background-color: #ffffff;">
|
||||
<td>
|
||||
<span class="picklist_noneditable_options">
|
||||
<?php echo $this->_tpl_vars['nonedit']; ?>
|
||||
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; endif; unset($_from); ?>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
|
||||
<td valign=top align=left width=300px;>
|
||||
<b><?php echo $this->_tpl_vars['MOD']['LBL_PICKLIST_ADDINFO']; ?>
|
||||
</b>
|
||||
<textarea id="add_picklist_values" class="detailedViewTextBox" align="left" rows="10"></textarea>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign=top align=left width=300px;>
|
||||
<b><?php echo $this->_tpl_vars['MOD']['LBL_SELECT_ROLES']; ?>
|
||||
</b><br />
|
||||
<select id="add_availRoles" multiple="multiple" wrap size="5" name="add_availRoles" style="width:250px;border:1px solid #666666;font-family:Arial, Helvetica, sans-serif;font-size:11px;">
|
||||
<?php $_from = $this->_tpl_vars['ROLEDETAILS']; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); }if (count($_from)):
|
||||
foreach ($_from as $this->_tpl_vars['role_id'] => $this->_tpl_vars['role_details']):
|
||||
?>
|
||||
<option value="<?php echo $this->_tpl_vars['role_id']; ?>
|
||||
"><?php echo $this->_tpl_vars['role_details']['0']; ?>
|
||||
</option>
|
||||
<?php endforeach; endif; unset($_from); ?>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign=top align=right>
|
||||
<input type="button" value="<?php echo $this->_tpl_vars['APP']['LBL_SAVE_BUTTON_LABEL']; ?>
|
||||
" id="saveAddButton" name="save" class="crmButton small edit" onclick="validateAdd('<?php echo $this->_tpl_vars['FIELDNAME']; ?>
|
||||
','<?php echo $this->_tpl_vars['MODULE']; ?>
|
||||
');">
|
||||
<input type="button" value="<?php echo $this->_tpl_vars['APP']['LBL_CANCEL_BUTTON_LABEL']; ?>
|
||||
" name="cancel" class="crmButton small cancel" onclick="fnhide('actiondiv');">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php /* Smarty version 2.6.18, created on 2010-06-19 07:52:30
|
||||
compiled from modules/PickList/ShowRoleSelect.tpl */ ?>
|
||||
<b><?php echo $this->_tpl_vars['MOD']['LBL_SELECT_ROLES']; ?>
|
||||
</b><br>
|
||||
<select multiple id="roleselect" name="roleselect" class="small crmFormList" style="overflow:auto; height: 80px;width:200px;border:1px solid #666666;font-family:Arial, Helvetica, sans-serif;font-size:11px;">
|
||||
<?php $_from = $this->_tpl_vars['ROLES']; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); }if (count($_from)):
|
||||
foreach ($_from as $this->_tpl_vars['roleid'] => $this->_tpl_vars['rolename']):
|
||||
?>
|
||||
<option value="<?php echo $this->_tpl_vars['roleid']; ?>
|
||||
"><?php echo $this->_tpl_vars['rolename']; ?>
|
||||
</option>
|
||||
<?php endforeach; endif; unset($_from); ?>
|
||||
</select>
|
||||
+82
-54
@@ -1,10 +1,68 @@
|
||||
O:9:"MagpieRSS":23:{s:6:"parser";i:0;s:12:"current_item";a:0:{}s:5:"items";a:20:{i:0;a:8:{s:5:"title";s:57:"如何添加“事件”中的选项才能正确显示?";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=794";s:11:"description";s:873:"我在下拉框编辑项的事件中,在电话、会议外添加“通知、备忘”等选项,但在客户中添加“通知”的相应内容时,在成功保存后却无法显示。但在事件还可以找到相应的内容,就是无法与客户相联系。只有修改电话或者会议后,才可以捆绑两者的联系并成功显示。
|
||||
请问应该如何设 ...
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/XarHRDi4joq257_rGZcN0ozdBLU/0/da"><img src="http://feedads.g.doubleclick.net/~a/XarHRDi4joq257_rGZcN0ozdBLU/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/XarHRDi4joq257_rGZcN0ozdBLU/1/da"><img src="http://feedads.g.doubleclick.net/~a/XarHRDi4joq257_rGZcN0ozdBLU/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/dFG3wJFIi9k" height="1" width="1"/>";s:8:"category";s:6:"Vtiger";s:6:"author";s:9:"southlion";s:7:"pubdate";s:31:"Thu, 17 Jun 2010 13:43:17 +0000";s:7:"summary";s:873:"我在下拉框编辑项的事件中,在电话、会议外添加“通知、备忘”等选项,但在客户中添加“通知”的相应内容时,在成功保存后却无法显示。但在事件还可以找到相应的内容,就是无法与客户相联系。只有修改电话或者会议后,才可以捆绑两者的联系并成功显示。
|
||||
请问应该如何设 ...
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/XarHRDi4joq257_rGZcN0ozdBLU/0/da"><img src="http://feedads.g.doubleclick.net/~a/XarHRDi4joq257_rGZcN0ozdBLU/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/XarHRDi4joq257_rGZcN0ozdBLU/1/da"><img src="http://feedads.g.doubleclick.net/~a/XarHRDi4joq257_rGZcN0ozdBLU/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/dFG3wJFIi9k" height="1" width="1"/>";s:14:"date_timestamp";i:1276782197;}i:1;a:8:{s:5:"title";s:21:"网页邮件不能用";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=786";s:11:"description";s:833:"VT有个网页邮件的功能,我点击的时候提示我:
|
||||
O:9:"MagpieRSS":23:{s:6:"parser";i:0;s:12:"current_item";a:0:{}s:5:"items";a:20:{i:0;a:8:{s:5:"title";s:73:"有一个问题: 下拉框编辑的界面是乱码,我该怎么处理呢?";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=801";s:11:"description";s:765:"有一个问题: 下拉框编辑的界面是乱码,我该怎么处理呢? 我哪里弄错了? 如果修改,我怎么修改呢? 谢谢了!
|
||||
|
||||
另外:下拉框编辑我怎么改动不成功呢?好像缺少按钮了! 我的系统缺少文件?
|
||||
|
||||
|
||||
截图如下:
|
||||
|
||||
1419[/attach] ...
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/AeuFD-CLIgeDtBAsHL86CqgqxEc/0/da"><img src="http://feedads.g.doubleclick.net/~a/AeuFD-CLIgeDtBAsHL86CqgqxEc/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/AeuFD-CLIgeDtBAsHL86CqgqxEc/1/da"><img src="http://feedads.g.doubleclick.net/~a/AeuFD-CLIgeDtBAsHL86CqgqxEc/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/jjI1ts7ERFU" height="1" width="1"/>";s:8:"category";s:6:"Vtiger";s:6:"author";s:11:"davidyang99";s:7:"pubdate";s:31:"Fri, 18 Jun 2010 16:10:37 +0000";s:7:"summary";s:765:"有一个问题: 下拉框编辑的界面是乱码,我该怎么处理呢? 我哪里弄错了? 如果修改,我怎么修改呢? 谢谢了!
|
||||
|
||||
另外:下拉框编辑我怎么改动不成功呢?好像缺少按钮了! 我的系统缺少文件?
|
||||
|
||||
|
||||
截图如下:
|
||||
|
||||
1419[/attach] ...
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/AeuFD-CLIgeDtBAsHL86CqgqxEc/0/da"><img src="http://feedads.g.doubleclick.net/~a/AeuFD-CLIgeDtBAsHL86CqgqxEc/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/AeuFD-CLIgeDtBAsHL86CqgqxEc/1/da"><img src="http://feedads.g.doubleclick.net/~a/AeuFD-CLIgeDtBAsHL86CqgqxEc/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/jjI1ts7ERFU" height="1" width="1"/>";s:14:"date_timestamp";i:1276877437;}i:1;a:8:{s:5:"title";s:70:"求救: 这个问题怎么解决?文件管理无法浏览上传文件?";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=800";s:11:"description";s:684:"在"文件管理"下面,怎么把文件增加进去呢? 没有浏览菜单呀! 谁有类似的问题呀? 还是我哪里错了? 帮忙解决一下,谢谢!
|
||||
|
||||
截图如下:
|
||||
1418[/attach]
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/MsOwAKT53AGZ1GQyxHC3E-hmWpY/0/da"><img src="http://feedads.g.doubleclick.net/~a/MsOwAKT53AGZ1GQyxHC3E-hmWpY/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/MsOwAKT53AGZ1GQyxHC3E-hmWpY/1/da"><img src="http://feedads.g.doubleclick.net/~a/MsOwAKT53AGZ1GQyxHC3E-hmWpY/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/iPad4WQ7W2c" height="1" width="1"/>";s:8:"category";s:6:"Vtiger";s:6:"author";s:11:"davidyang99";s:7:"pubdate";s:31:"Fri, 18 Jun 2010 15:58:26 +0000";s:7:"summary";s:684:"在"文件管理"下面,怎么把文件增加进去呢? 没有浏览菜单呀! 谁有类似的问题呀? 还是我哪里错了? 帮忙解决一下,谢谢!
|
||||
|
||||
截图如下:
|
||||
1418[/attach]
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/MsOwAKT53AGZ1GQyxHC3E-hmWpY/0/da"><img src="http://feedads.g.doubleclick.net/~a/MsOwAKT53AGZ1GQyxHC3E-hmWpY/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/MsOwAKT53AGZ1GQyxHC3E-hmWpY/1/da"><img src="http://feedads.g.doubleclick.net/~a/MsOwAKT53AGZ1GQyxHC3E-hmWpY/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/iPad4WQ7W2c" height="1" width="1"/>";s:14:"date_timestamp";i:1276876706;}i:2;a:8:{s:5:"title";s:79:"大家有没有遇到过这样的问题。invoice生成pdf文件成这个样子";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=799";s:11:"description";s:830:"[i=s] 本帖最后由 tkboy 于 2010-6-18 20:04 编辑 [/i]
|
||||
|
||||
1416[/attach]
|
||||
|
||||
|
||||
|
||||
|
||||
在saleorder生成的pdf却没问题。六页每页6个产品。而在invoice生成第二页就不行了。而且还生成了五百多页
|
||||
|
||||
|
||||
1417[/attach]
|
||||
|
||||
还有个情况就是在数量多的产品和产品描述很长的时候就会出现这个情况。12 ...
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/dsqFpbckFl10tc9N0bXKxFqacl4/0/da"><img src="http://feedads.g.doubleclick.net/~a/dsqFpbckFl10tc9N0bXKxFqacl4/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/dsqFpbckFl10tc9N0bXKxFqacl4/1/da"><img src="http://feedads.g.doubleclick.net/~a/dsqFpbckFl10tc9N0bXKxFqacl4/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/4drEqkqFO_c" height="1" width="1"/>";s:8:"category";s:6:"Vtiger";s:6:"author";s:5:"tkboy";s:7:"pubdate";s:31:"Fri, 18 Jun 2010 11:58:43 +0000";s:7:"summary";s:830:"[i=s] 本帖最后由 tkboy 于 2010-6-18 20:04 编辑 [/i]
|
||||
|
||||
1416[/attach]
|
||||
|
||||
|
||||
|
||||
|
||||
在saleorder生成的pdf却没问题。六页每页6个产品。而在invoice生成第二页就不行了。而且还生成了五百多页
|
||||
|
||||
|
||||
1417[/attach]
|
||||
|
||||
还有个情况就是在数量多的产品和产品描述很长的时候就会出现这个情况。12 ...
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/dsqFpbckFl10tc9N0bXKxFqacl4/0/da"><img src="http://feedads.g.doubleclick.net/~a/dsqFpbckFl10tc9N0bXKxFqacl4/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/dsqFpbckFl10tc9N0bXKxFqacl4/1/da"><img src="http://feedads.g.doubleclick.net/~a/dsqFpbckFl10tc9N0bXKxFqacl4/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/4drEqkqFO_c" height="1" width="1"/>";s:14:"date_timestamp";i:1276862323;}i:3;a:8:{s:5:"title";s:57:"如何添加“事件”中的选项才能正确显示?";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=794";s:11:"description";s:875:"我在下拉框编辑项的事件中,在电话、会议外添加“通知、备忘”等选项,但在客户中添加“通知”的相应内容时,在成功保存后却无法显示。但在事件还可以找到相应的内容,就是无法与客户相联系。只有修改电话或者会议后,才可以捆绑两者的联系并成功显示。
|
||||
|
||||
请问应该如何设置添 ...
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/cUYsSXFH5pUDZLYJadEoIFz6j70/0/da"><img src="http://feedads.g.doubleclick.net/~a/cUYsSXFH5pUDZLYJadEoIFz6j70/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/cUYsSXFH5pUDZLYJadEoIFz6j70/1/da"><img src="http://feedads.g.doubleclick.net/~a/cUYsSXFH5pUDZLYJadEoIFz6j70/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/dFG3wJFIi9k" height="1" width="1"/>";s:8:"category";s:6:"Vtiger";s:6:"author";s:9:"southlion";s:7:"pubdate";s:31:"Thu, 17 Jun 2010 13:43:17 +0000";s:7:"summary";s:875:"我在下拉框编辑项的事件中,在电话、会议外添加“通知、备忘”等选项,但在客户中添加“通知”的相应内容时,在成功保存后却无法显示。但在事件还可以找到相应的内容,就是无法与客户相联系。只有修改电话或者会议后,才可以捆绑两者的联系并成功显示。
|
||||
|
||||
请问应该如何设置添 ...
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/cUYsSXFH5pUDZLYJadEoIFz6j70/0/da"><img src="http://feedads.g.doubleclick.net/~a/cUYsSXFH5pUDZLYJadEoIFz6j70/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/cUYsSXFH5pUDZLYJadEoIFz6j70/1/da"><img src="http://feedads.g.doubleclick.net/~a/cUYsSXFH5pUDZLYJadEoIFz6j70/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/dFG3wJFIi9k" height="1" width="1"/>";s:14:"date_timestamp";i:1276782197;}i:4;a:8:{s:5:"title";s:21:"网页邮件不能用";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=786";s:11:"description";s:833:"VT有个网页邮件的功能,我点击的时候提示我:
|
||||
|
||||
无法连接到邮件服务器。请检查邮件服务器的细节 这. 请 点击这里 电子邮件模块 [/b]
|
||||
|
||||
@@ -26,7 +84,7 @@ http://forums.hawebs.net/computer/viewthread.php?tid=221&highli ...
|
||||
之前看了这个帖子:
|
||||
http://forums.hawebs.net/computer/viewthread.php?tid=221&highli ...
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/lgwAETMtVX_rItZGhYCWNfGahww/0/da"><img src="http://feedads.g.doubleclick.net/~a/lgwAETMtVX_rItZGhYCWNfGahww/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/lgwAETMtVX_rItZGhYCWNfGahww/1/da"><img src="http://feedads.g.doubleclick.net/~a/lgwAETMtVX_rItZGhYCWNfGahww/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/CS8Kf5bvDdQ" height="1" width="1"/>";s:14:"date_timestamp";i:1276670948;}i:2;a:8:{s:5:"title";s:24:"导出数据乱码问题";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=767";s:11:"description";s:853:"[i=s] 本帖最后由 mydream 于 2010-6-12 19:21 编辑 [/i]
|
||||
<a href="http://feedads.g.doubleclick.net/~a/lgwAETMtVX_rItZGhYCWNfGahww/1/da"><img src="http://feedads.g.doubleclick.net/~a/lgwAETMtVX_rItZGhYCWNfGahww/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/CS8Kf5bvDdQ" height="1" width="1"/>";s:14:"date_timestamp";i:1276670948;}i:5;a:8:{s:5:"title";s:24:"导出数据乱码问题";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=767";s:11:"description";s:853:"[i=s] 本帖最后由 mydream 于 2010-6-12 19:21 编辑 [/i]
|
||||
|
||||
选择导出用户资料,都是乱码,我用数据库工具查看表中数据也是乱码。字符集编码我已经设置为utf-8了,这是为什么呢。。。。。
|
||||
|
||||
@@ -42,7 +100,7 @@ http://forums.hawebs.net/computer/viewthread.php?tid=221&highli ...
|
||||
|
||||
就是在导出客户信息或者其他数据的时候,到处成一个e ...
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/0-dZWCinRRj9oTXgEtdQ78yJXXs/0/da"><img src="http://feedads.g.doubleclick.net/~a/0-dZWCinRRj9oTXgEtdQ78yJXXs/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/0-dZWCinRRj9oTXgEtdQ78yJXXs/1/da"><img src="http://feedads.g.doubleclick.net/~a/0-dZWCinRRj9oTXgEtdQ78yJXXs/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/gVBeBvw_zwU" height="1" width="1"/>";s:14:"date_timestamp";i:1276332879;}i:3;a:8:{s:5:"title";s:53:"唉 纠结啊 vtiger生成的pdf文档还是有问题";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=766";s:11:"description";s:675:"vtiger V5.1版本还有 5.2版本生成的pdf文档中折扣和税款部分显示的数字不能超过3位
|
||||
<a href="http://feedads.g.doubleclick.net/~a/0-dZWCinRRj9oTXgEtdQ78yJXXs/1/da"><img src="http://feedads.g.doubleclick.net/~a/0-dZWCinRRj9oTXgEtdQ78yJXXs/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/gVBeBvw_zwU" height="1" width="1"/>";s:14:"date_timestamp";i:1276332879;}i:6;a:8:{s:5:"title";s:53:"唉 纠结啊 vtiger生成的pdf文档还是有问题";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=766";s:11:"description";s:675:"vtiger V5.1版本还有 5.2版本生成的pdf文档中折扣和税款部分显示的数字不能超过3位
|
||||
订单上的金额
|
||||
1327[/attach]
|
||||
生成pdf文档上面的金额
|
||||
@@ -54,7 +112,7 @@ http://forums.hawebs.net/computer/viewthread.php?tid=221&highli ...
|
||||
生成pdf文档上面的金额
|
||||
1328[/attach]
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/n0Eb83FseypSc-OlBkM5IeASSEQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/n0Eb83FseypSc-OlBkM5IeASSEQ/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/n0Eb83FseypSc-OlBkM5IeASSEQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/n0Eb83FseypSc-OlBkM5IeASSEQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/oQD-RzXgLno" height="1" width="1"/>";s:14:"date_timestamp";i:1276327521;}i:4;a:8:{s:5:"title";s:59:"请教vtiger V5.1备份数据库功能使用后如何还原";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=765";s:11:"description";s:750:"这几天玩vtiger 突然发现两个问题
|
||||
<a href="http://feedads.g.doubleclick.net/~a/n0Eb83FseypSc-OlBkM5IeASSEQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/n0Eb83FseypSc-OlBkM5IeASSEQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/oQD-RzXgLno" height="1" width="1"/>";s:14:"date_timestamp";i:1276327521;}i:7;a:8:{s:5:"title";s:59:"请教vtiger V5.1备份数据库功能使用后如何还原";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=765";s:11:"description";s:750:"这几天玩vtiger 突然发现两个问题
|
||||
|
||||
1.vtiger V5.1里的备份数据库功能是否是备份所有的数据?(包含客户资料、自己上传的文件等)
|
||||
|
||||
@@ -74,7 +132,7 @@ http://forums.hawebs.net/computer/viewthread.php?tid=221&highli ...
|
||||
|
||||
嘿嘿 ...
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/PJk7QixogYiJVtnwiFKfqj3-ugQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/PJk7QixogYiJVtnwiFKfqj3-ugQ/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/PJk7QixogYiJVtnwiFKfqj3-ugQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/PJk7QixogYiJVtnwiFKfqj3-ugQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/W9WQgEooVpA" height="1" width="1"/>";s:14:"date_timestamp";i:1276306122;}i:5;a:8:{s:5:"title";s:70:"vTiger 运行时出现错误 Sorry! Attempt to access restricted file.";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=762";s:11:"description";s:660:"vTiger 运行时出现错误
|
||||
<a href="http://feedads.g.doubleclick.net/~a/PJk7QixogYiJVtnwiFKfqj3-ugQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/PJk7QixogYiJVtnwiFKfqj3-ugQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/W9WQgEooVpA" height="1" width="1"/>";s:14:"date_timestamp";i:1276306122;}i:8;a:8:{s:5:"title";s:70:"vTiger 运行时出现错误 Sorry! Attempt to access restricted file.";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=762";s:11:"description";s:660:"vTiger 运行时出现错误
|
||||
|
||||
Sorry! Attempt to access restricted file.
|
||||
|
||||
@@ -90,7 +148,7 @@ Sorry! Attempt to access restricted file.
|
||||
|
||||
这是因为 vTiger 的运行配置文件的文件绝对路径配置不正确。
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/mf_aGcPGL34AQ9077Nd37AKu6Dk/0/da"><img src="http://feedads.g.doubleclick.net/~a/mf_aGcPGL34AQ9077Nd37AKu6Dk/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/mf_aGcPGL34AQ9077Nd37AKu6Dk/1/da"><img src="http://feedads.g.doubleclick.net/~a/mf_aGcPGL34AQ9077Nd37AKu6Dk/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/MtrpWokywJc" height="1" width="1"/>";s:14:"date_timestamp";i:1276287837;}i:6;a:8:{s:5:"title";s:60:"解决Vtiger在导出PDF文件中文字符为乱码的方法";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=761";s:11:"description";s:846:"使用中发现Vtiger在导出PDF文件的时候,中文字符为乱码,按照网上介绍的方法,结合此版本,找到了解决的方法,此问题的主要原因在于tcpdf中对字符的引用问题,如果使用的是Vtiger5.1版本中自
|
||||
<a href="http://feedads.g.doubleclick.net/~a/mf_aGcPGL34AQ9077Nd37AKu6Dk/1/da"><img src="http://feedads.g.doubleclick.net/~a/mf_aGcPGL34AQ9077Nd37AKu6Dk/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/MtrpWokywJc" height="1" width="1"/>";s:14:"date_timestamp";i:1276287837;}i:9;a:8:{s:5:"title";s:60:"解决Vtiger在导出PDF文件中文字符为乱码的方法";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=761";s:11:"description";s:846:"使用中发现Vtiger在导出PDF文件的时候,中文字符为乱码,按照网上介绍的方法,结合此版本,找到了解决的方法,此问题的主要原因在于tcpdf中对字符的引用问题,如果使用的是Vtiger5.1版本中自
|
||||
|
||||
带的tcpdf,仅需要修改include\tcpdf\tcpdf.php文件即可。将文件中2674行的
|
||||
$fami ...
|
||||
@@ -100,7 +158,7 @@ $fami ...
|
||||
带的tcpdf,仅需要修改include\tcpdf\tcpdf.php文件即可。将文件中2674行的
|
||||
$fami ...
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/Jr5IQ8CiUg70flWlIDNb5n_LsOA/0/da"><img src="http://feedads.g.doubleclick.net/~a/Jr5IQ8CiUg70flWlIDNb5n_LsOA/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/Jr5IQ8CiUg70flWlIDNb5n_LsOA/1/da"><img src="http://feedads.g.doubleclick.net/~a/Jr5IQ8CiUg70flWlIDNb5n_LsOA/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/c9HyEnYCTg8" height="1" width="1"/>";s:14:"date_timestamp";i:1276264329;}i:7;a:8:{s:5:"title";s:32:"PBXManager 语言文件已发布";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=759";s:11:"description";s:803:"PBXManager 的中文语言文件已经发布到 SVN 服务器上了
|
||||
<a href="http://feedads.g.doubleclick.net/~a/Jr5IQ8CiUg70flWlIDNb5n_LsOA/1/da"><img src="http://feedads.g.doubleclick.net/~a/Jr5IQ8CiUg70flWlIDNb5n_LsOA/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/c9HyEnYCTg8" height="1" width="1"/>";s:14:"date_timestamp";i:1276264329;}i:10;a:8:{s:5:"title";s:32:"PBXManager 语言文件已发布";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=759";s:11:"description";s:803:"PBXManager 的中文语言文件已经发布到 SVN 服务器上了
|
||||
|
||||
地址为
|
||||
|
||||
@@ -120,11 +178,11 @@ http://hawebs.svn.sourceforge.net/viewvc/hawebs/oss/vtiger/trunk/modules/PBXMana
|
||||
|
||||
在使用手机方式的时候,如果你是 ...
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/RfppX8rLXtoWonz2Kfn_tYKFi2I/0/da"><img src="http://feedads.g.doubleclick.net/~a/RfppX8rLXtoWonz2Kfn_tYKFi2I/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/RfppX8rLXtoWonz2Kfn_tYKFi2I/1/da"><img src="http://feedads.g.doubleclick.net/~a/RfppX8rLXtoWonz2Kfn_tYKFi2I/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/feepvxbMlcU" height="1" width="1"/>";s:14:"date_timestamp";i:1276197531;}i:8;a:8:{s:5:"title";s:15:"总算回来了";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=757";s:11:"description";s:506:"真不容易啊
|
||||
<a href="http://feedads.g.doubleclick.net/~a/RfppX8rLXtoWonz2Kfn_tYKFi2I/1/da"><img src="http://feedads.g.doubleclick.net/~a/RfppX8rLXtoWonz2Kfn_tYKFi2I/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/feepvxbMlcU" height="1" width="1"/>";s:14:"date_timestamp";i:1276197531;}i:11;a:8:{s:5:"title";s:15:"总算回来了";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=757";s:11:"description";s:506:"真不容易啊
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/lCLKAuWqZ_lYxl9TpcZr7nchc2A/0/da"><img src="http://feedads.g.doubleclick.net/~a/lCLKAuWqZ_lYxl9TpcZr7nchc2A/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/lCLKAuWqZ_lYxl9TpcZr7nchc2A/1/da"><img src="http://feedads.g.doubleclick.net/~a/lCLKAuWqZ_lYxl9TpcZr7nchc2A/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/F8EcWz-SmII" height="1" width="1"/>";s:8:"category";s:6:"Vtiger";s:6:"author";s:5:"qqing";s:7:"pubdate";s:31:"Thu, 10 Jun 2010 05:48:50 +0000";s:7:"summary";s:506:"真不容易啊
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/lCLKAuWqZ_lYxl9TpcZr7nchc2A/0/da"><img src="http://feedads.g.doubleclick.net/~a/lCLKAuWqZ_lYxl9TpcZr7nchc2A/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/lCLKAuWqZ_lYxl9TpcZr7nchc2A/1/da"><img src="http://feedads.g.doubleclick.net/~a/lCLKAuWqZ_lYxl9TpcZr7nchc2A/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/F8EcWz-SmII" height="1" width="1"/>";s:14:"date_timestamp";i:1276148930;}i:9;a:8:{s:5:"title";s:66:"找到一个易客集成Discuz组件包望高手能整合到vtiger";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=756";s:11:"description";s:823:"不多说上附件
|
||||
<a href="http://feedads.g.doubleclick.net/~a/lCLKAuWqZ_lYxl9TpcZr7nchc2A/1/da"><img src="http://feedads.g.doubleclick.net/~a/lCLKAuWqZ_lYxl9TpcZr7nchc2A/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/F8EcWz-SmII" height="1" width="1"/>";s:14:"date_timestamp";i:1276148930;}i:12;a:8:{s:5:"title";s:66:"找到一个易客集成Discuz组件包望高手能整合到vtiger";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=756";s:11:"description";s:823:"不多说上附件
|
||||
易客CRM集成Discuz5.0论坛的教程在引用里
|
||||
易客CRM集成Discuz5.0论坛
|
||||
安装步骤:
|
||||
@@ -144,7 +202,7 @@ http://hawebs.svn.sourceforge.net/viewvc/hawebs/oss/vtiger/trunk/modules/PBXMana
|
||||
|
||||
4)通过phpmyadmin导入bbs/discuz5.sql文件到CRM数据库中 ...
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/9oVB9nNSFGiIXKlojpFUsTiTdOE/0/da"><img src="http://feedads.g.doubleclick.net/~a/9oVB9nNSFGiIXKlojpFUsTiTdOE/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/9oVB9nNSFGiIXKlojpFUsTiTdOE/1/da"><img src="http://feedads.g.doubleclick.net/~a/9oVB9nNSFGiIXKlojpFUsTiTdOE/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/v_T6vNl2qP8" height="1" width="1"/>";s:14:"date_timestamp";i:1276136267;}i:10;a:8:{s:5:"title";s:48:"如何在 vTiger 5.1 中使用手机扩展模块";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=755";s:11:"description";s:830:"假设当前你已经成功的安装了手机扩展模块。
|
||||
<a href="http://feedads.g.doubleclick.net/~a/9oVB9nNSFGiIXKlojpFUsTiTdOE/1/da"><img src="http://feedads.g.doubleclick.net/~a/9oVB9nNSFGiIXKlojpFUsTiTdOE/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/v_T6vNl2qP8" height="1" width="1"/>";s:14:"date_timestamp";i:1276136267;}i:13;a:8:{s:5:"title";s:48:"如何在 vTiger 5.1 中使用手机扩展模块";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=755";s:11:"description";s:830:"假设当前你已经成功的安装了手机扩展模块。
|
||||
|
||||
使用手机访问的地址为:
|
||||
|
||||
@@ -172,7 +230,7 @@ http://192.168.1.102/modules/Mobile[/url]
|
||||
|
||||
在你手机上输入上述地址,如果你的这个模块是部署在公共网 ...
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/IBnLaaHGpRODM5vqo0G1PqDR9F4/0/da"><img src="http://feedads.g.doubleclick.net/~a/IBnLaaHGpRODM5vqo0G1PqDR9F4/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/IBnLaaHGpRODM5vqo0G1PqDR9F4/1/da"><img src="http://feedads.g.doubleclick.net/~a/IBnLaaHGpRODM5vqo0G1PqDR9F4/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/YHw9Y5Rwe80" height="1" width="1"/>";s:14:"date_timestamp";i:1276099691;}i:11;a:8:{s:5:"title";s:41:"vtiger 5.1 手机扩展模块安装过程";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=754";s:11:"description";s:831:"vTiger CRM 的移动扩展模块主要是向移动设备能够提供一个基本的 WEB 界面。
|
||||
<a href="http://feedads.g.doubleclick.net/~a/IBnLaaHGpRODM5vqo0G1PqDR9F4/1/da"><img src="http://feedads.g.doubleclick.net/~a/IBnLaaHGpRODM5vqo0G1PqDR9F4/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/YHw9Y5Rwe80" height="1" width="1"/>";s:14:"date_timestamp";i:1276099691;}i:14;a:8:{s:5:"title";s:41:"vtiger 5.1 手机扩展模块安装过程";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=754";s:11:"description";s:831:"vTiger CRM 的移动扩展模块主要是向移动设备能够提供一个基本的 WEB 界面。
|
||||
|
||||
首先你需要下载 Mobile 的扩展插件,插件版本被表述为 Mobile-x.y.zip, 你可以通过 Google 进行搜索,也可以在本站里面查找。
|
||||
|
||||
@@ -188,11 +246,11 @@ http://192.168.1.102/modules/Mobile[/url]
|
||||
|
||||
[url=http://forums.hawebs.net/computer/ ...
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/0ed-LJbjoH3Ll3WLGTrTz19v9w4/0/da"><img src="http://feedads.g.doubleclick.net/~a/0ed-LJbjoH3Ll3WLGTrTz19v9w4/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/0ed-LJbjoH3Ll3WLGTrTz19v9w4/1/da"><img src="http://feedads.g.doubleclick.net/~a/0ed-LJbjoH3Ll3WLGTrTz19v9w4/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/31I6IYmYVl4" height="1" width="1"/>";s:14:"date_timestamp";i:1276098343;}i:12;a:8:{s:5:"title";s:52:"vtiger CRM 5.1.0手机扩展插件的安装与使用";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=752";s:11:"description";s:565:"不多说了.有需要的朋友自己去下载附件,自己去安装使用
|
||||
<a href="http://feedads.g.doubleclick.net/~a/0ed-LJbjoH3Ll3WLGTrTz19v9w4/1/da"><img src="http://feedads.g.doubleclick.net/~a/0ed-LJbjoH3Ll3WLGTrTz19v9w4/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/31I6IYmYVl4" height="1" width="1"/>";s:14:"date_timestamp";i:1276098343;}i:15;a:8:{s:5:"title";s:52:"vtiger CRM 5.1.0手机扩展插件的安装与使用";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=752";s:11:"description";s:565:"不多说了.有需要的朋友自己去下载附件,自己去安装使用
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/k5kpgf7g4GM1-uPQ8VCBX-_SRJQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/k5kpgf7g4GM1-uPQ8VCBX-_SRJQ/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/k5kpgf7g4GM1-uPQ8VCBX-_SRJQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/k5kpgf7g4GM1-uPQ8VCBX-_SRJQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/OoSeEIbTHK8" height="1" width="1"/>";s:8:"category";s:6:"Vtiger";s:6:"author";s:7:"dasunny";s:7:"pubdate";s:31:"Wed, 09 Jun 2010 01:20:35 +0000";s:7:"summary";s:565:"不多说了.有需要的朋友自己去下载附件,自己去安装使用
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/k5kpgf7g4GM1-uPQ8VCBX-_SRJQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/k5kpgf7g4GM1-uPQ8VCBX-_SRJQ/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/k5kpgf7g4GM1-uPQ8VCBX-_SRJQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/k5kpgf7g4GM1-uPQ8VCBX-_SRJQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/OoSeEIbTHK8" height="1" width="1"/>";s:14:"date_timestamp";i:1276046435;}i:13;a:8:{s:5:"title";s:73:"发一个极品帖vtiger CRM的主要目录结构及主要数据库结构";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=749";s:11:"description";s:609:"[i=s] 本帖最后由 dasunny 于 2010-6-8 17:45 编辑 [/i]
|
||||
<a href="http://feedads.g.doubleclick.net/~a/k5kpgf7g4GM1-uPQ8VCBX-_SRJQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/k5kpgf7g4GM1-uPQ8VCBX-_SRJQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/OoSeEIbTHK8" height="1" width="1"/>";s:14:"date_timestamp";i:1276046435;}i:16;a:8:{s:5:"title";s:73:"发一个极品帖vtiger CRM的主要目录结构及主要数据库结构";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=749";s:11:"description";s:609:"[i=s] 本帖最后由 dasunny 于 2010-6-8 17:45 编辑 [/i]
|
||||
|
||||
找了很久的好东西,在这里贴出来大家共享.
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/P91IsTFBp-wq5PTW8Frycwt4SY4/0/da"><img src="http://feedads.g.doubleclick.net/~a/P91IsTFBp-wq5PTW8Frycwt4SY4/0/di" border="0" ismap="true"></img></a><br/>
|
||||
@@ -200,7 +258,7 @@ http://192.168.1.102/modules/Mobile[/url]
|
||||
|
||||
找了很久的好东西,在这里贴出来大家共享.
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/P91IsTFBp-wq5PTW8Frycwt4SY4/0/da"><img src="http://feedads.g.doubleclick.net/~a/P91IsTFBp-wq5PTW8Frycwt4SY4/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/P91IsTFBp-wq5PTW8Frycwt4SY4/1/da"><img src="http://feedads.g.doubleclick.net/~a/P91IsTFBp-wq5PTW8Frycwt4SY4/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/YU44xG0tcLo" height="1" width="1"/>";s:14:"date_timestamp";i:1275987412;}i:14;a:8:{s:5:"title";s:32:"VT显示模块和子模块问题";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=748";s:11:"description";s:866:"现在我有一个职位的权限只有“网页邮件”和“日程安排”
|
||||
<a href="http://feedads.g.doubleclick.net/~a/P91IsTFBp-wq5PTW8Frycwt4SY4/1/da"><img src="http://feedads.g.doubleclick.net/~a/P91IsTFBp-wq5PTW8Frycwt4SY4/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/YU44xG0tcLo" height="1" width="1"/>";s:14:"date_timestamp";i:1275987412;}i:17;a:8:{s:5:"title";s:32:"VT显示模块和子模块问题";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=748";s:11:"description";s:866:"现在我有一个职位的权限只有“网页邮件”和“日程安排”
|
||||
|
||||
但登录后还是显示4个模块
|
||||
|
||||
@@ -216,7 +274,7 @@ http://192.168.1.102/modules/Mobile[/url]
|
||||
|
||||
因为除工作台外的那三个模块下都有“网页邮件”或“日程安排”,这样就显得有些多余,怎么给他去掉呢,还有很多模块下都存在这样的问题,不同模块下拥有相同子模块,比如“ ...
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/iETopPoevR9BEInU6oeXOQkym40/0/da"><img src="http://feedads.g.doubleclick.net/~a/iETopPoevR9BEInU6oeXOQkym40/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/iETopPoevR9BEInU6oeXOQkym40/1/da"><img src="http://feedads.g.doubleclick.net/~a/iETopPoevR9BEInU6oeXOQkym40/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/_f_3IxS5gds" height="1" width="1"/>";s:14:"date_timestamp";i:1275978656;}i:15;a:8:{s:5:"title";s:18:"vtiger权限问题";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=745";s:11:"description";s:692:"用户管理里有:
|
||||
<a href="http://feedads.g.doubleclick.net/~a/iETopPoevR9BEInU6oeXOQkym40/1/da"><img src="http://feedads.g.doubleclick.net/~a/iETopPoevR9BEInU6oeXOQkym40/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/_f_3IxS5gds" height="1" width="1"/>";s:14:"date_timestamp";i:1275978656;}i:18;a:8:{s:5:"title";s:18:"vtiger权限问题";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=745";s:11:"description";s:692:"用户管理里有:
|
||||
|
||||
用户、职位、权限、用户组
|
||||
|
||||
@@ -232,7 +290,7 @@ http://192.168.1.102/modules/Mobile[/url]
|
||||
|
||||
比如分配某个权限给职位,然后职位属于某个组还是怎么样呢?求解
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/t-HnbL3HaFBzTXjojttdE-ZppJA/0/da"><img src="http://feedads.g.doubleclick.net/~a/t-HnbL3HaFBzTXjojttdE-ZppJA/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/t-HnbL3HaFBzTXjojttdE-ZppJA/1/da"><img src="http://feedads.g.doubleclick.net/~a/t-HnbL3HaFBzTXjojttdE-ZppJA/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/FVX_x5kb-JQ" height="1" width="1"/>";s:14:"date_timestamp";i:1275958515;}i:16;a:8:{s:5:"title";s:52:"求助 vitger在添加新记录时添加时间错误";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=744";s:11:"description";s:673:"我6月8号早上8点45分添加的一条记录,但添加完一查看时间却是:2010-06-08 00:42:42
|
||||
<a href="http://feedads.g.doubleclick.net/~a/t-HnbL3HaFBzTXjojttdE-ZppJA/1/da"><img src="http://feedads.g.doubleclick.net/~a/t-HnbL3HaFBzTXjojttdE-ZppJA/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/FVX_x5kb-JQ" height="1" width="1"/>";s:14:"date_timestamp";i:1275958515;}i:19;a:8:{s:5:"title";s:52:"求助 vitger在添加新记录时添加时间错误";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=744";s:11:"description";s:673:"我6月8号早上8点45分添加的一条记录,但添加完一查看时间却是:2010-06-08 00:42:42
|
||||
|
||||
有人遇到类似的问题吗,或者谁知道解决办法
|
||||
|
||||
@@ -244,36 +302,6 @@ http://192.168.1.102/modules/Mobile[/url]
|
||||
|
||||
1263[/attach]
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/3H7K_A7abQke_h5nX2m8nSqnKCQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/3H7K_A7abQke_h5nX2m8nSqnKCQ/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/3H7K_A7abQke_h5nX2m8nSqnKCQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/3H7K_A7abQke_h5nX2m8nSqnKCQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/HYlQjOHRTOk" height="1" width="1"/>";s:14:"date_timestamp";i:1275958069;}i:17;a:8:{s:5:"title";s:76:"求助vtiger CRM 5.1.0中文汉化版本导出生产的PDF文档中文乱码";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=743";s:11:"description";s:619:"我在用vtiger CRM 5.1.0中文汉化版本导出的PDF文档中文部分是乱码,望高手帮忙看看
|
||||
如下图
|
||||
1261[/attach]
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/WWPZzEuh_l9Q9RYiMWEubJd08r0/0/da"><img src="http://feedads.g.doubleclick.net/~a/WWPZzEuh_l9Q9RYiMWEubJd08r0/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/WWPZzEuh_l9Q9RYiMWEubJd08r0/1/da"><img src="http://feedads.g.doubleclick.net/~a/WWPZzEuh_l9Q9RYiMWEubJd08r0/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/TbZ0wGDyBw0" height="1" width="1"/>";s:8:"category";s:6:"Vtiger";s:6:"author";s:7:"dasunny";s:7:"pubdate";s:31:"Mon, 07 Jun 2010 11:15:18 +0000";s:7:"summary";s:619:"我在用vtiger CRM 5.1.0中文汉化版本导出的PDF文档中文部分是乱码,望高手帮忙看看
|
||||
如下图
|
||||
1261[/attach]
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/WWPZzEuh_l9Q9RYiMWEubJd08r0/0/da"><img src="http://feedads.g.doubleclick.net/~a/WWPZzEuh_l9Q9RYiMWEubJd08r0/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/WWPZzEuh_l9Q9RYiMWEubJd08r0/1/da"><img src="http://feedads.g.doubleclick.net/~a/WWPZzEuh_l9Q9RYiMWEubJd08r0/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/TbZ0wGDyBw0" height="1" width="1"/>";s:14:"date_timestamp";i:1275909318;}i:18;a:8:{s:5:"title";s:70:"目前找到最完美的vtiger CRM 5.1.0简体中文包与安装教程";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=742";s:11:"description";s:641:"vtiger CRM 5.1.0 简体中文包
|
||||
|
||||
下载地址:http://www.xdowns.com/soft/softdown.asp?softid=61300[/url]
|
||||
安装教程在附件里,大家自己下载
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/H8SiSnbDruyP_SDVl16XlsY9LmU/0/da"><img src="http://feedads.g.doubleclick.net/~a/H8SiSnbDruyP_SDVl16XlsY9LmU/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/H8SiSnbDruyP_SDVl16XlsY9LmU/1/da"><img src="http://feedads.g.doubleclick.net/~a/H8SiSnbDruyP_SDVl16XlsY9LmU/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/qf6WR4Dub6s" height="1" width="1"/>";s:8:"category";s:6:"Vtiger";s:6:"author";s:7:"dasunny";s:7:"pubdate";s:31:"Mon, 07 Jun 2010 08:12:03 +0000";s:7:"summary";s:641:"vtiger CRM 5.1.0 简体中文包
|
||||
|
||||
下载地址:http://www.xdowns.com/soft/softdown.asp?softid=61300[/url]
|
||||
安装教程在附件里,大家自己下载
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/H8SiSnbDruyP_SDVl16XlsY9LmU/0/da"><img src="http://feedads.g.doubleclick.net/~a/H8SiSnbDruyP_SDVl16XlsY9LmU/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/H8SiSnbDruyP_SDVl16XlsY9LmU/1/da"><img src="http://feedads.g.doubleclick.net/~a/H8SiSnbDruyP_SDVl16XlsY9LmU/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/qf6WR4Dub6s" height="1" width="1"/>";s:14:"date_timestamp";i:1275898323;}i:19;a:8:{s:5:"title";s:51:"vTiger 5.1 邮件扫描 Trouble Ticket 更新规则";s:4:"link";s:56:"http://forums.hawebs.net/computer/viewthread.php?tid=687";s:11:"description";s:824:"在 vTiger 5.1 进行邮件扫描时,使用正则表达式对用户回复的邮件的主题进行匹配。
|
||||
|
||||
如果成功后,将会更新指定 Trouble Ticket ID 的状态。
|
||||
|
||||
其正则表达式为:Ticket Id[^:]?: ([0-9]+)[/code]如果用户回复邮件的主题为:RE: TT13 [ Ticket Id : 140 ] Re : 服务请求[/code]那 ...
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/sU3dHjUlEQYu2GB60VGy283tKxs/0/da"><img src="http://feedads.g.doubleclick.net/~a/sU3dHjUlEQYu2GB60VGy283tKxs/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/sU3dHjUlEQYu2GB60VGy283tKxs/1/da"><img src="http://feedads.g.doubleclick.net/~a/sU3dHjUlEQYu2GB60VGy283tKxs/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/2JRnZ5PYR00" height="1" width="1"/>";s:8:"category";s:6:"Vtiger";s:6:"author";s:10:"honeymoose";s:7:"pubdate";s:31:"Mon, 31 May 2010 20:39:00 +0000";s:7:"summary";s:824:"在 vTiger 5.1 进行邮件扫描时,使用正则表达式对用户回复的邮件的主题进行匹配。
|
||||
|
||||
如果成功后,将会更新指定 Trouble Ticket ID 的状态。
|
||||
|
||||
其正则表达式为:Ticket Id[^:]?: ([0-9]+)[/code]如果用户回复邮件的主题为:RE: TT13 [ Ticket Id : 140 ] Re : 服务请求[/code]那 ...
|
||||
<p><a href="http://feedads.g.doubleclick.net/~a/sU3dHjUlEQYu2GB60VGy283tKxs/0/da"><img src="http://feedads.g.doubleclick.net/~a/sU3dHjUlEQYu2GB60VGy283tKxs/0/di" border="0" ismap="true"></img></a><br/>
|
||||
<a href="http://feedads.g.doubleclick.net/~a/sU3dHjUlEQYu2GB60VGy283tKxs/1/da"><img src="http://feedads.g.doubleclick.net/~a/sU3dHjUlEQYu2GB60VGy283tKxs/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/2JRnZ5PYR00" height="1" width="1"/>";s:14:"date_timestamp";i:1275338340;}}s:7:"channel";a:8:{s:5:"title";s:25:"OSS 计算技术 - Vtiger";s:4:"link";s:57:"http://forums.hawebs.net/computer/forumdisplay.php?fid=50";s:11:"description";s:27:"Latest 20 threads of Vtiger";s:9:"copyright";s:29:"Copyright(C) OSS 计算技术";s:9:"generator";s:13:"HX WEBSYSTEMS";s:13:"lastbuilddate";s:31:"Thu, 17 Jun 2010 14:53:45 +0000";s:3:"ttl";s:2:"30";s:7:"tagline";s:27:"Latest 20 threads of Vtiger";}s:9:"textinput";a:0:{}s:5:"image";a:3:{s:3:"url";s:49:"http://forums.hawebs.net/computer/images/logo.gif";s:5:"title";s:16:"OSS 计算技术";s:4:"link";s:34:"http://forums.hawebs.net/computer/";}s:9:"feed_type";s:3:"RSS";s:12:"feed_version";s:3:"2.0";s:8:"encoding";s:5:"UTF-8";s:16:"_source_encoding";s:0:"";s:5:"ERROR";s:0:"";s:7:"WARNING";s:0:"";s:19:"_CONTENT_CONSTRUCTS";a:6:{i:0;s:7:"content";i:1;s:7:"summary";i:2;s:4:"info";i:3;s:5:"title";i:4;s:7:"tagline";i:5;s:9:"copyright";}s:16:"_KNOWN_ENCODINGS";a:3:{i:0;s:5:"UTF-8";i:1;s:8:"US-ASCII";i:2;s:10:"ISO-8859-1";}s:5:"stack";a:0:{}s:9:"inchannel";b:0;s:6:"initem";b:0;s:9:"incontent";b:0;s:11:"intextinput";b:0;s:7:"inimage";b:0;s:17:"current_namespace";b:0;s:13:"last_modified";s:31:"Thu, 17 Jun 2010 14:57:56 GMT
|
||||
";s:4:"etag";s:29:"usZRTNF8BzcbMKnEIYmXsVmlSNQ
|
||||
<a href="http://feedads.g.doubleclick.net/~a/3H7K_A7abQke_h5nX2m8nSqnKCQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/3H7K_A7abQke_h5nX2m8nSqnKCQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/hawebs/WyRb/~4/HYlQjOHRTOk" height="1" width="1"/>";s:14:"date_timestamp";i:1275958069;}}s:7:"channel";a:8:{s:5:"title";s:25:"OSS 计算技术 - Vtiger";s:4:"link";s:57:"http://forums.hawebs.net/computer/forumdisplay.php?fid=50";s:11:"description";s:27:"Latest 20 threads of Vtiger";s:9:"copyright";s:29:"Copyright(C) OSS 计算技术";s:9:"generator";s:13:"HX WEBSYSTEMS";s:13:"lastbuilddate";s:31:"Fri, 18 Jun 2010 21:57:35 +0000";s:3:"ttl";s:2:"30";s:7:"tagline";s:27:"Latest 20 threads of Vtiger";}s:9:"textinput";a:0:{}s:5:"image";a:3:{s:3:"url";s:49:"http://forums.hawebs.net/computer/images/logo.gif";s:5:"title";s:16:"OSS 计算技术";s:4:"link";s:34:"http://forums.hawebs.net/computer/";}s:9:"feed_type";s:3:"RSS";s:12:"feed_version";s:3:"2.0";s:8:"encoding";s:5:"UTF-8";s:16:"_source_encoding";s:0:"";s:5:"ERROR";s:0:"";s:7:"WARNING";s:0:"";s:19:"_CONTENT_CONSTRUCTS";a:6:{i:0;s:7:"content";i:1;s:7:"summary";i:2;s:4:"info";i:3;s:5:"title";i:4;s:7:"tagline";i:5;s:9:"copyright";}s:16:"_KNOWN_ENCODINGS";a:3:{i:0;s:5:"UTF-8";i:1;s:8:"US-ASCII";i:2;s:10:"ISO-8859-1";}s:5:"stack";a:0:{}s:9:"inchannel";b:0;s:6:"initem";b:0;s:9:"incontent";b:0;s:11:"intextinput";b:0;s:7:"inimage";b:0;s:17:"current_namespace";b:0;s:13:"last_modified";s:31:"Fri, 18 Jun 2010 21:57:37 GMT
|
||||
";s:4:"etag";s:29:"pnSP1GkzAR7kAw1LFKf0ONj7X6s
|
||||
";}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,228 @@
|
||||
<?php
|
||||
/*********************************************************************************
|
||||
* The contents of this file are subject to the SugarCRM Public License Version 1.1.2
|
||||
* ("License"); You may not use this file except in compliance with the
|
||||
* License. You may obtain a copy of the License at http://www.sugarcrm.com/SPL
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
|
||||
* the specific language governing rights and limitations under the License.
|
||||
* The Original Code is: SugarCRM Open Source
|
||||
* The Initial Developer of the Original Code is SugarCRM, Inc.
|
||||
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.;
|
||||
* All Rights Reserved.
|
||||
* Contributor(s): ______________________________________.
|
||||
********************************************************************************/
|
||||
|
||||
//Fix postgres queries
|
||||
function fixPostgresQuery($query,$log,$debug)
|
||||
{
|
||||
// First select the query fields from the remaining query
|
||||
$queryFields = substr($query, strlen('SELECT'), stripos($query,'FROM')-strlen('SELECT'));
|
||||
$queryRecord = substr($query, stripos($query,'FROM'), strlen($query));
|
||||
$groupClause = "";
|
||||
$orderClause = "";
|
||||
|
||||
if( $debug)
|
||||
$log->info( "fixPostgresQuery: ".$query);
|
||||
|
||||
// If we already have an order or group cluase separate ist for later use
|
||||
if( stripos($queryRecord,'GROUP BY') > 0)
|
||||
{
|
||||
$groupClause = substr($queryRecord, stripos($queryRecord,'GROUP BY')+strlen('GROUP BY'), strlen($queryRecord));
|
||||
if( stripos($groupClause,'ORDER BY') > 0)
|
||||
{
|
||||
$orderClause = substr($groupClause, stripos($groupClause,'ORDER BY'), strlen($groupClause));
|
||||
$groupClause = substr($groupClause, 0, stripos($groupClause,'ORDER BY'));
|
||||
}
|
||||
$queryRecord = substr($queryRecord, 0, stripos($queryRecord,'GROUP BY'));
|
||||
}
|
||||
|
||||
if( stripos($queryRecord,'ORDER BY') > 0)
|
||||
{
|
||||
$orderClause = substr($queryRecord, stripos($queryRecord,'ORDER BY'), strlen($queryRecord));
|
||||
$queryRecord = substr($queryRecord, 0, stripos($queryRecord,'ORDER BY'));
|
||||
}
|
||||
|
||||
// Construkt the privateGroupList from the filed list by separating combined
|
||||
// record.field entries
|
||||
$privateGroupList = array();
|
||||
$token = strtok( $queryFields, ", () ");
|
||||
while( $token !== false) {
|
||||
if( strpos( $token, ".") !== false)
|
||||
array_push( $privateGroupList, $token);
|
||||
$token = strtok( ", () ");
|
||||
}
|
||||
sort( $privateGroupList);
|
||||
$groupFields = "";
|
||||
$last = "";
|
||||
for( $i = 0; $i < count($privateGroupList); $i++) {
|
||||
if( $last != $privateGroupList[$i])
|
||||
if( $groupFields == "")
|
||||
$groupFields = $privateGroupList[$i];
|
||||
else
|
||||
$groupFields .= ",".$privateGroupList[$i];
|
||||
$last = $privateGroupList[$i];
|
||||
}
|
||||
|
||||
// Rebuild the query
|
||||
$query = "SELECT ".$queryFields.$queryRecord;
|
||||
if( $groupClause != "" )
|
||||
$groupClause =$groupClause.",".$groupFields;
|
||||
else
|
||||
$groupClause =$groupFields;
|
||||
$query .= expandStar($groupClause,$log)." ".$orderClause;
|
||||
|
||||
if( $debug)
|
||||
$log->info( "fixPostgresQuery result: ".$query);
|
||||
|
||||
return( $query);
|
||||
}
|
||||
|
||||
// Postgres8 will not accept a "tablename.*" entry in the GROUP BY clause
|
||||
function expandStar($fieldlist,$log)
|
||||
{
|
||||
$expanded="";
|
||||
$field = strtok( $fieldlist, ",");
|
||||
while( $field != "")
|
||||
{
|
||||
//remove leading and trailing spaces
|
||||
$field = trim( $field);
|
||||
|
||||
//still spaces in the field indicate a complex structure
|
||||
if( strpos( $field, " ") == 0)
|
||||
{
|
||||
|
||||
//locate table- and fieldname
|
||||
$pos = strpos( $field, ".");
|
||||
if( $pos > 0)
|
||||
{
|
||||
$table = substr( $field, 0, $pos);
|
||||
$subfield = substr( $field, $pos+1, strlen($field)-$pos);
|
||||
|
||||
//do we need to expand?
|
||||
if( $subfield == "*")
|
||||
$field = expandRecord($table,$log);
|
||||
}
|
||||
|
||||
//add the propably expanded field to the querylist
|
||||
if( $expanded == "")
|
||||
$expanded = $field;
|
||||
else
|
||||
$expanded .= ",".$field;
|
||||
}
|
||||
|
||||
//next field
|
||||
$field = strtok(",");
|
||||
}
|
||||
if($expanded!= '')
|
||||
$expanded = " GROUP BY ". trim($expanded, ",");
|
||||
//return the expanded fieldlist
|
||||
return( $expanded);
|
||||
}
|
||||
|
||||
//return an expanded table field list
|
||||
function expandRecord($table,$log)
|
||||
{
|
||||
$result = "";
|
||||
$log->info( "Debug: expandRecord");
|
||||
$subfields = array();
|
||||
|
||||
//vtiger_products table
|
||||
if( $table == "vtiger_products" )
|
||||
$subfields = array ( "productid", "productname", "productcode", "productcategory", "manufacturer", "qty_per_unit", "unit_price", "weight", "pack_size", "sales_start_date", "sales_end_date", "start_date", "expiry_date", "cost_factor", "commissionrate", "commissionmethod", "discontinued", "usageunit", "handler", "currency", "reorderlevel", "website", "taxclass", "mfr_part_no", "vendor_part_no", "serialno", "qtyinstock", "productsheet", "qtyindemand", "glacct", "vendor_id", "imagename");
|
||||
//$subfields = array ( "productid", "productname", "productcode", "productcategory", "manufacturer", "qty_per_unit", "unit_price", "weight", "pack_size", "sales_start_date", "sales_end_date", "start_date", "expiry_date", "cost_factor", "commissionrate", "commissionmethod", "discontinued", "usageunit", "handler", "contactid", "currency", "reorderlevel", "website", "taxclass", "mfr_part_no", "vendor_part_no", "serialno", "qtyinstock", "productsheet", "qtyindemand", "glacct", "vendor_id", "imagename" );
|
||||
|
||||
//vtiger_activity table
|
||||
elseif( $table == "vtiger_activity")
|
||||
$subfields = array ( "activityid", "subject", "semodule", "activitytype", "date_start", "due_date", "time_start", "time_end", "sendnotification", "duration_hours", "duration_minutes", "status", "eventstatus", "priority", "location", "notime", "visibility", "recurringtype" );
|
||||
|
||||
//vtiger_notes table
|
||||
elseif( $table == "vtiger_notes")
|
||||
$subfields = array ( "notesid", "contact_id", "title", "filename", "notecontent");
|
||||
|
||||
//vtiger_faq table
|
||||
elseif( $table == "vtiger_faq")
|
||||
$subfields = array ( "id", "product_id", "question", "answer", "category", "status");
|
||||
|
||||
//vtiger_profile2field
|
||||
elseif( $table == "vtiger_profile2field")
|
||||
$subfields = array ( "profileid", "tabid", "fieldid", "visible", "readonly");
|
||||
|
||||
//vtiger_field
|
||||
elseif( $table == "vtiger_field")
|
||||
$subfields = array ( "tabid", "fieldid", "columnname", "tablename", "generatedtype", "uitype", "fieldname", "fieldlabel", "readonly", "presence", "selected", "maximumlength", "sequence", "block", "displaytype", "typeofdata", "quickcreate", "quickcreatesequence", "info_type");
|
||||
|
||||
//vtiger_producttaxrel
|
||||
elseif( $table == "vtiger_producttaxrel")
|
||||
$subfields = array ( "productid", "taxid", "taxpercentage");
|
||||
|
||||
//vtiger_inventorytaxinfo
|
||||
elseif( $table == "vtiger_inventorytaxinfo")
|
||||
$subfields = array ( "taxid", "taxname", "taxlabel", "percentage", "deleted");
|
||||
|
||||
//vtiger_role2picklist
|
||||
elseif( $table == "vtiger_role2picklist")
|
||||
$subfields = array ( "roleid", "picklistid", "sortid");
|
||||
|
||||
//vtiger_contactdetails
|
||||
elseif( $table == "vtiger_contactdetails")
|
||||
$subfields = array( "lastname", "contactid", "accountid", "salutation", "firstname", "email", "phone", "mobile", "title", "department", "fax", "reportsto", "training", "usertype", "contacttype", "otheremail", "yahooid", "donotcall", "emailoptout", "imagename", "reference", "notify_owner");
|
||||
|
||||
//vtiger_quotes
|
||||
elseif( $table == "vtiger_quotes")
|
||||
$subfields = array( "quoteid", "subject", "potentialid", "quotestage", "validtill", "contactid", "currency", "subtotal", "carrier", "shipping", "inventorymanager", "type", "adjustment", "total", "taxtype", "discount_percent", "discount_amount", "s_h_amount", "accountid", "terms_conditions");
|
||||
|
||||
//vtiger_crmentity
|
||||
elseif( $table == "vtiger_crmentity")
|
||||
$subfields = array("crmid", "smcreatorid", "smownerid", "modifiedby", "setype", "description", "createdtime", "modifiedtime", "viewedtime", "status", "version", "presence", "deleted");
|
||||
|
||||
//vtiger_salesorder
|
||||
elseif( $table == "vtiger_salesorder")
|
||||
$subfields = array("salesorderid", "subject", "potentialid", "customerno", "quoteid", "vendorterms", "contactid", "vendorid", "duedate", "carrier", "pending", "type", "adjustment", "salescommission", "exciseduty","total", "subtotal", "taxtype", "discount_percent", "discount_amount", "s_h_amount", "accountid", "terms_conditions", "purchaseorder", "sostatus");
|
||||
|
||||
//vtiger_invoice
|
||||
elseif( $table == "vtiger_invoice")
|
||||
$subfields = array("invoiceid", "subject", "salesorderid","customerno","contactid", "notes", "invoicedate", "duedate", "invoiceterms", "type", "adjustment","salescommission","exciseduty", "subtotal","total", "taxtype","discount_percent", "discount_amount", "s_h_amount","shipping", "accountid", "terms_conditions","purchaseorder","invoicestatus","invoice_no");
|
||||
|
||||
//vtiger_seactivityrel
|
||||
elseif( $table == "vtiger_seactivityrel")
|
||||
$subfields = array("crmid", "activityid");
|
||||
|
||||
//vtiger_cntactivityrel
|
||||
elseif( $table == "vtiger_cntactivityrel")
|
||||
$subfields = array("contactid", "activityid");
|
||||
|
||||
//vtiger_purchaseorder
|
||||
elseif( $table == "vtiger_purchaseorder")
|
||||
$subfields = array("purchaseorderid", "subject", "quoteid", "vendorid", "requisition_no", "tracking_no", "contactid", "duedate", "carrier", "type", "adjustment", "salescommission", "exciseduty", "total", "subtotal", "taxtype", "discount_percent","discount_amount", "s_h_amount", "terms_conditions", "postatus");
|
||||
|
||||
//vtiger_leaddetails
|
||||
elseif( $table == "vtiger_leaddetails")
|
||||
$subfields = array("leadid", "email", "interest", "firstname", "salutation", "lastname", "company", "annualrevenue", "industry", "campaign", "rating", "leadstatus", "leadsource", "converted", "designation", "space", "comments", "priority", "demorequest", "partnercontact", "productversion", "product", "maildate", "nextstepdate", "fundingsituation", "purpose", "evaluationstatus", "transferdate", "revenuetype", "noofemployees", "yahooid", "assignleadchk" );
|
||||
|
||||
//vtiger_campaignleadrel
|
||||
elseif( $table == "vtiger_campaignleadrel")
|
||||
$subfields = array("campaignid", "leadid");
|
||||
|
||||
//vtiger_pricebook
|
||||
elseif( $table == "vtiger_pricebook")
|
||||
$subfields = array("pricebookid", "bookname","active","description");
|
||||
|
||||
//fields of the requested array still undefined
|
||||
else
|
||||
$log->info("function expandRecord: please add structural information for table '".$table."'");
|
||||
|
||||
//construct an entity string
|
||||
for( $i=0; $i<count($subfields); $i++)
|
||||
{
|
||||
$result .= $table.".".$subfields[$i].",";
|
||||
}
|
||||
|
||||
//remove the trailiung ,
|
||||
if( strlen( $result) > 0)
|
||||
$result = substr( $result, 0, strlen( $result) -1);
|
||||
|
||||
//return out new string
|
||||
return( $result);
|
||||
}
|
||||
?>
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
/*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/
|
||||
|
||||
function ftpBackupFile($source_file, $ftpserver, $ftpuser, $ftppassword)
|
||||
{
|
||||
global $log;
|
||||
$log->debug("Entering ftpBackupFile(".$source_file.", ".$ftpserver.", ".$ftpuser.", ".$ftppassword.") method ...");
|
||||
// set up basic connection
|
||||
$conn_id = @ftp_connect($ftpserver);
|
||||
if(!$conn_id)
|
||||
{
|
||||
$log->debug("Exiting ftpBackupFile method ...");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// login with username and password
|
||||
|
||||
$login_result = @ftp_login($conn_id, $ftpuser, $ftppassword);
|
||||
|
||||
if(!$login_result)
|
||||
{
|
||||
ftp_close($conn_id);
|
||||
$log->debug("Exiting ftpBackupFile method ...");
|
||||
return;
|
||||
}
|
||||
|
||||
// check connection
|
||||
/*if ((!$conn_id) || (!$login_result)) {
|
||||
echo "FTP connection has failed!";
|
||||
echo "Attempted to connect to $ftp_server for user $ftp_user_name";
|
||||
exit;
|
||||
} else {
|
||||
echo "Connected to $ftp_server, for user $ftp_user_name";
|
||||
}
|
||||
*/
|
||||
|
||||
// upload the file
|
||||
$destination_file=$source_file;
|
||||
$upload = @ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY);
|
||||
|
||||
// check upload status
|
||||
if (!$upload) {
|
||||
ftp_close($conn_id);
|
||||
$log->debug("Exiting ftpBackupFile method ...");
|
||||
return;
|
||||
}
|
||||
/*
|
||||
else {
|
||||
echo "Uploaded $source_file to $ftp_server as $destination_file";
|
||||
}*/
|
||||
|
||||
// close the FTP stream
|
||||
ftp_close($conn_id);
|
||||
$log->debug("Exiting ftpBackupFile method ...");
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,92 @@
|
||||
<?php
|
||||
/*+***********************************************************************************
|
||||
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*************************************************************************************/
|
||||
|
||||
class SqlResultIterator implements Iterator{
|
||||
function __construct($adb, $result){
|
||||
$this->result = $result;
|
||||
$this->adb = $adb;
|
||||
$this->pos = 0;
|
||||
}
|
||||
|
||||
public function rewind(){
|
||||
$this->pos = 0;
|
||||
}
|
||||
|
||||
function valid(){
|
||||
$adb = $this->adb;
|
||||
return $this->pos < $adb->num_rows($this->result);
|
||||
}
|
||||
|
||||
public function next(){
|
||||
$this->pos+=1;
|
||||
}
|
||||
|
||||
public function current(){
|
||||
$adb = $this->adb;
|
||||
$data = $adb->raw_query_result_rowdata($this->result, $this->pos);
|
||||
return new SqlResultIteratorRow($data);
|
||||
}
|
||||
|
||||
public function key(){
|
||||
return $this->pos;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the contents of the resultset as an array. Destroys a running iterator's state.
|
||||
*
|
||||
* This method will reset the iterator using the rewind method.
|
||||
*
|
||||
* $copyFields specify which fields of the result to copy to the array.
|
||||
* If not specified the function will return values for all the fields.
|
||||
*/
|
||||
function toArray($copyFields=null){
|
||||
$adb = $this->adb;
|
||||
$this->rewind();
|
||||
|
||||
if($copyFields===null){
|
||||
$columnData = $adb->getFieldsDefinition($this->result);
|
||||
$columnNames = array();
|
||||
foreach($columnData as $column){
|
||||
$columnNames[]=$column->name;
|
||||
}
|
||||
$copyFields = $columnNames;
|
||||
}
|
||||
|
||||
$arr=array();
|
||||
foreach($this as $row){
|
||||
$rowArr = array();
|
||||
foreach($copyFields as $name){
|
||||
$rowArr[$name]=$row->$name;
|
||||
}
|
||||
$arr[]=$rowArr;
|
||||
}
|
||||
return $arr;
|
||||
$this->rewind();
|
||||
}
|
||||
}
|
||||
|
||||
class SqlResultIteratorRow{
|
||||
function __construct($data){
|
||||
$this->data = $data;
|
||||
}
|
||||
|
||||
function get($column){
|
||||
return $this->data[$column];
|
||||
}
|
||||
|
||||
function __get($column){
|
||||
return $this->get($column);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,125 @@
|
||||
<?php
|
||||
/*+***********************************************************************************
|
||||
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*************************************************************************************/
|
||||
|
||||
/**
|
||||
* A wrapper around CRMEntity instances
|
||||
*/
|
||||
class VTEntityData{
|
||||
private $isNew = false;
|
||||
|
||||
/**
|
||||
* Get an entity data object.
|
||||
*
|
||||
* @param $adb Pear database instance.
|
||||
* @param $entityId The id of the entity to load.
|
||||
* @return The new entity data object.
|
||||
*/
|
||||
static function fromEntityId($adb, $entityId){
|
||||
$obj = new VTEntityData();
|
||||
$obj->entityId = $entityId;
|
||||
$result = $adb->pquery("select setype from vtiger_crmentity where crmid=?", array($entityId));
|
||||
$setype = $adb->query_result($result,0,"setype");
|
||||
$obj->moduleName = $setype;
|
||||
|
||||
require_once('data/CRMEntity.php');
|
||||
$focus = CRMEntity::getInstance($setype);
|
||||
|
||||
$focus->retrieve_entity_info($entityId, $setype);
|
||||
$focus->id = $entityId;
|
||||
$obj->isNew = false;
|
||||
$obj->focus = $focus;
|
||||
return $obj;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get an entity data object from a crmentity object
|
||||
*
|
||||
* @param $crmEntity The CRMEntity instance.
|
||||
* @return The new entity data object.
|
||||
*/
|
||||
static function fromCRMEntity($crmEntity){
|
||||
$obj = new VTEntityData();
|
||||
$obj->focus = $crmEntity;
|
||||
$obj->isNew = !(isset($crmEntity->id) && $crmEntity->id != null);
|
||||
return $obj;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data from the entity object as an array.
|
||||
*
|
||||
* @return An array representation of the module data.
|
||||
*/
|
||||
function getData(){
|
||||
return $this->focus->column_fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the entity id.
|
||||
*
|
||||
* @return The entity id.
|
||||
*/
|
||||
function getId(){
|
||||
return $this->focus->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the name of the module represented by the entity data object.
|
||||
*
|
||||
* @return The module name.
|
||||
*/
|
||||
function getModuleName(){
|
||||
$className = get_class($this->focus);
|
||||
$importModuleMapping = Array(
|
||||
"ImportLead"=>"Leads",
|
||||
"ImportAccount"=>"Accounts",
|
||||
"ImportContact"=>"Contacts",
|
||||
"ImportOpportunity"=>"Potentials",
|
||||
"ImportProduct"=>"Products",
|
||||
"ImportTicket"=>"HelpDesk",
|
||||
"ImportVendors"=>"Vendors"
|
||||
);
|
||||
$moduleName = $className;
|
||||
if(array_key_exists($className, $importModuleMapping)){
|
||||
$moduleName = $importModuleMapping[$className];
|
||||
}
|
||||
return $moduleName;
|
||||
}
|
||||
|
||||
function get($fieldName){
|
||||
return $this->focus->column_fields[$fieldName];
|
||||
}
|
||||
|
||||
function set($fieldName, $value){
|
||||
$data = $this->focus->column_fields[$fieldName] = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the object is stored on the database.
|
||||
*
|
||||
* @return True if the object is saved false otherwiser.
|
||||
*/
|
||||
function isSaved(){
|
||||
return isset($this->focus->id);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check wether the obkect is new.
|
||||
*
|
||||
* @return True if the object is new, false otherwise.
|
||||
*/
|
||||
function isNew(){
|
||||
return $this->isNew;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
/*+***********************************************************************************
|
||||
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*************************************************************************************/
|
||||
|
||||
require_once('include/events/SqlResultIterator.inc');
|
||||
|
||||
class VTEntityType{
|
||||
function __construct($adb, $setype){
|
||||
$this->moduleName=$setype;
|
||||
require_once("modules/".$setype."/".$setype.".php");
|
||||
$result = $adb->pquery("select tabid from vtiger_tab where name=?",
|
||||
array($setype));
|
||||
$tabId = $adb->query_result($result,0,"tabid");
|
||||
$this->tabId = $tabId;
|
||||
$this->adb = $adb;
|
||||
}
|
||||
|
||||
function getTabId(){
|
||||
return $this->tabId;
|
||||
}
|
||||
|
||||
function getModuleName(){
|
||||
return $this->moduleName;
|
||||
}
|
||||
|
||||
function getFieldNames(){
|
||||
$adb = $this->adb;
|
||||
$arr = array();
|
||||
$result = $adb->pquery("select fieldname from vtiger_field where tabid=? and vtiger_field.presence in (0,2)",
|
||||
array($this->getTabId()));
|
||||
$it = new SQLResultIterator($adb, $result);
|
||||
foreach($it as $row){
|
||||
$arr[] = $row->fieldname;
|
||||
}
|
||||
return $arr;
|
||||
}
|
||||
|
||||
function getFieldType($fieldName){
|
||||
$adb = $this->adb;
|
||||
$result = $adb->pquery("select * from vtiger_field where fieldname=? and tabid=? and vtiger_field.presence in (0,2)",
|
||||
array($fieldName, $this->tabId));
|
||||
$uitype = $adb->query_result($result,0,"uitype");
|
||||
$fieldType = new VTFieldType();
|
||||
if(in_array($uitype, array(50, 51, 73))){
|
||||
$fieldType->type = "Related";
|
||||
$fieldType->relatedTo = "Accounts";
|
||||
}else if($uitype == 71){
|
||||
$fieldType->type = "Number";
|
||||
}else{
|
||||
$fieldType->type = "String";
|
||||
}
|
||||
return $fieldType;
|
||||
}
|
||||
|
||||
function getFieldTypes(){
|
||||
$adb = $this->adb;
|
||||
$fieldNames = $this->getFieldNames();
|
||||
$fieldTypes = array();
|
||||
foreach($fieldNames as $fieldName){
|
||||
$fieldTypes[$fieldName]=$this->getFieldType($fieldName);
|
||||
}
|
||||
return $fieldTypes;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
class VTFieldType{
|
||||
function toArray(){
|
||||
$ro = new ReflectionObject($this);
|
||||
$props = $ro->getProperties();
|
||||
$arr = array();
|
||||
foreach($props as $prop){
|
||||
$arr[$prop->getName()]=$prop->getValue($this);
|
||||
}
|
||||
return $arr;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
/*+***********************************************************************************
|
||||
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*************************************************************************************/
|
||||
|
||||
class VTEventCondition{
|
||||
function __construct($expr){
|
||||
if($expr!=''){
|
||||
$parser = $this->getParser($expr);
|
||||
$this->expr = $parser->statement();
|
||||
}else{
|
||||
$this->expr = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function test($obj){
|
||||
$this->data = $obj;
|
||||
if($this->expr==null){
|
||||
return true;
|
||||
}else{
|
||||
return $this->evaluate($this->expr);
|
||||
}
|
||||
}
|
||||
|
||||
private function getParser($expr){
|
||||
$ass = new ANTLRStringStream($expr);
|
||||
$lex = new VTEventConditionParserLexer($ass);
|
||||
$cts = new CommonTokenStream($lex);
|
||||
$tap = new VTEventConditionParserParser($cts);
|
||||
return $tap;
|
||||
}
|
||||
|
||||
|
||||
private function evaluate($expr){
|
||||
if(is_array($expr)){
|
||||
$oper = $expr[0];
|
||||
if($oper=='.'){
|
||||
$out = $this->data;
|
||||
$syms = array_slice($expr, 1);
|
||||
foreach($syms as $sym){
|
||||
$out = $this->get($out, $sym->name);
|
||||
}
|
||||
return $out;
|
||||
}else{
|
||||
$evaled = array_map(array($this, 'evaluate'), array_slice($expr, 1));
|
||||
switch($oper){
|
||||
case "in":
|
||||
return in_array($evaled[0], $evaled[1]);
|
||||
case "==":
|
||||
return $evaled[0] == $evaled[1];
|
||||
case "list":
|
||||
return $evaled;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
if($expr instanceof VTEventConditionSymbol){
|
||||
return $this->get($this->data, $expr->name);
|
||||
}else{
|
||||
return $expr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function get($obj, $field){
|
||||
if(is_array($obj)){
|
||||
return $obj[$field];
|
||||
}else{
|
||||
$func = "get".ucwords($field);
|
||||
return $obj->$func();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
?>
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
/*+***********************************************************************************
|
||||
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*************************************************************************************/
|
||||
|
||||
class VTEventConditionSymbol{
|
||||
function __construct($name){
|
||||
$this->name=$name;
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
/*+***********************************************************************************
|
||||
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*************************************************************************************/
|
||||
|
||||
abstract class VTEventHandler{
|
||||
public abstract function handleEvent($name, $data);
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,125 @@
|
||||
<?php
|
||||
/*+***********************************************************************************
|
||||
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*************************************************************************************/
|
||||
|
||||
require_once("include/events/SqlResultIterator.inc");
|
||||
class VTEventTrigger{
|
||||
|
||||
/* EventTrigger cache management */
|
||||
private static $cache = array();
|
||||
private static $cacheLookupType = '';
|
||||
|
||||
const CACHE_LOOKUP_TYPE_ALL = 'ALL';
|
||||
|
||||
static function initCache($name = false, $force = false) {
|
||||
global $adb;
|
||||
|
||||
if($name) {
|
||||
$names = $name;
|
||||
if(!is_array($names)) $names = array($name);
|
||||
|
||||
$evtinfos = self::getActiveEventInfos($adb, $names);
|
||||
|
||||
foreach($evtinfos as $k=>$v) {
|
||||
if(!self::isCached($k) || $force) {
|
||||
self::$cache[$forname] = $evtinfos;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if(!self::isCached() || $force) {
|
||||
self::$cache = self::getActiveEventInfos($adb, $name);
|
||||
self::$cacheLookupType = self::CACHE_LOOKUP_TYPE_ALL;
|
||||
}
|
||||
}
|
||||
}
|
||||
static function isCached($name = false) {
|
||||
if($name === false) {
|
||||
if(self::$cacheLookupType == self::CACHE_LOOKUP_TYPE_ALL) {
|
||||
// Was init cache done for ALL earlier?
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
return isset(self::$cache[$name]);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
static function clearCache($name = false) {
|
||||
if($name === false) {
|
||||
self::$cache = array();
|
||||
self::$cacheLookupType = '';
|
||||
} else if(self::isCached($name)) {
|
||||
unset(self::$cache[$name]);
|
||||
}
|
||||
}
|
||||
static function lookupCache($name) {
|
||||
if(self::isCached($name)) {
|
||||
return self::$cache[$name];
|
||||
} else if(self::$cacheLookupType == self::CACHE_LOOKUP_TYPE_ALL) {
|
||||
return array();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static function getActiveEventInfos($adb, $name = false) {
|
||||
$params = array();
|
||||
$query = "SELECT * FROM vtiger_eventhandlers WHERE is_active=true";
|
||||
if($name !== false) {
|
||||
if(is_array($name)) {
|
||||
$query .= " AND event_name IN (" . generateQuestionMarks($name) . ")";
|
||||
} else {
|
||||
$query .= " AND event_name = ?";
|
||||
}
|
||||
$params[] = $name;
|
||||
}
|
||||
|
||||
$evtinfosbyname = array();
|
||||
|
||||
$result= $adb->pquery($query, $params);
|
||||
$it = new SqlResultIterator($adb, $result);
|
||||
foreach($it as $row) {
|
||||
$evtinfosbyname[$row->event_name][] = array(
|
||||
'condition' => $row->cond,
|
||||
'handler_class' => $row->handler_class,
|
||||
'handler_path' => $row->handler_path
|
||||
);
|
||||
}
|
||||
|
||||
if($name) return $evtinfosbyname[$name];
|
||||
else return $evtinfosbyname;
|
||||
}
|
||||
/** END **/
|
||||
|
||||
function __construct($adb, $name){
|
||||
$this->name=$name;
|
||||
$this->adb = $adb;
|
||||
}
|
||||
|
||||
function trigger($data){
|
||||
$adb = $this->adb;
|
||||
|
||||
$eventInfos = self::lookupCache($this->name);
|
||||
if($eventInfos === false) {
|
||||
$eventInfos = self::getActiveEventInfos($this->adb, $this->name);
|
||||
}
|
||||
|
||||
if($eventInfos) {
|
||||
foreach($eventInfos as $eventInfo){
|
||||
$condition = new VTEventCondition($eventInfo['condition']);
|
||||
if($condition->test($data)){
|
||||
require_once($eventInfo['handler_path']);
|
||||
$handler_class = $eventInfo['handler_class'];
|
||||
$handler = new $handler_class();
|
||||
|
||||
$handler->handleEvent($this->name, $data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,189 @@
|
||||
<?php
|
||||
/*+***********************************************************************************
|
||||
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*************************************************************************************/
|
||||
|
||||
/**
|
||||
* Create and trigger events in vtiger
|
||||
*/
|
||||
class VTEventsManager{
|
||||
function __construct($adb){
|
||||
$this->adb = $adb;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register an event handler
|
||||
*
|
||||
* @param $forEvent The name of the event to handle
|
||||
* @param $path The path to the php file containing the handler
|
||||
* @param $className The name of the VTEventHandler class.
|
||||
* @param $condition A condition which must evaluate true for the event to be accepted.
|
||||
*/
|
||||
function registerHandler($forEvent, $path, $className, $condition=''){
|
||||
$adb = $this->adb;
|
||||
$result = $adb->pquery("SELECT * FROM vtiger_eventhandlers WHERE event_name=? AND handler_path=? AND handler_class=?",
|
||||
array($forEvent, $path, $className));
|
||||
if($adb->num_rows($result)===0){
|
||||
$handlerId = $adb->getUniqueId('vtiger_eventhandlers');
|
||||
$adb->pquery("insert into vtiger_eventhandlers
|
||||
(eventhandler_id, event_name, handler_path, handler_class, cond, is_active)
|
||||
values (?,?,?,?,?, true)", array($handlerId, $forEvent, $path, $className, $condition));
|
||||
|
||||
$this->clearTriggerCache($forEvent);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize Event Trigger Cache for the required event types.
|
||||
*
|
||||
* @param Object $for Optional String or Array of event_names for initializing.
|
||||
* @param Boolean $force Optional Force the initialization of cache?
|
||||
*/
|
||||
function initTriggerCache($for = false, $force = false) {
|
||||
VTEventTrigger::initCache($for, $force);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear the Event Trigger Cache
|
||||
*
|
||||
* @param Object $forEvent
|
||||
*/
|
||||
function clearTriggerCache($forEvent = false) {
|
||||
VTEventTrigger::clearCache($forEvent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set an event handler as inactive
|
||||
* @param The handler class to set as inactive
|
||||
*
|
||||
*/
|
||||
function setHandlerInActive($handlerClass){
|
||||
$adb = $this->adb;
|
||||
$adb->pquery("update vtiger_eventhandlers set is_active=false where handler_class=?", array($handlerClass));
|
||||
|
||||
$this->clearTriggerCache();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set an event handler as active
|
||||
*
|
||||
* @param The handler class to set as active
|
||||
*/
|
||||
function setHandlerActive($handlerClass){
|
||||
$adb = $this->adb;
|
||||
$adb->pquery("update vtiger_eventhandlers set is_active=true where handler_class=?", array($handlerClass));
|
||||
|
||||
$this->clearTriggerCache();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Unregister a registered handler
|
||||
*
|
||||
* @param $className The name of teh VTEventHandler class to unregister
|
||||
*/
|
||||
function unregisterHandler($className){
|
||||
$adb = $this->adb;
|
||||
$adb->pquery("delete from vtiger_eventhandlers where handler_class=?",
|
||||
array($className));
|
||||
$adb->pquery("delete from vtiger_eventhandler_module where handler_class=?",
|
||||
array($className));
|
||||
|
||||
$this->clearTriggerCache();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an event triger instance
|
||||
*
|
||||
* @param $triggerName The name of the event.
|
||||
* @return The trigger object for the event.
|
||||
*/
|
||||
function getTrigger($triggerName){
|
||||
$adb=$this->adb;
|
||||
return new VTEventTrigger($adb, $triggerName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Trigger an event
|
||||
*
|
||||
* @param $triggerName The name of the event.
|
||||
* @return The trigger object for the event.
|
||||
*/
|
||||
function triggerEvent($triggerName, $data){
|
||||
$this->getTrigger($triggerName)->trigger($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the module the handler belongs to
|
||||
*
|
||||
* @param moduleName - The name of the module
|
||||
* @param handlerClass - The name of the handler class
|
||||
*/
|
||||
function setModuleForHandler($moduleName, $handlerClass){
|
||||
$adb = $this->adb;
|
||||
$result = $adb->pquery("SELECT * FROM vtiger_eventhandler_module WHERE handler_class=?",
|
||||
array($handlerClass));
|
||||
if($adb->num_rows($result)===0){
|
||||
$handlerModuleId = $adb->getUniqueId('vtiger_eventhandler_module');
|
||||
$adb->pquery("insert into vtiger_eventhandler_module
|
||||
(eventhandler_module_id, module_name, handler_class)
|
||||
values (?,?,?)", array($handlerModuleId, $moduleName, $handlerClass));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* List handler classes for a module
|
||||
*
|
||||
* @param moduleName - The name of the module
|
||||
*/
|
||||
function listHandlersForModule($moduleName){
|
||||
$adb = $this->adb;
|
||||
$result = $adb->pquery('SELECT handler_class FROM vtiger_eventhandler_module WHERE module_name=?', array($moduleName));
|
||||
$it = new SqlResultIterator($adb, $result);
|
||||
$arr = array();
|
||||
foreach($it as $row){
|
||||
$arr[] = $row->handler_class;
|
||||
}
|
||||
return $arr;
|
||||
}
|
||||
|
||||
/**
|
||||
* List active events.
|
||||
*
|
||||
* @return A list of registered events.
|
||||
*/
|
||||
function listActiveEventHandlers(){
|
||||
$adb = $this->adb;
|
||||
$result = $adb->pquery("select * from vtiger_eventhandlers where is_active=true");
|
||||
return $this->listEventHandlers($result);
|
||||
}
|
||||
|
||||
function listAllEventHandlers(){
|
||||
$adb = $this->adb;
|
||||
$result = $adb->pquery("select * from vtiger_eventhandlers");
|
||||
return $this->listEventHandlers($result);
|
||||
|
||||
}
|
||||
|
||||
private function listEventHandlers($result){
|
||||
$adb = $this->adb;
|
||||
$it = new SQLResultIterator($adb, $result);
|
||||
$out = array();
|
||||
foreach($it as $row){
|
||||
$el = array();
|
||||
$el['eventName'] = $row->event_name;
|
||||
$el['handlerPath'] = $row->handler_path;
|
||||
$el['handlerClass'] = $tow->handler_class;
|
||||
$el['condition'] = $row->cond;
|
||||
$el['isActive'] = $row->is_active;
|
||||
$out[] = $el;
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,203 @@
|
||||
<?php
|
||||
/*+***********************************************************************************
|
||||
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*************************************************************************************/
|
||||
|
||||
require_once 'include/Webservices/Utils.php';
|
||||
require_once("modules/Users/Users.php");
|
||||
require_once("include/Webservices/VtigerCRMObject.php");
|
||||
require_once("include/Webservices/VtigerCRMObjectMeta.php");
|
||||
require_once("include/Webservices/DataTransform.php");
|
||||
require_once("include/Webservices/WebServiceError.php");
|
||||
require_once 'include/utils/utils.php';
|
||||
require_once 'include/Webservices/ModuleTypes.php';
|
||||
require_once('include/Webservices/DescribeObject.php');
|
||||
require_once 'include/Webservices/WebserviceField.php';
|
||||
require_once 'include/Webservices/EntityMeta.php';
|
||||
require_once 'include/Webservices/VtigerWebserviceObject.php';
|
||||
|
||||
/*
|
||||
* An implementation of VTEntityType that uses the webservices api to reflect on vtiger's types.
|
||||
*/
|
||||
class VTWSEntityType{
|
||||
|
||||
function __construct($entityTypeName, $user){
|
||||
$describeResult = vtws_describe($entityTypeName, $user);
|
||||
//print_r($describeResult);
|
||||
$this->entityTypeName = $entityTypeName;
|
||||
$this->description = $describeResult;
|
||||
}
|
||||
|
||||
function usingGlobalCurrentUser($entityTypeName){
|
||||
global $current_user;
|
||||
return new VTWSEntityType($entityTypeName, $current_user);
|
||||
|
||||
|
||||
}
|
||||
|
||||
function forUser($entityTypeName, $user){
|
||||
return new VTWSEntityType($entityTypeName, $user);
|
||||
}
|
||||
function getTabId(){
|
||||
global $adb;
|
||||
if(!isset($this->tabId)){
|
||||
$result = $adb->pquery("select tabid from vtiger_tab where name=?",
|
||||
array($this->entityTypeName));
|
||||
$this->tabId = $adb->query_result($result,0,"tabid");
|
||||
}
|
||||
return $this->tabId;
|
||||
}
|
||||
|
||||
function getModuleName(){
|
||||
return $this->moduleName;
|
||||
}
|
||||
|
||||
function getFieldNames(){
|
||||
if(!isset($this->fieldNames)){
|
||||
$fields = $this->description['fields'];
|
||||
$arr = array();
|
||||
foreach($fields as $field){
|
||||
$arr[]=$field["name"];
|
||||
}
|
||||
$this->fieldNames = $arr;
|
||||
}
|
||||
return $this->fieldNames;
|
||||
}
|
||||
|
||||
|
||||
|
||||
function getFieldLabel($fieldName){
|
||||
if(!isset($this->fieldLabels)){
|
||||
$this->getFieldLabels();
|
||||
}
|
||||
return $this->fieldLabels[$fieldName];
|
||||
}
|
||||
|
||||
function getFieldLabels(){
|
||||
if(!isset($this->fieldLabels)){
|
||||
$fields = $this->description['fields'];
|
||||
foreach($fields as $field){
|
||||
$this->fieldLabels[$field['name']] = $field['label'];
|
||||
}
|
||||
}
|
||||
return $this->fieldLabels;
|
||||
}
|
||||
|
||||
function getFieldType($fieldName){
|
||||
if(!isset($this->fieldTypes[$fieldName])){
|
||||
$fields = $this->description['fields'];
|
||||
foreach($fields as $field){
|
||||
if($field['name']==$fieldName){
|
||||
$type = $field['type'];
|
||||
$et = new VTWSFieldType();
|
||||
switch($type['name']){
|
||||
case 'reference':
|
||||
$et->type = 'Related';
|
||||
$et->relatedTo = $type['refersTo'];
|
||||
break;
|
||||
case 'integer':
|
||||
$et->type = 'Number';
|
||||
$et->format = 'Integer';
|
||||
break;
|
||||
case 'url':
|
||||
$et->type = 'Url';
|
||||
break;
|
||||
case 'string':
|
||||
$et->type = 'String';
|
||||
break;
|
||||
case 'picklist':
|
||||
$et->type = 'Select';
|
||||
$et->values = $type['picklistValues'];
|
||||
break;
|
||||
case 'datetime':
|
||||
$et->type = 'DateTime';
|
||||
break;
|
||||
case 'email':
|
||||
$et->type = 'Email';
|
||||
break;
|
||||
case 'boolean':
|
||||
$et->type = 'Boolean';
|
||||
break;
|
||||
case 'phone':
|
||||
$et->type = 'Phone';
|
||||
break;
|
||||
case 'text':
|
||||
$et->type = 'String';
|
||||
break;
|
||||
case 'a'://Autogenerated type is getting messed up for Accounts
|
||||
$et->type = 'Id';
|
||||
break;
|
||||
case 'date':
|
||||
$et->type = 'Date';
|
||||
break;
|
||||
case 'time':
|
||||
$et->type = 'Time';
|
||||
break;
|
||||
case 'double':
|
||||
$et->type = 'Number';
|
||||
$et->format = 'Decimal';
|
||||
break;
|
||||
case 'autogenerated':
|
||||
$et->type = 'Id';
|
||||
break;
|
||||
case 'owner':
|
||||
$et->type = 'Owner';
|
||||
break;
|
||||
case 'multipicklist':
|
||||
$et->type = 'Select';
|
||||
$et->values = array();
|
||||
break;
|
||||
case 'skype':
|
||||
$et->type = 'Skype';
|
||||
break;
|
||||
case 'password':
|
||||
$et->type = 'Password';
|
||||
break;
|
||||
case 'decimal':
|
||||
$et->type = 'Number';
|
||||
$et->format = 'Decimal';
|
||||
break;
|
||||
default:
|
||||
print_r($type);
|
||||
throw new Exception($type["name"]." is not supported yet.");
|
||||
}
|
||||
$this->fieldTypes[$fieldName] = $et;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return $this->fieldTypes[$fieldName];
|
||||
}
|
||||
|
||||
function getFieldTypes(){
|
||||
$adb = $this->adb;
|
||||
$fieldNames = $this->getFieldNames();
|
||||
$fieldTypes = array();
|
||||
foreach($fieldNames as $fieldName){
|
||||
$fieldTypes[$fieldName]=$this->getFieldType($fieldName);
|
||||
}
|
||||
return $fieldTypes;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
class VTWSFieldType{
|
||||
function toArray(){
|
||||
$ro = new ReflectionObject($this);
|
||||
$props = $ro->getProperties();
|
||||
$arr = array();
|
||||
foreach($props as $prop){
|
||||
$arr[$prop->getName()]=$prop->getValue($this);
|
||||
}
|
||||
return $arr;
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
/*+***********************************************************************************
|
||||
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*************************************************************************************/
|
||||
|
||||
require_once 'include/antlr/antlr.php';
|
||||
require_once 'VTEventConditionSymbol.php';
|
||||
require_once 'VTEventCondition.php';
|
||||
require_once 'VTEventConditionParserLexer.php';
|
||||
require_once 'VTEventConditionParserParser.php';
|
||||
require_once 'VTEntityData.inc';
|
||||
require_once 'VTEntityType.inc';
|
||||
require_once 'VTEventHandler.inc';
|
||||
require_once 'VTEventsManager.inc';
|
||||
require_once 'VTEventTrigger.inc';
|
||||
?>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 184 B |
@@ -0,0 +1,30 @@
|
||||
<public:component lightweight="true">
|
||||
|
||||
<public:attach event="oncontentready" onevent="ShowIcon()" />
|
||||
<public:attach event="ondoubleclick" onevent="EditAnchor()" />
|
||||
|
||||
<script language="javascript">
|
||||
|
||||
var bIsAnchor = this.name.length > 0 && this.getAttribute('href').length == 0 ;
|
||||
|
||||
function ShowIcon()
|
||||
{
|
||||
if ( bIsAnchor )
|
||||
{
|
||||
this.runtimeStyle.height = '1px' ;
|
||||
this.runtimeStyle.paddingLeft = '16px' ;
|
||||
this.runtimeStyle.backgroundImage = 'url(' + window.parent.FCKConfig.FullBasePath + 'css/behaviors/anchor.gif)' ;
|
||||
this.runtimeStyle.backgroundRepeat = 'no-repeat' ;
|
||||
this.runtimeStyle.cursor = 'hand' ;
|
||||
}
|
||||
}
|
||||
|
||||
function EditAnchor()
|
||||
{
|
||||
if ( bIsAnchor )
|
||||
alert( this.outerHTML ) ;
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
</public:component>
|
||||
@@ -0,0 +1,15 @@
|
||||
<public:component lightweight="true">
|
||||
|
||||
<script language="javascript">
|
||||
|
||||
function CancelEvent()
|
||||
{
|
||||
return false ;
|
||||
}
|
||||
|
||||
this.onresizestart = CancelEvent ;
|
||||
this.onbeforeeditfocus = CancelEvent ;
|
||||
|
||||
</script>
|
||||
|
||||
</public:component>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 111 B |
@@ -0,0 +1,30 @@
|
||||
<public:component lightweight="true">
|
||||
|
||||
<public:attach event="oncontentready" onevent="ShowField()" />
|
||||
<public:attach event="ondoubleclick" onevent="EditField()" />
|
||||
|
||||
<script language="javascript">
|
||||
|
||||
var bIsHiddenField = this.type == 'hidden' ;
|
||||
|
||||
function ShowField()
|
||||
{
|
||||
if ( bIsHiddenField )
|
||||
{
|
||||
this.runtimeStyle.width = '20px' ;
|
||||
this.runtimeStyle.height = '20px' ;
|
||||
this.runtimeStyle.border = '1px dotted #FF0000' ;
|
||||
this.runtimeStyle.backgroundImage = 'url(css/behaviors/hiddenfield.gif)' ;
|
||||
this.runtimeStyle.fontSize = '99px' ;
|
||||
}
|
||||
}
|
||||
|
||||
function EditField()
|
||||
{
|
||||
if ( bIsHiddenField )
|
||||
alert( this.outerHTML ) ;
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
</public:component>
|
||||
@@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<bindings xmlns="http://www.mozilla.org/xbl">
|
||||
<binding id="showtableborders">
|
||||
<implementation>
|
||||
<constructor>
|
||||
this.CheckShowBorders() ;
|
||||
</constructor>
|
||||
<method name="CheckShowBorders">
|
||||
<body>
|
||||
var oClassRegex = /\s*FCK__ShowTableBorders\s*/ ;
|
||||
|
||||
if ( this.border == 0 )
|
||||
{
|
||||
if ( !oClassRegex.test( this.className ) )
|
||||
this.className += ' FCK__ShowTableBorders' ;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( oClassRegex.test( this.className ) )
|
||||
this.className = this.className.replace( oClassRegex, '' ) ;
|
||||
}
|
||||
</body>
|
||||
</method>
|
||||
</implementation>
|
||||
<handlers>
|
||||
<handler event="DOMAttrModified">
|
||||
this.CheckShowBorders() ;
|
||||
</handler>
|
||||
</handlers>
|
||||
</binding>
|
||||
<binding id="anchors">
|
||||
<implementation>
|
||||
<constructor>
|
||||
<![CDATA[
|
||||
this.IsAnchor = ( this.name != null && this.name.length > 0 && ( this.getAttribute('href') == null || this.getAttribute('href').length == 0 ) ) ;
|
||||
this.ShowIcon() ;
|
||||
]]>
|
||||
</constructor>
|
||||
<method name="ShowIcon">
|
||||
<body>
|
||||
if ( this.IsAnchor )
|
||||
{
|
||||
this.style.height = '1px' ;
|
||||
this.style.paddingLeft = '16px' ;
|
||||
this.style.backgroundImage = 'url(behaviors/anchor.gif)' ;
|
||||
this.style.backgroundRepeat = 'no-repeat' ;
|
||||
this.style.cursor = 'pointer' ;
|
||||
}
|
||||
</body>
|
||||
</method>
|
||||
</implementation>
|
||||
<handlers>
|
||||
<handler event="click">
|
||||
if ( this.IsAnchor )
|
||||
alert( this.IsAnchor ) ;
|
||||
</handler>
|
||||
</handlers>
|
||||
</binding>
|
||||
</bindings>
|
||||
@@ -0,0 +1,36 @@
|
||||
<public:component lightweight="true">
|
||||
|
||||
<public:attach event="oncontentready" onevent="ShowBorders()" />
|
||||
<public:attach event="onpropertychange" onevent="OnPropertyChange()" />
|
||||
|
||||
<script language="javascript">
|
||||
var oClassRegex = /\s*FCK__ShowTableBorders/ ;
|
||||
var FCKConfig = window.parent.FCKConfig ;
|
||||
|
||||
function ShowBorders()
|
||||
{
|
||||
if ( this.border == 0 )
|
||||
{
|
||||
if ( !oClassRegex.test( this.className ) )
|
||||
this.className += ' FCK__ShowTableBorders' ;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( oClassRegex.test( this.className ) )
|
||||
{
|
||||
this.className = this.className.replace( oClassRegex, '' ) ;
|
||||
if ( this.className.length == 0 )
|
||||
this.removeAttribute( 'className', 0 ) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function OnPropertyChange()
|
||||
{
|
||||
if ( event.propertyName == 'border' || event.propertyName == 'className' )
|
||||
ShowBorders() ;
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
</public:component>
|
||||
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* FCKeditor - The text editor for internet
|
||||
* Copyright (C) 2003-2005 Frederico Caldeira Knabben
|
||||
*
|
||||
* Licensed under the terms of the GNU Lesser General Public License:
|
||||
* http://www.opensource.org/licenses/lgpl-license.php
|
||||
*
|
||||
* For further information visit:
|
||||
* http://www.fckeditor.net/
|
||||
*
|
||||
* "Support Open Source software. What about a donation today?"
|
||||
*
|
||||
* File Name: fck_editorarea.css
|
||||
* This is the default CSS file used by the editor area. It defines the
|
||||
* initial font of the editor and background color.
|
||||
*
|
||||
* A user can configure the editor to use another CSS file. Just change
|
||||
* the value of the FCKConfig.EditorAreaCSS key in the configuration
|
||||
* file.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben ([email protected])
|
||||
*/
|
||||
|
||||
body
|
||||
{
|
||||
font-family: Arial, Verdana, Sans-Serif;
|
||||
font-size: 12px;
|
||||
padding: 5px 5px 5px 5px;
|
||||
margin: 0px;
|
||||
border-style: none;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
/*
|
||||
Just uncomment the following block if you want to avoid spaces between
|
||||
paragraphs. Remember to apply the same style in your output front end page.
|
||||
*/
|
||||
/*
|
||||
P, UL, LI
|
||||
{
|
||||
margin-top: 0px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
*/
|
||||
|
||||
.Bold
|
||||
{
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.Title
|
||||
{
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
color: #cc3300;
|
||||
}
|
||||
|
||||
.Code
|
||||
{
|
||||
border: #8b4513 1px solid;
|
||||
padding-right: 5px;
|
||||
padding-left: 5px;
|
||||
color: #000066;
|
||||
font-family: 'Courier New' , Monospace;
|
||||
background-color: #ff9933;
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* FCKeditor - The text editor for internet
|
||||
* Copyright (C) 2003-2005 Frederico Caldeira Knabben
|
||||
*
|
||||
* Licensed under the terms of the GNU Lesser General Public License:
|
||||
* http://www.opensource.org/licenses/lgpl-license.php
|
||||
*
|
||||
* For further information visit:
|
||||
* http://www.fckeditor.net/
|
||||
*
|
||||
* "Support Open Source software. What about a donation today?"
|
||||
*
|
||||
* File Name: fck_internal.css
|
||||
* This CSS Style Sheet defines rules used by the editor for its internal use.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben ([email protected])
|
||||
*/
|
||||
|
||||
TABLE.FCK__ShowTableBorders, TABLE.FCK__ShowTableBorders TD, TABLE.FCK__ShowTableBorders TH
|
||||
{
|
||||
border: #d3d3d3 1px solid;
|
||||
}
|
||||
|
||||
FORM
|
||||
{
|
||||
border: 1px dotted #FF0000;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
.FCK__Flash
|
||||
{
|
||||
border: darkgray 1px solid;
|
||||
background-position: center center;
|
||||
background-image: url(images/fck_flashlogo.gif);
|
||||
background-repeat: no-repeat;
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
}
|
||||
|
||||
.FCK__Anchor
|
||||
{
|
||||
background-position: center center;
|
||||
background-image: url(images/fck_anchor.gif);
|
||||
background-repeat: no-repeat;
|
||||
width: 16px;
|
||||
height: 15px;
|
||||
}
|
||||
|
||||
.FCK__PageBreak
|
||||
{
|
||||
background-position: center center;
|
||||
background-image: url(images/fck_pagebreak.gif);
|
||||
background-repeat: no-repeat;
|
||||
clear: both;
|
||||
display: block;
|
||||
float: none;
|
||||
width: 100%;
|
||||
border-top: #999999 1px dotted;
|
||||
border-bottom: #999999 1px dotted;
|
||||
border-right: 0px;
|
||||
border-left: 0px;
|
||||
height: 5px;
|
||||
}
|
||||
|
||||
input[type="hidden"]
|
||||
{
|
||||
display: inline;
|
||||
width:20px;
|
||||
height:20px;
|
||||
border:1px dotted #FF0000 ;
|
||||
background-image: url(behaviors/hiddenfield.gif);
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
input[type="hidden"]:after
|
||||
{
|
||||
padding-left: 20px;
|
||||
content: "" ;
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user