Revision: 8209
http://freenas.svn.sourceforge.net/freenas/?rev=8209&view=rev
Author: zippybr
Date: 2011-10-10 18:53:38 +0000 (Mon, 10 Oct 2011)
Log Message:
-----------
cron: use wildcard for DOM and DOW instead of a list with all possible values, which would cause misbehavior
Modified Paths:
--------------
branches/volumes/gui/media/lib/js/freeadmin/form/Cron.js
branches/volumes/gui/system/forms.py
Added Paths:
-----------
branches/volumes/gui/system/migrations/0021_cron_wildcard.py
Modified: branches/volumes/gui/media/lib/js/freeadmin/form/Cron.js
===================================================================
--- branches/volumes/gui/media/lib/js/freeadmin/form/Cron.js 2011-10-10 17:32:54 UTC (rev 8208)
+++ branches/volumes/gui/media/lib/js/freeadmin/form/Cron.js 2011-10-10 18:53:38 UTC (rev 8209)
@@ -66,7 +66,10 @@
// }, rulesNodeLabels);
if(this.typeChoice == 'every'){
- this.sliderValue.innerHTML = this.value.split('/')[1];
+ if(this.value == '*')
+ this.sliderValue.innerHTML = '1';
+ else
+ this.sliderValue.innerHTML = this.value.split('/')[1];
} else {
this.sliderValue.innerHTML = Math.floor((this.numChoices+this.start)/4).toString();
}
@@ -80,7 +83,10 @@
style: "width:300px;",
onChange: function(value) {
sldval.innerHTML = Math.floor(value);
- field.set('value', '*/'+Math.floor(value).toString());
+ if(Math.floor(value) == 1)
+ field.set('value', '*');
+ else
+ field.set('value', '*/'+Math.floor(value).toString());
}
}, this.sliderNode);
//slider.domNode.appendChild(sliderRule);
@@ -92,7 +98,10 @@
onShow: function(ev) {
var value = slider.get('value');
sldval.innerHTML = Math.floor(value);
- field.set('value', '*/'+Math.floor(value).toString());
+ if(Math.floor(value) == 1)
+ field.set('value', '*');
+ else
+ field.set('value', '*/'+Math.floor(value).toString());
},
}, this.everyNode);
Modified: branches/volumes/gui/system/forms.py
===================================================================
--- branches/volumes/gui/system/forms.py 2011-10-10 17:32:54 UTC (rev 8208)
+++ branches/volumes/gui/system/forms.py 2011-10-10 18:53:38 UTC (rev 8209)
@@ -409,15 +409,24 @@
def __init__(self, *args, **kwargs):
if kwargs.has_key('instance'):
ins = kwargs.get('instance')
- ins.cron_month = ins.cron_month.replace("10", "a").replace("11", "b").replace("12", "c")
+ if ins.cron_month == '*':
+ ins.cron_month = "1,2,3,4,5,6,7,8,9,a,b,c"
+ else:
+ ins.cron_month = ins.cron_month.replace("10", "a").replace("11", "b").replace("12", "c")
+ if ins.cron_dayweek == '*':
+ ins.cron_dayweek = "1,2,3,4,5,6,7"
super(CronJobForm, self).__init__(*args, **kwargs)
def clean_cron_month(self):
m = eval(self.cleaned_data.get("cron_month"))
+ if len(m) == 12:
+ return '*'
m = ",".join(m)
m = m.replace("a", "10").replace("b", "11").replace("c", "12")
return m
def clean_cron_dayweek(self):
w = eval(self.cleaned_data.get("cron_dayweek"))
+ if len(w) == 7:
+ return '*'
w = ",".join(w)
return w
def save(self):
Added: branches/volumes/gui/system/migrations/0021_cron_wildcard.py
===================================================================
--- branches/volumes/gui/system/migrations/0021_cron_wildcard.py (rev 0)
+++ branches/volumes/gui/system/migrations/0021_cron_wildcard.py 2011-10-10 18:53:38 UTC (rev 8209)
@@ -0,0 +1,149 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import DataMigration
+from django.db import models
+
+class Migration(DataMigration):
+
+ def forwards(self, orm):
+
+ orm.CronJob.objects.filter(cron_dayweek='1,2,3,4,5,6,7').update(cron_dayweek='*')
+ orm.CronJob.objects.filter(cron_month='1,2,3,4,5,6,7,8,9,10,11,12').update(cron_month='*')
+ orm.CronJob.objects.filter(cron_daymonth='*/1').update(cron_daymonth='*')
+
+
+ def backwards(self, orm):
+ "Write your backwards methods here."
+
+
+ models = {
+ 'storage.disk': {
+ 'Meta': {'object_name': 'Disk'},
+ 'disk_acousticlevel': ('django.db.models.fields.CharField', [], {'default': "'Disabled'", 'max_length': '120'}),
+ 'disk_advpowermgmt': ('django.db.models.fields.CharField', [], {'default': "'Disabled'", 'max_length': '120'}),
+ 'disk_description': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'disk_hddstandby': ('django.db.models.fields.CharField', [], {'default': "'Always On'", 'max_length': '120'}),
+ 'disk_identifier': ('django.db.models.fields.CharField', [], {'max_length': '42'}),
+ 'disk_name': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'disk_smartoptions': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'disk_togglesmart': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'disk_transfermode': ('django.db.models.fields.CharField', [], {'default': "'Auto'", 'max_length': '120'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'system.advanced': {
+ 'Meta': {'object_name': 'Advanced'},
+ 'adv_consolemenu': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'adv_consolemsg': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'adv_consolescreensaver': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'adv_firmwarevc': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'adv_motd': ('django.db.models.fields.TextField', [], {'max_length': '1024'}),
+ 'adv_powerdaemon': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'adv_serialconsole': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'adv_swapondrive': ('django.db.models.fields.IntegerField', [], {'default': '2'}),
+ 'adv_systembeep': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'adv_traceback': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'adv_tuning': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'adv_zeroconfbonjour': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'system.cronjob': {
+ 'Meta': {'object_name': 'CronJob'},
+ 'cron_command': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'cron_daymonth': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'cron_dayweek': ('django.db.models.fields.CharField', [], {'default': "'1,2,3,4,5,6,7'", 'max_length': '100'}),
+ 'cron_description': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
+ 'cron_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'cron_hour': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'cron_minute': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'cron_month': ('django.db.models.fields.CharField', [], {'default': "'1,2,3,4,5,6,7,8,9,10,a,b,c'", 'max_length': '100'}),
+ 'cron_user': ('freeadmin.models.UserField', [], {'max_length': '60'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'system.email': {
+ 'Meta': {'object_name': 'Email'},
+ 'em_fromemail': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'em_outgoingserver': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'em_pass': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}),
+ 'em_port': ('django.db.models.fields.IntegerField', [], {'default': '25'}),
+ 'em_security': ('django.db.models.fields.CharField', [], {'default': "'plain'", 'max_length': '120'}),
+ 'em_smtp': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'em_user': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'system.loader': {
+ 'Meta': {'object_name': 'Loader'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ldr_comment': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+ 'ldr_value': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
+ 'ldr_var': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '50'})
+ },
+ 'system.rsync': {
+ 'Meta': {'object_name': 'Rsync'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'rsync_archive': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'rsync_compress': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'rsync_daymonth': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'rsync_dayweek': ('django.db.models.fields.CharField', [], {'default': "'1,2,3,4,5,6,7'", 'max_length': '100'}),
+ 'rsync_delete': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'rsync_desc': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'rsync_extra': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'rsync_hour': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'rsync_minute': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'rsync_month': ('django.db.models.fields.CharField', [], {'default': "'1,2,3,4,5,6,7,8,9,10,a,b,c'", 'max_length': '100'}),
+ 'rsync_path': ('freeadmin.models.PathField', [], {'max_length': '255'}),
+ 'rsync_preserveattr': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'rsync_preserveperm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'rsync_quiet': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'rsync_recursive': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'rsync_remotehost': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'rsync_remotemodule': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'rsync_times': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'rsync_user': ('freeadmin.models.UserField', [], {'max_length': '60'})
+ },
+ 'system.settings': {
+ 'Meta': {'object_name': 'Settings'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'stg_guiaddress': ('django.db.models.fields.CharField', [], {'default': "'0.0.0.0'", 'max_length': '120', 'blank': 'True'}),
+ 'stg_guiport': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '120', 'blank': 'True'}),
+ 'stg_guiprotocol': ('django.db.models.fields.CharField', [], {'default': "'http'", 'max_length': '120'}),
+ 'stg_language': ('django.db.models.fields.CharField', [], {'default': "'en'", 'max_length': '120'}),
+ 'stg_ntpserver1': ('django.db.models.fields.CharField', [], {'default': "'0.freebsd.pool.ntp.org iburst maxpoll 9'", 'max_length': '120'}),
+ 'stg_ntpserver2': ('django.db.models.fields.CharField', [], {'default': "'1.freebsd.pool.ntp.org iburst maxpoll 9'", 'max_length': '120', 'blank': 'True'}),
+ 'stg_ntpserver3': ('django.db.models.fields.CharField', [], {'default': "'2.freebsd.pool.ntp.org iburst maxpoll 9'", 'max_length': '120', 'blank': 'True'}),
+ 'stg_syslogserver': ('freenasUI.contrib.IPAddressField.IPAddressField', [], {'default': "''", 'blank': 'True'}),
+ 'stg_timezone': ('django.db.models.fields.CharField', [], {'default': "'America/Los_Angeles'", 'max_length': '120'})
+ },
+ 'system.smarttest': {
+ 'Meta': {'unique_together': "(('smarttest_disk', 'smarttest_type'),)", 'object_name': 'SMARTTest'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'smarttest_daymonth': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'smarttest_dayweek': ('django.db.models.fields.CharField', [], {'default': "'1,2,3,4,5,6,7'", 'max_length': '100'}),
+ 'smarttest_desc': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'smarttest_disk': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storage.Disk']"}),
+ 'smarttest_hour': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'smarttest_month': ('django.db.models.fields.CharField', [], {'default': "'1,2,3,4,5,6,7,8,9,10,a,b,c'", 'max_length': '100'}),
+ 'smarttest_type': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'})
+ },
+ 'system.ssl': {
+ 'Meta': {'object_name': 'SSL'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ssl_certfile': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'ssl_city': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}),
+ 'ssl_common': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}),
+ 'ssl_country': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}),
+ 'ssl_email': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}),
+ 'ssl_org': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}),
+ 'ssl_state': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}),
+ 'ssl_unit': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'})
+ },
+ 'system.sysctl': {
+ 'Meta': {'object_name': 'Sysctl'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sysctl_comment': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+ 'sysctl_mib': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '50'}),
+ 'sysctl_value': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ }
+ }
+
+ complete_apps = ['system']
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|