Browse Source

V1.3版本,阶段A:GLUE模式开关

xueli.xue 9 years ago
parent
commit
5c1bba3364

+ 15 - 4
doc/db/tables_xxl_job.sql View File

1
-# DROP TABLE IF EXISTS XXL_JOB_QRTZ_FIRED_TRIGGERS;
2
-# DROP TABLE IF EXISTS XXL_JOB_QRTZ_PAUSED_TRIGGER_GRPS;
3
-# DROP TABLE IF EXISTS XXL_JOB_QRTZ_SCHEDULER_STATE;
4
-# DROP TABLE IF EXISTS XXL_JOB_QRTZ_LOCKS;
5
 
1
 
6
 CREATE TABLE XXL_JOB_QRTZ_JOB_DETAILS
2
 CREATE TABLE XXL_JOB_QRTZ_JOB_DETAILS
7
   (
3
   (
160
   `author` varchar(64) DEFAULT NULL COMMENT '作者',
156
   `author` varchar(64) DEFAULT NULL COMMENT '作者',
161
   `alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件',
157
   `alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件',
162
   `alarm_threshold` int(11) DEFAULT NULL COMMENT '报警阀值(连续失败次数)',
158
   `alarm_threshold` int(11) DEFAULT NULL COMMENT '报警阀值(连续失败次数)',
159
+  `glue_switch` int(11) DEFAULT '0' COMMENT 'GLUE模式开关:0-否,1-是',
160
+  `glue_source` text COMMENT 'GLUE源代码',
161
+  `glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注',
163
   PRIMARY KEY (`id`)
162
   PRIMARY KEY (`id`)
164
 );
163
 );
165
 
164
 
180
   PRIMARY KEY (`id`)
179
   PRIMARY KEY (`id`)
181
 );
180
 );
182
 
181
 
182
+CREATE TABLE `xxl_job_qrtz_trigger_logglue` (
183
+  `id` int(11) NOT NULL AUTO_INCREMENT,
184
+  `job_group` varchar(255) NOT NULL,
185
+  `job_name` varchar(255) NOT NULL,
186
+  `glue_source` text,
187
+  `glue_remark` varchar(128) NOT NULL,
188
+  `add_time` timestamp NULL DEFAULT NULL,
189
+  `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
190
+  PRIMARY KEY (`id`)
191
+) ;
192
+
193
+
183
 commit;
194
 commit;
184
 
195
 

+ 8 - 4
xxl-job-admin/src/main/java/com/xxl/job/controller/JobInfoController.java View File

70
 	@ResponseBody
70
 	@ResponseBody
71
 	public ReturnT<String> add(String jobGroup, String jobName, String jobCron, String jobDesc,
71
 	public ReturnT<String> add(String jobGroup, String jobName, String jobCron, String jobDesc,
72
 			String handler_address, String handler_name, String handler_params, 
72
 			String handler_address, String handler_name, String handler_params, 
73
-			String author, String alarmEmail, int alarmThreshold) {
73
+			String author, String alarmEmail, int alarmThreshold, int glueSwitch) {
74
 		
74
 		
75
 		// valid
75
 		// valid
76
 		if (JobGroupEnum.match(jobGroup) == null) {
76
 		if (JobGroupEnum.match(jobGroup) == null) {
88
 		if (StringUtils.isBlank(handler_address)) {
88
 		if (StringUtils.isBlank(handler_address)) {
89
 			return new ReturnT<String>(500, "请输入“机器地址”");
89
 			return new ReturnT<String>(500, "请输入“机器地址”");
90
 		}
90
 		}
91
-		if (StringUtils.isBlank(handler_name)) {
91
+		if (glueSwitch==0 && StringUtils.isBlank(handler_name)) {
92
 			return new ReturnT<String>(500, "请输入“执行器”");
92
 			return new ReturnT<String>(500, "请输入“执行器”");
93
 		}
93
 		}
94
 		if (StringUtils.isBlank(author)) {
94
 		if (StringUtils.isBlank(author)) {
127
 		jobInfo.setAuthor(author);
127
 		jobInfo.setAuthor(author);
128
 		jobInfo.setAlarmEmail(alarmEmail);
128
 		jobInfo.setAlarmEmail(alarmEmail);
129
 		jobInfo.setAlarmThreshold(alarmThreshold);
129
 		jobInfo.setAlarmThreshold(alarmThreshold);
130
+		jobInfo.setGlueSwitch(glueSwitch);
131
+		jobInfo.setGlueSource(null);
132
+		jobInfo.setGlueRemark(null);
130
 		xxlJobInfoDao.save(jobInfo);
133
 		xxlJobInfoDao.save(jobInfo);
131
 		
134
 		
132
 		try {
135
 		try {
148
 	@ResponseBody
151
 	@ResponseBody
149
 	public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc,
152
 	public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc,
150
 			String handler_address, String handler_name, String handler_params, 
153
 			String handler_address, String handler_name, String handler_params, 
151
-			String author, String alarmEmail, int alarmThreshold) {
154
+			String author, String alarmEmail, int alarmThreshold, int glueSwitch) {
152
 		
155
 		
153
 		// valid
156
 		// valid
154
 		if (JobGroupEnum.match(jobGroup) == null) {
157
 		if (JobGroupEnum.match(jobGroup) == null) {
166
 		if (StringUtils.isBlank(handler_address)) {
169
 		if (StringUtils.isBlank(handler_address)) {
167
 			return new ReturnT<String>(500, "请输入“机器地址”");
170
 			return new ReturnT<String>(500, "请输入“机器地址”");
168
 		}
171
 		}
169
-		if (StringUtils.isBlank(handler_name)) {
172
+		if (glueSwitch==0 && StringUtils.isBlank(handler_name)) {
170
 			return new ReturnT<String>(500, "请输入“执行器”");
173
 			return new ReturnT<String>(500, "请输入“执行器”");
171
 		}
174
 		}
172
 		if (StringUtils.isBlank(author)) {
175
 		if (StringUtils.isBlank(author)) {
192
 		jobInfo.setAuthor(author);
195
 		jobInfo.setAuthor(author);
193
 		jobInfo.setAlarmEmail(alarmEmail);
196
 		jobInfo.setAlarmEmail(alarmEmail);
194
 		jobInfo.setAlarmThreshold(alarmThreshold);
197
 		jobInfo.setAlarmThreshold(alarmThreshold);
198
+		jobInfo.setGlueSwitch(glueSwitch);
195
 		
199
 		
196
 		try {
200
 		try {
197
 			// fresh quartz
201
 			// fresh quartz

+ 31 - 2
xxl-job-admin/src/main/java/com/xxl/job/core/model/XxlJobInfo.java View File

24
 	private String alarmEmail;	// 报警邮件
24
 	private String alarmEmail;	// 报警邮件
25
 	private int alarmThreshold;	// 报警阀值
25
 	private int alarmThreshold;	// 报警阀值
26
 	
26
 	
27
+	private int glueSwitch;		// GLUE模式开关:0-否,1-是
28
+	private String glueSource;	// GLUE源代码
29
+	private String glueRemark;	// GLUE备注
30
+	
27
 	// copy from quartz
31
 	// copy from quartz
28
 	private String jobStatus;	// 任务状态 【base on quartz】
32
 	private String jobStatus;	// 任务状态 【base on quartz】
29
 
33
 
131
 		this.jobStatus = jobStatus;
135
 		this.jobStatus = jobStatus;
132
 	}
136
 	}
133
 
137
 
138
+	public int getGlueSwitch() {
139
+		return glueSwitch;
140
+	}
141
+
142
+	public void setGlueSwitch(int glueSwitch) {
143
+		this.glueSwitch = glueSwitch;
144
+	}
145
+
146
+	public String getGlueSource() {
147
+		return glueSource;
148
+	}
149
+
150
+	public void setGlueSource(String glueSource) {
151
+		this.glueSource = glueSource;
152
+	}
153
+
154
+	public String getGlueRemark() {
155
+		return glueRemark;
156
+	}
157
+
158
+	public void setGlueRemark(String glueRemark) {
159
+		this.glueRemark = glueRemark;
160
+	}
161
+
134
 	@Override
162
 	@Override
135
 	public String toString() {
163
 	public String toString() {
136
 		return "XxlJobInfo [id=" + id + ", jobGroup=" + jobGroup + ", jobName=" + jobName + ", jobCron=" + jobCron
164
 		return "XxlJobInfo [id=" + id + ", jobGroup=" + jobGroup + ", jobName=" + jobName + ", jobCron=" + jobCron
137
 				+ ", jobDesc=" + jobDesc + ", jobClass=" + jobClass + ", jobData=" + jobData + ", addTime=" + addTime
165
 				+ ", jobDesc=" + jobDesc + ", jobClass=" + jobClass + ", jobData=" + jobData + ", addTime=" + addTime
138
 				+ ", updateTime=" + updateTime + ", author=" + author + ", alarmEmail=" + alarmEmail
166
 				+ ", updateTime=" + updateTime + ", author=" + author + ", alarmEmail=" + alarmEmail
139
-				+ ", alarmThreshold=" + alarmThreshold + ", jobStatus=" + jobStatus + "]";
167
+				+ ", alarmThreshold=" + alarmThreshold + ", glueSwitch=" + glueSwitch + ", glueSource=" + glueSource
168
+				+ ", glueRemark=" + glueRemark + ", jobStatus=" + jobStatus + "]";
140
 	}
169
 	}
141
-
170
+	
142
 }
171
 }

+ 20 - 4
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml View File

19
 	    <result column="author" property="author" />
19
 	    <result column="author" property="author" />
20
 	    <result column="alarm_email" property="alarmEmail" />
20
 	    <result column="alarm_email" property="alarmEmail" />
21
 	    <result column="alarm_threshold" property="alarmThreshold" />
21
 	    <result column="alarm_threshold" property="alarmThreshold" />
22
+	    
23
+	    <result column="glue_switch" property="glueSwitch" />
24
+	    <result column="glue_source" property="glueSource" />
25
+	    <result column="glue_remark" property="glueRemark" />
22
 	</resultMap>
26
 	</resultMap>
23
 
27
 
24
 	<sql id="Base_Column_List">
28
 	<sql id="Base_Column_List">
33
 		t.update_time,
37
 		t.update_time,
34
 		t.author,
38
 		t.author,
35
 		t.alarm_email,
39
 		t.alarm_email,
36
-		t.alarm_threshold
40
+		t.alarm_threshold,
41
+		t.glue_switch,
42
+		t.glue_source,
43
+		t.glue_remark
37
 	</sql>
44
 	</sql>
38
 	
45
 	
39
 	<select id="pageList" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
46
 	<select id="pageList" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
76
 			update_time,
83
 			update_time,
77
 			author,
84
 			author,
78
 			alarm_email,
85
 			alarm_email,
79
-			alarm_threshold
86
+			alarm_threshold,
87
+			glue_switch,
88
+			glue_source,
89
+			glue_remark
80
 		) VALUES (
90
 		) VALUES (
81
 			#{jobGroup}, 
91
 			#{jobGroup}, 
82
 			#{jobName}, 
92
 			#{jobName}, 
88
 			NOW(),
98
 			NOW(),
89
 			#{author},
99
 			#{author},
90
 			#{alarmEmail},
100
 			#{alarmEmail},
91
-			#{alarmThreshold}
101
+			#{alarmThreshold},
102
+			#{glueSwitch},
103
+			#{glueSource},
104
+			#{glueRemark}
92
 		);
105
 		);
93
 		<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id"> 
106
 		<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id"> 
94
 			SELECT LAST_INSERT_ID() 
107
 			SELECT LAST_INSERT_ID() 
111
 			update_time = NOW(),
124
 			update_time = NOW(),
112
 			author = #{author},
125
 			author = #{author},
113
 			alarm_email = #{alarmEmail},
126
 			alarm_email = #{alarmEmail},
114
-			alarm_threshold = #{alarmThreshold}
127
+			alarm_threshold = #{alarmThreshold},
128
+			glue_switch = #{glueSwitch},
129
+			glue_source = #{glueSource},
130
+			glue_remark = #{glueRemark}
115
 		WHERE job_group = #{jobGroup}
131
 		WHERE job_group = #{jobGroup}
116
 			AND job_name = #{jobName}
132
 			AND job_name = #{jobName}
117
 	</update>
133
 	</update>

+ 15 - 2
xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/index.ftl View File

78
 					                  	<th name="author" >负责人</th>
78
 					                  	<th name="author" >负责人</th>
79
 					                  	<th name="alarmEmail" >报警邮件</th>
79
 					                  	<th name="alarmEmail" >报警邮件</th>
80
 					                  	<th name="alarmThreshold" >报警阀值</th>
80
 					                  	<th name="alarmThreshold" >报警阀值</th>
81
+					                  	<th name="glueSwitch" >GLUE模式</th>
81
 					                  	<th name="jobStatus" >状态</th>
82
 					                  	<th name="jobStatus" >状态</th>
82
 					                  	<th>操作</th>
83
 					                  	<th>操作</th>
83
 					                </tr>
84
 					                </tr>
142
 						<div class="col-sm-4"><input type="text" class="form-control" name="alarmThreshold" placeholder="请输入“报警阈值”" maxlength="200" ></div>
143
 						<div class="col-sm-4"><input type="text" class="form-control" name="alarmThreshold" placeholder="请输入“报警阈值”" maxlength="200" ></div>
143
 					</div>
144
 					</div>
144
 					<div class="form-group">
145
 					<div class="form-group">
145
-						<div class="col-sm-offset-3 col-sm-9">
146
+						<div class="col-sm-offset-3 col-sm-6">
146
 							<button type="submit" class="btn btn-primary"  >保存</button>
147
 							<button type="submit" class="btn btn-primary"  >保存</button>
147
 							<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
148
 							<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
148
 						</div>
149
 						</div>
150
+						<div class="col-sm-3">
151
+							<div class="checkbox">
152
+		                        <label><input type="checkbox" class="ifGLUE" >开启GLUE模式<font color="black">*</font></label>
153
+		                        <input type="hidden" name="glueSwitch" value="0" >
154
+	                    	</div>
155
+						</div>
149
 					</div>
156
 					</div>
150
 				</form>
157
 				</form>
151
          	</div>
158
          	</div>
194
 						<div class="col-sm-4"><input type="text" class="form-control" name="alarmThreshold" placeholder="请输入“报警阈值”" maxlength="200" ></div>
201
 						<div class="col-sm-4"><input type="text" class="form-control" name="alarmThreshold" placeholder="请输入“报警阈值”" maxlength="200" ></div>
195
 					</div>
202
 					</div>
196
 					<div class="form-group">
203
 					<div class="form-group">
197
-						<div class="col-sm-offset-3 col-sm-9">
204
+						<div class="col-sm-offset-3 col-sm-6">
198
 							<button type="submit" class="btn btn-primary"  >保存</button>
205
 							<button type="submit" class="btn btn-primary"  >保存</button>
199
 							<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
206
 							<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
200
 						</div>
207
 						</div>
208
+						<div class="col-sm-3">
209
+							<div class="checkbox">
210
+		                        <label><input type="checkbox" class="ifGLUE" >开启GLUE模式<font color="black">*</font></label>
211
+		                        <input type="hidden" name="glueSwitch" value="0" >
212
+	                    	</div>
213
+						</div>
201
 					</div>
214
 					</div>
202
 				</form>
215
 				</form>
203
          	</div>
216
          	</div>

+ 2 - 1
xxl-job-admin/src/main/webapp/static/js/jobcode.index.1.js View File

8
 	});
8
 	});
9
 	codeEditor.setValue( $("#demoCode").val() );
9
 	codeEditor.setValue( $("#demoCode").val() );
10
 	
10
 	
11
+	// editor height
11
 	var height = Math.max(document.documentElement.clientHeight, document.body.offsetHeight);
12
 	var height = Math.max(document.documentElement.clientHeight, document.body.offsetHeight);
12
 	$(".CodeMirror").attr('style', 'height:'+ height +'px');
13
 	$(".CodeMirror").attr('style', 'height:'+ height +'px');
13
 	
14
 	
14
-	
15
+	// code source save
15
 	$("#save").click(function() {
16
 	$("#save").click(function() {
16
 		var codeSource = codeEditor.getValue();
17
 		var codeSource = codeEditor.getValue();
17
 		var codeRemark = $("#codeRemark").val();
18
 		var codeRemark = $("#codeRemark").val();

+ 52 - 5
xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js View File

61
 	                { "data": 'author', "visible" : true},
61
 	                { "data": 'author', "visible" : true},
62
 	                { "data": 'alarmEmail', "visible" : false},
62
 	                { "data": 'alarmEmail', "visible" : false},
63
 	                { "data": 'alarmThreshold', "visible" : false},
63
 	                { "data": 'alarmThreshold', "visible" : false},
64
+	                { "data": 'glueSwitch', "visible" : false},
64
 	                { 
65
 	                { 
65
 	                	"data": 'jobStatus', 
66
 	                	"data": 'jobStatus', 
66
 	                	"visible" : true,
67
 	                	"visible" : true,
87
 								}
88
 								}
88
 	                			// log url
89
 	                			// log url
89
 	                			var logUrl = base_url +'/joblog?jobGroup='+ row.jobGroup +'&jobName='+ row.jobName;
90
 	                			var logUrl = base_url +'/joblog?jobGroup='+ row.jobGroup +'&jobName='+ row.jobName;
91
+	                			
90
 	                			// log url
92
 	                			// log url
91
-	                			var codeUrl = base_url +'/jobcode?id='+ row.id;
93
+	                			var codeHtml = "";
94
+	                			if(row.glueSwitch != 0){
95
+	                				var codeUrl = base_url +'/jobcode?id='+ row.id;
96
+	                				codeHtml = '<button class="btn btn-warning btn-xs" type="button" onclick="javascript:window.open(\'' + codeUrl + '\')" >GLUE</button>  '
97
+	                			}
92
 	                			
98
 	                			
93
 	                			// job data
99
 	                			// job data
94
 	                			var jobDataMap = eval('(' + row.jobData + ')');
100
 	                			var jobDataMap = eval('(' + row.jobData + ')');
100
 	                							' jobDesc="'+ row.jobDesc +'" '+
106
 	                							' jobDesc="'+ row.jobDesc +'" '+
101
 	                							' jobClass="'+ row.jobClass +'" '+
107
 	                							' jobClass="'+ row.jobClass +'" '+
102
 	                							' jobData="'+ row.jobData +'" '+
108
 	                							' jobData="'+ row.jobData +'" '+
103
-	                							' author="'+ row.author +'" '+
104
-	                							' alarmEmail="'+ row.alarmEmail +'" '+
105
-	                							' alarmThreshold="'+ row.alarmThreshold +'" '+
106
 	                							' handler_params="'+jobDataMap.handler_params +'" '+
109
 	                							' handler_params="'+jobDataMap.handler_params +'" '+
107
 	                							' handler_address="'+ jobDataMap.handler_address +'" '+
110
 	                							' handler_address="'+ jobDataMap.handler_address +'" '+
108
 	                							' handler_name="'+ jobDataMap.handler_name +'" '+
111
 	                							' handler_name="'+ jobDataMap.handler_name +'" '+
112
+	                							' author="'+ row.author +'" '+
113
+	                							' alarmEmail="'+ row.alarmEmail +'" '+
114
+	                							' alarmThreshold="'+ row.alarmThreshold +'" '+
115
+	                							' glueSwitch="'+ row.glueSwitch +'" '+
109
 	                							'>'+
116
 	                							'>'+
110
 										'<button class="btn btn-primary btn-xs job_operate" type="job_trigger" type="button">执行</button>  '+
117
 										'<button class="btn btn-primary btn-xs job_operate" type="job_trigger" type="button">执行</button>  '+
111
 										pause_resume +
118
 										pause_resume +
112
 										'<button class="btn btn-primary btn-xs" type="job_del" type="button" onclick="javascript:window.open(\'' + logUrl + '\')" >日志</button><br>  '+
119
 										'<button class="btn btn-primary btn-xs" type="job_del" type="button" onclick="javascript:window.open(\'' + logUrl + '\')" >日志</button><br>  '+
113
 										'<button class="btn btn-warning btn-xs update" type="button">编辑</button>  '+
120
 										'<button class="btn btn-warning btn-xs update" type="button">编辑</button>  '+
114
-										'<button class="btn btn-warning btn-xs" type="button" onclick="javascript:window.open(\'' + codeUrl + '\')" >GLUE</button>  '+
121
+										codeHtml +
115
 								  		'<button class="btn btn-danger btn-xs job_operate" type="job_del" type="button">删除</button>  '+
122
 								  		'<button class="btn btn-danger btn-xs job_operate" type="job_del" type="button">删除</button>  '+
116
 									'</p>';
123
 									'</p>';
117
 									
124
 									
318
 		$(".remote_panel").show();	// remote
325
 		$(".remote_panel").show();	// remote
319
 	});
326
 	});
320
 	
327
 	
328
+	// GLUE模式开启
329
+	$("#addModal .form .ifGLUE").click(function(){
330
+		var ifGLUE = $(this).is(':checked');
331
+		var $handler_name = $("#addModal .form input[name='handler_name']");
332
+		var $glueSwitch = $("#addModal .form input[name='glueSwitch']");
333
+		if (ifGLUE) {
334
+			$handler_name.val("");
335
+			$handler_name.attr("readonly","readonly");
336
+			$glueSwitch.val(1);
337
+		} else {
338
+			$handler_name.removeAttr("readonly");
339
+			$glueSwitch.val(0);
340
+		}
341
+	});
342
+	$("#updateModal .form .ifGLUE").click(function(){
343
+		var ifGLUE = $(this).is(':checked');
344
+		var $handler_name = $("#updateModal .form input[name='handler_name']");
345
+		var $glueSwitch = $("#updateModal .form input[name='glueSwitch']");
346
+		if (ifGLUE) {
347
+			$handler_name.val("");
348
+			$handler_name.attr("readonly","readonly");
349
+			$glueSwitch.val(1);
350
+		} else {
351
+			$handler_name.removeAttr("readonly");
352
+			$glueSwitch.val(0);
353
+		}
354
+	});
355
+	
321
 	// 更新
356
 	// 更新
322
 	$("#job_list").on('click', '.update',function() {
357
 	$("#job_list").on('click', '.update',function() {
323
 		$("#updateModal .form input[name='jobGroup']").val($(this).parent('p').attr("jobGroup"));
358
 		$("#updateModal .form input[name='jobGroup']").val($(this).parent('p').attr("jobGroup"));
330
 		$("#updateModal .form input[name='author']").val($(this).parent('p').attr("author"));
365
 		$("#updateModal .form input[name='author']").val($(this).parent('p').attr("author"));
331
 		$("#updateModal .form input[name='alarmEmail']").val($(this).parent('p').attr("alarmEmail"));
366
 		$("#updateModal .form input[name='alarmEmail']").val($(this).parent('p').attr("alarmEmail"));
332
 		$("#updateModal .form input[name='alarmThreshold']").val($(this).parent('p').attr("alarmThreshold"));
367
 		$("#updateModal .form input[name='alarmThreshold']").val($(this).parent('p').attr("alarmThreshold"));
368
+		$("#updateModal .form input[name='glueSwitch']").val($(this).parent('p').attr("glueSwitch"));
369
+		
370
+		// GLUE check
371
+		var $glueSwitch = $("#updateModal .form input[name='glueSwitch']");
372
+		var $handler_name = $("#updateModal .form input[name='handler_name']");
373
+		if ($glueSwitch.val() != 0) {
374
+			$handler_name.attr("readonly","readonly");
375
+			$("#updateModal .form .ifGLUE").attr("checked", true);
376
+		} else {
377
+			$handler_name.removeAttr("readonly");
378
+			$("#updateModal .form .ifGLUE").attr("checked", false);
379
+		}
333
 		
380
 		
334
 		$('#updateModal').modal({backdrop: false, keyboard: false}).modal('show');
381
 		$('#updateModal').modal({backdrop: false, keyboard: false}).modal('show');
335
 	});
382
 	});