mirror of
https://github.com/yacy/yacy_search_server.git
synced 2024-09-19 00:01:41 +02:00
Bugfix for IE9 (doesn't accept html form within form)
changes of API schedule row data changed form input form to unique field names using row pk. Fix for issue 96 http://bugs.yacy.net/view.php?id=96 IE9-64bit doesn't interprete iframe with align parameter as desired misaligns following content (in CrawlProfileEditor_p.html)
This commit is contained in:
parent
4f92389550
commit
e15e633a01
|
@ -12,7 +12,7 @@
|
|||
<h3>Crawl Scheduler</h3>
|
||||
<p>Scheduled Crawls can be modified in this table</p>
|
||||
|
||||
<iframe id="APITable" src="Table_API_p.html?inline=true&filter=crawler" width="100%" height="0" align="left" scrolling="no" marginheight="0" marginwidth="0" frameborder="0" ></iframe>
|
||||
<iframe id="APITable" src="Table_API_p.html?inline=true&filter=crawler" width="100%" height="0" scrolling="no" marginheight="0" marginwidth="0" frameborder="0" ></iframe>
|
||||
|
||||
<h3>Crawl Profile Editor</h3>
|
||||
<p>Crawl profiles hold information about a crawl process that is currently ongoing.</p>
|
||||
|
@ -64,7 +64,7 @@
|
|||
</div></form>
|
||||
#(/deleteButton)#
|
||||
</td>
|
||||
<td><a href="#[startURL]#">#[startURL]#</a></td>
|
||||
<td><a href="#[startURL]#">#[startURL]#</a></td>
|
||||
<td>#[depth]#</td>
|
||||
<td>#[mustmatch]#</td>
|
||||
<td>#[mustnotmatch]#</td>
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
<script type="text/javascript">
|
||||
function submitchange(from) {
|
||||
document.getElementById("apilist").action = "Table_API_p.html#" + from;
|
||||
document.getElementById ("scheduleevent").value = "true";
|
||||
document.getElementById("current_schedule_pk").value = from;
|
||||
document.getElementById("apilist").submit();
|
||||
}
|
||||
</script>
|
||||
|
@ -90,41 +92,26 @@ To see a list of all APIs, please visit the <a href="http://www.yacy-websuche.de
|
|||
<td>#[dateNextExec]#</td>
|
||||
<td>
|
||||
#(scheduler)#
|
||||
<form action="Table_API_p.html" method="post" enctype="multipart/form-data" accept-charset="UTF-8" id="modify_repeat">
|
||||
<select name="repeat_select" onchange='submitchange("#[pk]#")'>
|
||||
<select name="repeat_select_#[pk]#" onchange='submitchange("#[pk]#")'>
|
||||
<option value="off" selected="selected">no repetition</option>
|
||||
<option value="on">activate scheduler</option>
|
||||
</select>
|
||||
<input type="hidden" name="startRecord" value="#[startRecord]#" />
|
||||
<input type="hidden" name="maximumRecords" value="#[maximumRecords]#" />
|
||||
<input type="hidden" name="pk" value="#[pk]#" />
|
||||
<input type="hidden" name="inline" value="#[inline]#" />
|
||||
<input type="hidden" name="filter" value="#[filter]#" />
|
||||
</form>
|
||||
::
|
||||
<form action="Table_API_p.html" method="post" enctype="multipart/form-data" accept-charset="UTF-8" id="modify_repeat">
|
||||
::
|
||||
<table>
|
||||
<tr><td>
|
||||
<select name="repeat_time" onchange='submitchange("#[pk]#")'>
|
||||
<select name="repeat_time_#[pk]#" onchange='submitchange("#[pk]#")'>
|
||||
#{scale}#
|
||||
<option value="#[time]#" #(selected)#::selected="selected"#(/selected)#>#[time]#</option>
|
||||
#{/scale}#
|
||||
</select>
|
||||
</td><td>
|
||||
<select name="repeat_unit" onchange='submitchange("#[pk]#")'>
|
||||
<select name="repeat_unit_#[pk]#" onchange='submitchange("#[pk]#")'>
|
||||
<option value="selminutes" #(selectedMinutes)#::selected="selected"#(/selectedMinutes)#>minutes</option>
|
||||
<option value="selhours" #(selectedHours)#::selected="selected"#(/selectedHours)#>hours</option>
|
||||
<option value="seldays" #(selectedDays)#::selected="selected"#(/selectedDays)#>days</option>
|
||||
</select>
|
||||
</td></tr>
|
||||
</table>
|
||||
<input type="hidden" name="startRecord" value="#[startRecord]#" />
|
||||
<input type="hidden" name="maximumRecords" value="#[maximumRecords]#" />
|
||||
<input type="hidden" name="pk" value="#[pk]#" />
|
||||
<input type="hidden" name="inline" value="#[inline]#" />
|
||||
<input type="hidden" name="filter" value="#[filter]#" />
|
||||
<noscript><input type="submit" value="Submit" /></noscript>
|
||||
</form>
|
||||
</table>
|
||||
#(/scheduler)#
|
||||
</td>
|
||||
#(inline)#<td>#[url]#</td>::#(/inline)#
|
||||
|
@ -134,6 +121,8 @@ To see a list of all APIs, please visit the <a href="http://www.yacy-websuche.de
|
|||
</div>
|
||||
</fieldset>
|
||||
<p>
|
||||
<input type="hidden" name="scheduleevent" id="scheduleevent" value="false" />
|
||||
<input type="hidden" name="current_schedule_pk" id="current_schedule_pk" value="" />
|
||||
<input type="hidden" name="num" value="#[num]#" />
|
||||
<input type="submit" name="execrows" value="Execute Selected Actions" />
|
||||
<input type="submit" name="deleterows" value="Delete Selected Actions" />
|
||||
|
|
|
@ -42,90 +42,116 @@ import de.anomic.server.serverObjects;
|
|||
import de.anomic.server.serverSwitch;
|
||||
|
||||
public class Table_API_p {
|
||||
|
||||
|
||||
public static serverObjects respond(final RequestHeader header, final serverObjects post, final serverSwitch env) {
|
||||
final Switchboard sb = (Switchboard) env;
|
||||
final serverObjects prop = new serverObjects();
|
||||
|
||||
|
||||
prop.put("showexec", 0);
|
||||
prop.put("showtable", 0);
|
||||
|
||||
|
||||
int startRecord = 0;
|
||||
int maximumRecords = 25;
|
||||
Pattern query = QueryParams.catchall_pattern;
|
||||
if (post != null && post.containsKey("startRecord")) startRecord = post.getInt("startRecord", 0);
|
||||
if (post != null && post.containsKey("maximumRecords")) maximumRecords = post.getInt("maximumRecords", 0);
|
||||
if (post != null && post.containsKey("startRecord")) {
|
||||
startRecord = post.getInt("startRecord", 0);
|
||||
}
|
||||
if (post != null && post.containsKey("maximumRecords")) {
|
||||
maximumRecords = post.getInt("maximumRecords", 0);
|
||||
}
|
||||
if (post != null && post.containsKey("query") && !post.get("query", "").isEmpty()) {
|
||||
query = Pattern.compile(".*" + post.get("query", "") + ".*");
|
||||
startRecord = 0;
|
||||
maximumRecords = 1000;
|
||||
}
|
||||
final boolean inline = (post != null && post.getBoolean("inline",false));
|
||||
final boolean inline = (post != null && post.getBoolean("inline", false));
|
||||
|
||||
prop.put("inline", (inline) ? 1 : 0);
|
||||
|
||||
|
||||
Pattern typefilter = QueryParams.catchall_pattern;
|
||||
if (post != null && post.containsKey("filter") && post.get("filter", "").length() > 0) {
|
||||
typefilter = Pattern.compile(post.get("filter", ".*"));
|
||||
}
|
||||
|
||||
|
||||
String pk;
|
||||
if (post != null && post.containsKey("repeat_select") && ((pk = post.get("pk")) != null)) try {
|
||||
final String action = post.get("repeat_select", "off");
|
||||
if (action.equals("on")) {
|
||||
Tables.Row row = sb.tables.select(WorkTables.TABLE_API_NAME, pk.getBytes());
|
||||
if (row != null) {
|
||||
row.put(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_TIME, 7);
|
||||
row.put(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_UNIT, "days");
|
||||
WorkTables.calculateAPIScheduler(row, false);
|
||||
sb.tables.update(WorkTables.TABLE_API_NAME, row);
|
||||
boolean scheduleevent = false; // flag if schedule info of row changes
|
||||
String current_schedule_pk = ""; // pk of changed schedule data row
|
||||
if (post != null && post.containsKey("scheduleevent")) {
|
||||
scheduleevent = post.get("scheduleevent", "false").equalsIgnoreCase("true");
|
||||
prop.put("scheduleevent", "false");
|
||||
current_schedule_pk = post.get("current_schedule_pk", "");
|
||||
}
|
||||
if (scheduleevent && !current_schedule_pk.isEmpty()) {
|
||||
if (post != null && post.containsKey("repeat_select_" + current_schedule_pk) ) {
|
||||
try {
|
||||
final String action = post.get("repeat_select_" + current_schedule_pk, "off");
|
||||
if (action.equals("on")) {
|
||||
Tables.Row row = sb.tables.select(WorkTables.TABLE_API_NAME, current_schedule_pk.getBytes());
|
||||
if (row != null) {
|
||||
row.put(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_TIME, 7);
|
||||
row.put(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_UNIT, "days");
|
||||
WorkTables.calculateAPIScheduler(row, false);
|
||||
sb.tables.update(WorkTables.TABLE_API_NAME, row);
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.logException(e);
|
||||
} catch (RowSpaceExceededException e) {
|
||||
Log.logException(e);
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.logException(e);
|
||||
} catch (RowSpaceExceededException e) {
|
||||
Log.logException(e);
|
||||
}
|
||||
|
||||
if (post != null && post.containsKey("repeat_time") && ((pk = post.get("pk")) != null)) try {
|
||||
final String action = post.get("repeat_time", "off");
|
||||
final Tables.Row row = sb.tables.select(WorkTables.TABLE_API_NAME, pk.getBytes());
|
||||
if (row != null) {
|
||||
if ("off".equals(action)) {
|
||||
row.put(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_TIME, 0);
|
||||
} else {
|
||||
row.put(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_TIME, Integer.parseInt(action));
|
||||
|
||||
if (post != null && post.containsKey("repeat_time_" + current_schedule_pk) ) {
|
||||
try {
|
||||
final String action = post.get("repeat_time_" + current_schedule_pk, "off");
|
||||
final Tables.Row row = sb.tables.select(WorkTables.TABLE_API_NAME, current_schedule_pk.getBytes());
|
||||
if (row != null) {
|
||||
if ("off".equals(action)) {
|
||||
row.put(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_TIME, 0);
|
||||
} else {
|
||||
row.put(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_TIME, Integer.parseInt(action));
|
||||
}
|
||||
WorkTables.calculateAPIScheduler(row, false);
|
||||
sb.tables.update(WorkTables.TABLE_API_NAME, row);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.logException(e);
|
||||
} catch (RowSpaceExceededException e) {
|
||||
Log.logException(e);
|
||||
}
|
||||
WorkTables.calculateAPIScheduler(row, false);
|
||||
sb.tables.update(WorkTables.TABLE_API_NAME, row);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.logException(e);
|
||||
} catch (RowSpaceExceededException e) {
|
||||
Log.logException(e);
|
||||
}
|
||||
|
||||
if (post != null && post.containsKey("repeat_unit") && ((pk = post.get("pk")) != null)) try {
|
||||
final String action = post.get("repeat_unit", "seldays");
|
||||
final Tables.Row row = sb.tables.select(WorkTables.TABLE_API_NAME, pk.getBytes());
|
||||
if (row != null) {
|
||||
int time = row.get(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_TIME, 1);
|
||||
row.put(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_UNIT, action.substring(3));
|
||||
if (action.equals("selminutes") && time > 0 && time < 10) row.put(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_TIME, 10);
|
||||
if (action.equals("selminutes") && time > 50) row.put(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_TIME, 50);
|
||||
if (action.equals("selhours") && time > 23) row.put(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_TIME, 23);
|
||||
if (action.equals("seldays") && time > 30) row.put(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_TIME, 30);
|
||||
WorkTables.calculateAPIScheduler(row, false);
|
||||
sb.tables.update(WorkTables.TABLE_API_NAME, row);
|
||||
|
||||
if (post != null && post.containsKey("repeat_unit_" + current_schedule_pk) ) {
|
||||
try {
|
||||
final String action = post.get("repeat_unit_" + current_schedule_pk, "seldays");
|
||||
final Tables.Row row = sb.tables.select(WorkTables.TABLE_API_NAME, current_schedule_pk.getBytes());
|
||||
if (row != null) {
|
||||
int time = row.get(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_TIME, 1);
|
||||
row.put(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_UNIT, action.substring(3));
|
||||
if (action.equals("selminutes") && time > 0 && time < 10) {
|
||||
row.put(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_TIME, 10);
|
||||
}
|
||||
if (action.equals("selminutes") && time > 50) {
|
||||
row.put(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_TIME, 50);
|
||||
}
|
||||
if (action.equals("selhours") && time > 23) {
|
||||
row.put(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_TIME, 23);
|
||||
}
|
||||
if (action.equals("seldays") && time > 30) {
|
||||
row.put(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_TIME, 30);
|
||||
}
|
||||
WorkTables.calculateAPIScheduler(row, false);
|
||||
sb.tables.update(WorkTables.TABLE_API_NAME, row);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.logException(e);
|
||||
} catch (RowSpaceExceededException e) {
|
||||
Log.logException(e);
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.logException(e);
|
||||
} catch (RowSpaceExceededException e) {
|
||||
Log.logException(e);
|
||||
}
|
||||
|
||||
if (post != null && !post.get("deleterows", "").isEmpty()) {
|
||||
for (final Map.Entry<String, String> entry: post.entrySet()) {
|
||||
for (final Map.Entry<String, String> entry : post.entrySet()) {
|
||||
if (entry.getValue().startsWith("mark_")) {
|
||||
try {
|
||||
sb.tables.delete(WorkTables.TABLE_API_NAME, entry.getValue().substring(5).getBytes());
|
||||
|
@ -139,37 +165,40 @@ public class Table_API_p {
|
|||
if (post != null && !post.get("execrows", "").isEmpty()) {
|
||||
// create a time-ordered list of events to execute
|
||||
final Set<String> pks = new TreeSet<String>();
|
||||
for (final Map.Entry<String, String> entry: post.entrySet()) {
|
||||
for (final Map.Entry<String, String> entry : post.entrySet()) {
|
||||
if (entry.getValue().startsWith("mark_")) {
|
||||
pks.add(entry.getValue().substring(5));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// now call the api URLs and store the result status
|
||||
final Map<String, Integer> l = sb.tables.execAPICalls("localhost", (int) sb.getConfigLong("port", 8090), sb.getConfig(SwitchboardConstants.ADMIN_ACCOUNT_B64MD5, ""), pks);
|
||||
|
||||
|
||||
// construct result table
|
||||
prop.put("showexec", l.size() > 0 ? 1 : 0);
|
||||
|
||||
|
||||
final Iterator<Map.Entry<String, Integer>> resultIterator = l.entrySet().iterator();
|
||||
Map.Entry<String, Integer> record;
|
||||
int count = 0;
|
||||
boolean dark = true;
|
||||
while (resultIterator.hasNext()) {
|
||||
record = resultIterator.next();
|
||||
if (record == null) continue;
|
||||
prop.put("showexec_list_" + count + "_dark", ((dark) ? 1 : 0) ); dark=!dark;
|
||||
if (record == null) {
|
||||
continue;
|
||||
}
|
||||
prop.put("showexec_list_" + count + "_dark", ((dark) ? 1 : 0));
|
||||
dark = !dark;
|
||||
prop.put("showexec_list_" + count + "_status", record.getValue());
|
||||
prop.put("showexec_list_" + count + "_url", record.getKey());
|
||||
count++;
|
||||
}
|
||||
prop.put("showexec_list", count);
|
||||
}
|
||||
|
||||
|
||||
// generate table
|
||||
prop.put("showtable", 1);
|
||||
prop.put("showtable_inline", inline ? 1 : 0);
|
||||
|
||||
|
||||
// insert rows
|
||||
final List<Tables.Row> table = new ArrayList<Tables.Row>(maximumRecords);
|
||||
int count = 0;
|
||||
|
@ -186,17 +215,27 @@ public class Table_API_p {
|
|||
// first prepare a list
|
||||
while (mapIterator.hasNext()) {
|
||||
r = mapIterator.next();
|
||||
if (r == null) continue;
|
||||
if (r == null) {
|
||||
continue;
|
||||
}
|
||||
type = UTF8.String(r.get(WorkTables.TABLE_API_COL_TYPE));
|
||||
if (!typefilter.matcher(type).matches()) continue;
|
||||
if (!typefilter.matcher(type).matches()) {
|
||||
continue;
|
||||
}
|
||||
comment = UTF8.String(r.get(WorkTables.TABLE_API_COL_COMMENT));
|
||||
if (!query.matcher(comment).matches()) continue;
|
||||
if (c >= startRecord) table.add(r);
|
||||
if (!query.matcher(comment).matches()) {
|
||||
continue;
|
||||
}
|
||||
if (c >= startRecord) {
|
||||
table.add(r);
|
||||
}
|
||||
c++;
|
||||
if (table.size() >= maximumRecords) break;
|
||||
if (table.size() >= maximumRecords) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
// then work on the list
|
||||
for (final Tables.Row row: table) {
|
||||
for (final Tables.Row row : table) {
|
||||
final Date now = new Date();
|
||||
final Date date = row.containsKey(WorkTables.TABLE_API_COL_DATE) ? row.get(WorkTables.TABLE_API_COL_DATE, now) : null;
|
||||
final Date date_recording = row.get(WorkTables.TABLE_API_COL_DATE_RECORDING, date);
|
||||
|
@ -206,13 +245,14 @@ public class Table_API_p {
|
|||
final String unit = row.get(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_UNIT, "days");
|
||||
final int time = row.get(WorkTables.TABLE_API_COL_APICALL_SCHEDULE_TIME, 0);
|
||||
prop.put("showtable_list_" + count + "_inline", inline ? 1 : 0);
|
||||
prop.put("showtable_list_" + count + "_dark", dark ? 1 : 0); dark=!dark;
|
||||
prop.put("showtable_list_" + count + "_dark", dark ? 1 : 0);
|
||||
dark = !dark;
|
||||
prop.put("showtable_list_" + count + "_pk", UTF8.String(row.getPK()));
|
||||
prop.put("showtable_list_" + count + "_count", count);
|
||||
prop.put("showtable_list_" + count + "_callcount", callcount);
|
||||
prop.put("showtable_list_" + count + "_dateRecording", date_recording == null ? "-" : DateFormat.getDateTimeInstance().format(date_recording));
|
||||
prop.put("showtable_list_" + count + "_dateLastExec", date_last_exec == null ? "-" : DateFormat.getDateTimeInstance().format(date_last_exec));
|
||||
prop.put("showtable_list_" + count + "_dateNextExec", date_next_exec == null ? "-" : DateFormat.getDateTimeInstance().format(date_next_exec));
|
||||
prop.put("showtable_list_" + count + "_dateLastExec", date_last_exec == null ? "-" : DateFormat.getDateTimeInstance().format(date_last_exec));
|
||||
prop.put("showtable_list_" + count + "_dateNextExec", date_next_exec == null ? "-" : DateFormat.getDateTimeInstance().format(date_next_exec));
|
||||
prop.put("showtable_list_" + count + "_selectedMinutes", unit.equals("minutes") ? 1 : 0);
|
||||
prop.put("showtable_list_" + count + "_selectedHours", unit.equals("hours") ? 1 : 0);
|
||||
prop.put("showtable_list_" + count + "_selectedDays", (unit.length() == 0 || unit.equals("days")) ? 1 : 0);
|
||||
|
@ -233,7 +273,7 @@ public class Table_API_p {
|
|||
prop.put("showtable_list_" + count + "_scheduler_selectedHours", 0);
|
||||
prop.put("showtable_list_" + count + "_scheduler_selectedDays", 0);
|
||||
if (unit.equals("minutes")) {
|
||||
for (int i = 1; i <= 5 ; i++) {
|
||||
for (int i = 1; i <= 5; i++) {
|
||||
prop.put("showtable_list_" + count + "_scheduler_scale_" + i + "_time", i * 10);
|
||||
prop.put("showtable_list_" + count + "_scheduler_scale_" + i + "_selected", 0);
|
||||
}
|
||||
|
@ -241,7 +281,7 @@ public class Table_API_p {
|
|||
prop.put("showtable_list_" + count + "_scheduler_scale", 6);
|
||||
prop.put("showtable_list_" + count + "_scheduler_selectedMinutes", 1);
|
||||
} else if (unit.equals("hours")) {
|
||||
for (int i = 1; i <= 23 ; i++) {
|
||||
for (int i = 1; i <= 23; i++) {
|
||||
prop.put("showtable_list_" + count + "_scheduler_scale_" + i + "_time", i);
|
||||
prop.put("showtable_list_" + count + "_scheduler_scale_" + i + "_selected", 0);
|
||||
}
|
||||
|
@ -249,7 +289,7 @@ public class Table_API_p {
|
|||
prop.put("showtable_list_" + count + "_scheduler_scale", 24);
|
||||
prop.put("showtable_list_" + count + "_scheduler_selectedHours", 1);
|
||||
} else {
|
||||
for (int i = 1; i <= 30 ; i++) {
|
||||
for (int i = 1; i <= 30; i++) {
|
||||
prop.put("showtable_list_" + count + "_scheduler_scale_" + i + "_time", i);
|
||||
prop.put("showtable_list_" + count + "_scheduler_scale_" + i + "_selected", 0);
|
||||
}
|
||||
|
@ -276,7 +316,7 @@ public class Table_API_p {
|
|||
}
|
||||
prop.put("showtable_list", count);
|
||||
prop.put("showtable_num", count);
|
||||
|
||||
|
||||
// write navigation details
|
||||
prop.put("showtable_startRecord", startRecord);
|
||||
prop.put("showtable_maximumRecords", maximumRecords);
|
||||
|
@ -303,9 +343,8 @@ public class Table_API_p {
|
|||
} else {
|
||||
prop.put("showtable_navigation", 0);
|
||||
}
|
||||
|
||||
|
||||
// return rewrite properties
|
||||
return prop;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user