-gMIS更新: 自动层级目录

-gMIS 平台层级结构管理功能模块(Xdirectory)终于在 @Tintin 的帮助下,顺利完成。 Xdirectory是为了方便用户输入树形的数据结构,如下图所示: gmis-xdirectory-201604

通过xdirectory定义树形结构,可以方便的展示类似widnows资源管理器样式的菜单。

所谓层级(hierarchy)、分类(classification)及编码(encode)、代码(code)的含义,可以进一步参考 -ufqi-blog 之前的专页讨论:-R/k2Sl  。 Xdirectory有两个主要组成部分: extra/xdirectory.php 和 class/xdirectory.class.php . 前者负责与 -gMIS 系统的集成,后者负责具体编码及层级的实现。

1) extra/xdirectory.php 负责将层级代码list按一定的缩进规则呈现出来,并响应相应的选择、增加同级和增加下级的点击事件,将相应结果抄送到调用者那里。

2)class/xdirectory.class 主要有三个方法,负责生产list,生产同级代码和生产下级代码。 # get dir list, expand all of directories above the target dir or its same level, “open all to target”
function getList($targetDir, $levelLen){ } # get next dir code, 2c after 2b, 10 after 0z, in base36, i.e. 0-9, a-z
function getNextDir($currentDir, $levelLen, $ilevel, $currentVal){ } # get sub dir under currentDir, a1b200 for a1b2
function getSubDir($currentDir, $levelLen, $ilevel, $currentVal){ }

Xdirectory 默认的层宽度是两位,默认采用的编码是36进制,也即,0-9, a-z , 通常情况下,每层级可以容纳  1296 个元素(36^2, 00…..0z, 10….1z…..zz),能够满足一般情况下的分类分级需求。更大的层宽度,可以考虑3位(46,656个)。

-gMIS 在设计的时候,预留了扩展输入/输出接口,在 extra 目录下,通过表配置中的filed的 inputtype可以指定某个字段的输入类型为 extra 扩展输入,调用 xdirectory 则是 <extrainput>extra/xdirectory.php?tbl=THIS_TABLE&amp;icode=icode&amp;iname=iname&amp;parentcode=THIS_icode</extrainput> Xdirectory 首先被用在 -gMIS 的菜单项管理中,如下图是配置顶部导航菜单的功能模块。 -gmis-menu-setting  

发表在 -gMIS, 编程技术, 计算机技术 | 标签为 , , , | 2条评论

好奇婴幼儿中国国民党革委会中国国民党Apache Softwares

-GWA2 core updates: 容错处理,孤儿占位符

-GWA2 的核心升级了一处容错处理,问题描述为:

如果某个WebApp的实例$obj, 在进行SQL组装时,如果$obj->set 的变量数据与SQL中的占位符(?)不一致时,特别是占位符(?)所指代的变量名未出现时,在SQL拼装时,容易产生将idxArr[0]的值赋予给这个缺失的变量值。这样就导致占位符序列和变量序列错位现象,从而可能到SQL在写入时的错误。这种错误可称之为“孤儿占位符”。

问题的原因是,调用者在使用$obj->set时,在SQL中写入了某个占位符,但并未在$obj-hmf中给定相应的值。一个错误的调用如:
$obj->set(‘b’, $aVal);
$obj->set(‘c’, $bVal);
$result = $obj->setBy(‘a, b, c’, null);
此时的a,没有通过$obj->set赋值,会在后续拼装SQL时出错。

解决的办法是,在拼装匹配占位符和变量时,做变量名和变量值的检查。涉及到的代码在 inc/mysql.class , 如下:

if(strpos($t, $idxarr[$i]) === false){
# in case that, field was not set by $obj->set but written in sql with ‘?’, Sat Apr 2 23:54:48 CST 2016
debug(__FILE__.”: found unmatched field:[$t].”);
$sql = substr($sql,$a+1);
$a = strpos($sql,”?”);
$newsql .= str_replace(“?”, ‘\’\”, $t);
}
else{
$sql = substr($sql,$a+1);
$a = strpos($sql,”?”);
$newsql .= str_replace(“?”,$this->_QuoteSafe($hmvars[$idxarr[$i]]),$t);
$i++;
}

同时也将修改同步到基于 -GWA2 的 -gMIS 中。

发表在 -GWA2, 编程技术, 计算机技术 | 标签为 , , , | 留下评论

中国国民党Apache Softwares亮月亮科技OpenAI ChatGPT

GWA2更新:SQL语句写入数字型字符串(2)

关于在MySQL的使用中,插入数字型字符串时,在贴文:
“GWA2更新:SQL语句写入数字型字符串” (  -R/gwa2-update  )
做过分析,遇到这样的情况,需要特殊对待,避开 $obj->setBy , 而是使用 $obj->execBy 来自行拼凑SQL语句。

然而在 -gMIS 这样的使用情景中,却不能自行拆解 $obj->setBy , 所以需要进一步的分析寻找解决方法,思路如下:
1. -gMIS 环境中,有 tblconf.inc 通过他能够读取到字段的默认值,这也是在
“-gMIS更新兼容Strict SQL Mode” (  -R/e2TX  )
讨论过,设想如果知道一个字段的默认值,可以据此判断它的值的表现形式;这是下面的基础;
2. 在 webapp.class 中增加 $hmfieldinfo 用于保存当前操作表的结构信息,主要包括字段默认值等信息;从这里也可以读取到字段类型,比如int,char等;后续可以继续利用这些属性;
3. 进一步地,在 gtbl.class extends webapp.class 中,在设置 setFieldList 时,填充 $hmfieldinfo ;
4. 在dba.class 中,进一步的透传 $hmfieldinfo 到 mysql.class 中,然后在 query执行过程中,根据 $hmfieldinfo 中的相关属性进行判断:当field是char或者默认值是 ” 时,即便是 0102 这样的值,也当作字符串进行处理。

如此即可。

发表在 -gMIS, -GWA2, 编程技术, 计算机技术 | 标签为 , | 留下评论

愛自己悅己容2nd愛自己悅己容汽車老司機車載汽車老司機

在office word中插入程序源代码/insert source codes in office word

最近在整理关于 -gMIS-GWA2 的相关手册,使用MS office word 进行相关文档的编写,发现需要在Word中插入排版整齐,带有语法高亮的源程序代码是一种迫切的需求,经搜索找到英文版的操作指南,于是尝试也参照写一份中文的,在Office Word中插入排版整齐、带有语法高亮源程序代码的操作步骤.

1. 准备工作
打开Office word,打开Notepad++ ( 注意!不是WIndows 自带的Notepad,而是 -Notepad++ ),打开要插入的源程序代码在 -Notepad++ 中,备用。

2. 将源代码从Notepad++中带格式复制出来
source-code-in-word-201602

3. 在Office Word中插入一个 Text Box(文本框),然后将剪贴板中的带格式的源代码复制进来
插入一个文本框(text box):
source-code-in-word-201602-3

在文本框中,右键选择粘贴(Paste):

source-code-in-word-201602-2
事情就这样成了。

4. 某些情况下,还需要选中粘贴进来的文本,去掉文本背景色,以实现对代码原格式的呈现。

 

发表在 -gMIS, -GWA2, 计算机技术 | 标签为 , , | 留下评论

愛自己悅己容汽車老司機車載汽車老司機好奇婴幼儿

万恶之源的《商君书》

商君书制民五法.201602 中国万恶之源,秦朝商鞅的《商君书》。

胡紫微 讲得太好了!真的精彩。句句中的。而且我赌你能听懂。。值得花一个半小时去聆听的一次讲课。诚荐。//@于晓非微博: 再转!强烈推荐观看鲍鹏山老师的精彩演讲。鲍老师彻底剖析了中国两千多年黑暗专制政治的理论基础! @于晓非微博 强烈推荐 鲍鹏山教授讲《商君书》!(视频)这是一堂刨了中国两千多年专制统治制度祖坟的讲座!(-R/P2SO  )

-R/E2SI , 令人脊背发凉的历史评说,中国专制社会理论基础,国强民弱。 中华民族五千年黑暗史的源头,中国万恶社会之源,商鞅的《商君书》。 通过专制统治人民的五种方法: 1.以弱去强,以奸驭良,实行流氓政治、小人政治; 2. 壹教,思想统治; 3.剥夺个人资产,造成一个无恒产、无恒心的社会; 4.辱民、贫民、弱民,以利于统治; 5.杀力,发动战争,外杀强敌,内杀强民。        

 

发表在 社会生活 | 标签为 , , , , | 3条评论

愛自己悅己容2nd愛自己悅己容汽車老司機車載汽車老司機

-gwa2 安全更新及域名绑定到模块

近期对 -gwa2 有几处更新,觉得有必要记下来供以后参考。

1. 安全组件升级
对 -gwa2 的全局输入变量做html标签的过滤,主要是为了预防 <script, <iframe, <embed, <img 等有害标签可能导致的跨站攻击xss. 此类操作之前都是在app的程序中按需做相应的处理,目前看来,这些需要还是有一定的共性,需要拿来单独处理。
改进的措施是将 < 符号统一替换为 &lt; .
加固改进后,应用开发层就不需要考虑再做类似的过滤操作,进入到业务操作层的代码已经是安全的了。唯有在需要html标签的地方,比如可视化编辑器等地方,需要存储为html标签,此时在输出层需要做一次转码。也即,在输出层做 &lt; 到 < 的转码.

2. 基于同一app内多个域名绑定到对应的子应用
-gwa2 吸收和使用统一入口这个多数优秀框架的属性或者称之为“路由”功能,为在同一App内绑定多个不同的域名到对应的各个不同的子应用、模块上提供了可能。遇有这样的需求时,可以为不同的模块使用不同的子域名来进行相应的访问。
通常访问某个app中的模块,其访问路径是:
//abc.com/?mod=product
如果使用单独的域名来对product进行访问,可以实现:
//product.abc.com/

这一地址也可以在“路由”操作时,根据被访问域名的不同,加载到 mod=product 实现与带参数访问一样的效果。
既然可以根据被访问域名的不同加载不同的mod,其域名形式就不仅仅局限于子域名,甚至可以完全不同的写法。如:
//efg.com/
同样可以指向 mod=product 模块。
这种写法或对基于SaaS的一些应用会有帮助。

3. 命名空间的使用
在使用 -gwa2 的新应用中,使用了两个外部组件,一个是有命名空间的构件,namespace xxxx, 另外一个是没有namespace ,结果就发生了外部空间中也命名了 Message.class 这个类,与自身业务对象发生冲突。表现为运行时报错说 message 这个对象不能重新declaration,需要解决。
解决的办法,在namespace出现之前,只有将两部message.class改名,可以分别该做message_xxx 和 message_yyy以避免命名冲突。
有了namespace之后,情况可以维持不变,继续分别叫这个名字,只是在应用时要加上各自的引用路径,从\写起,有些类似file system一样。
考察这里的namespace,与java和perl中的packgage有一些类似,都是在对象的再上一层形成“对象组” class group, 从而使得多个相同的类,可以分别存在在不同的命名空间或者组、包之内。

 

发表在 -GWA2, 编程技术, 计算机技术 | 标签为 , , , | 留下评论

愛自己悅己容汽車老司機車載汽車老司機好奇婴幼儿