4 * Ajatus - Distributed CRM
5 * @requires jQuery v1.2.1
7 * Copyright (c) 2007 Jerry Jalava <jerry.jalava@gmail.com>
8 * Copyright (c) 2007 Nemein Oy <http://nemein.com>
9 * Website: http://ajatus.info
10 * Licensed under the GPL license
11 * http://www.gnu.org/licenses/gpl.html
16 $.ajatus = $.ajatus || {};
21 $.extend($.ajatus.forms, {
23 normal: function(form) {
24 $.ajatus.events.named_lock_pool.increase('unsaved');
25 $.ajatus.forms.active = form;
28 jqform.bind('submit',function(e){
32 $('input[@type=submit][name*=save]', jqform).bind('click', function(){
33 var status = $.ajatus.forms.process.normal(jqform.formToArray(false));
36 $.ajatus.forms.active = false;
41 $('input[@type=submit][name*=cancel]', jqform).bind('click', function(){
42 $.ajatus.history.navigate(-1);
44 $.ajatus.forms.active = false;
48 ajax: function(form, callback) {
49 if (typeof callback == 'undefined') {
50 $.ajatus.forms.register.normal(form);
53 $.ajatus.events.named_lock_pool.increase('unsaved');
54 $.ajatus.forms.active = form;
57 jqform.bind('submit',function(e){
61 $('input[@type=submit][name*=save]', jqform).bind('click', function(){
62 $.ajatus.forms.process.ajax(jqform.formToArray(false), callback);
64 $.ajatus.forms.active = false;
67 $('input[@type=submit][name*=cancel]', jqform).bind('click', function(){
68 $.ajatus.history.navigate(-1);
70 $.ajatus.forms.active = false;
74 custom: function(form, save_func) {
75 if (typeof save_func == 'undefined') {
78 $.ajatus.events.named_lock_pool.increase('unsaved');
79 $.ajatus.forms.active = form;
82 jqform.bind('submit',function(e){
86 $('input[@type=submit][name*=save]', jqform).bind('click', function(){
88 if (typeof save_func == 'string') {
91 fn.apply(fn, [jqform.formToArray(false), form]);
93 $.ajatus.forms.active = false;
96 $('input[@type=submit][name*=cancel]', jqform).bind('click', function(){
97 $.ajatus.history.navigate(-1);
99 $.ajatus.forms.active = false;
109 common: function(form_data) {
110 $.ajatus.forms.process.has_errors = false;
111 $.ajatus.forms.process.error_fields = {};
118 var form_values = {};
120 var doc_type = 'note';
121 var additionals = false;
123 var parted_names_done = [];
125 $.each(form_data, function(i,row){
126 // console.log('i: '+i+' row.name: '+row.name+' row.value: '+row.value);
127 if (row.name.toString().match(/__(.*?)/)) {
130 if ( row.name == '_id'
131 && ( typeof row.value != 'undefined'
134 doc['_id'] = String(row.value);
135 form_id = doc['_id'];
137 else if( row.name == '_rev'
138 && ( typeof row.value != 'undefined'
141 doc['_rev'] = String(row.value);
143 else if( row.name == '_additionals'
144 && ( typeof row.value != 'undefined'
147 additionals = $.ajatus.converter.parseJSON(row.value);
149 if (row.name != 'submit') {
150 if (row.name == '_type') {
151 doc_type = row.value;
152 form_values[row.name] = row.value;
154 else if ( row.name.substr(0,6) != "widget"
155 && row.name.substr(0,8) != "metadata")
159 var prev_val = false;
160 var additional = false;
161 var row_key = row.name;
164 var name_parts_count = 0;
165 if (row_key.toString().match(/\|/g)) {
166 name_parts = row_key.toString().split("|");
167 name_parts_count = name_parts.length;
169 if ($.inArray(name_parts[0], parted_names_done) != -1) {
173 row_key = name_parts[0];
176 $.each(form_data, function(x,r){
177 if (r.name == 'widget['+row_key+':name]') {
178 widget['name'] = r.value;
179 } else if (r.name == 'widget['+row_key+':config]') {
180 widget['config'] = $.ajatus.converter.parseJSON(r.value);
181 } else if (r.name == 'widget['+row_key+':prev_val]') {
182 prev_val = $.ajatus.converter.parseJSON(r.value);
183 } else if (r.name == 'widget['+row_key+':additional]') {
184 additional = $.ajatus.converter.parseJSON(r.value);
185 } else if (r.name == 'widget['+row_key+':required]') {
186 widget['required'] = $.ajatus.utils.to_boolean(r.value);
191 var wdgt = new $.ajatus.widget(widget['name'], widget['config']);
193 if (typeof widget['required'] != 'undefined') {
194 wdgt.required = widget['required'];
197 if (typeof wdgt.validate == 'function') {
198 var status = wdgt.validate(row_key, row.value);
199 if (typeof status == 'object') {
200 $.ajatus.forms.process.has_errors = true;
201 $.ajatus.forms.process.error_fields[row_key] = status;
205 if (name_parts_count > 0) {
208 $.each(form_data, function(x,r){
210 if (r.name.toString().match(/\|/g)) {
211 console.log(r.name+" matches with |");
212 np = r.name.toString().split("|");
214 if (np[0] == name_parts[0]) {
215 if (typeof row_val[np[1]] == 'undefined') {
216 row_val[np[1]] = r.value;
222 parted_names_done.push(name_parts[0]);
224 item['val'] = wdgt.value_on_save(row_val, prev_val, true);
226 item['val'] = wdgt.value_on_save(row.value, prev_val, false);
229 item['widget'] = widget;
232 item['additional'] = true;
233 if (additionals == false) {
236 additionals[row_key] = additional;
239 form_values[row_key] = item;
241 else if (row.name.substr(0,8) == "metadata")
243 if (typeof form_values['metadata'] == 'undefined') {
244 form_values['metadata'] = {};
247 var re = /\bmetadata\[([a-z]+)\b/;
248 var results = re.exec(row.name);
249 var key = results[1];
251 form_values['metadata'][key] = {
260 form_values['_additionals'] = additionals;
263 doc['value'] = form_values;
265 doc = new $.ajatus.document(doc);
267 var now = $.ajatus.formatter.date.js_to_iso8601(new Date());
271 revisor: $.ajatus.preferences.local.user.email
273 if ( typeof doc._id == 'undefined'
276 new_metadata['created'] = now;
277 new_metadata['creator'] = $.ajatus.preferences.local.user.email;
280 $.ajatus.forms.process.doc = $.ajatus.document.modify_metadata(doc, new_metadata);
282 return $.ajatus.forms.process.doc;
284 normal: function(form_data) {
285 $.ajatus.events.named_lock_pool.decrease('unsaved');
287 var doc = $.ajatus.forms.process.common(form_data);
289 if ($.ajatus.forms.process.has_errors) {
290 if ( typeof doc._id == 'undefined'
293 $.ajatus.views.system.create.render(doc.value._type, doc);
295 $.ajatus.views.system.edit.render(doc.value._type, doc, true);
300 $.jqCouch.connection('doc').save($.ajatus.preferences.client.content_database, doc);
301 doc = new $.ajatus.document(doc);
303 $.ajatus.views.system.edit.render(doc._type, doc);
305 var content_type = $.ajatus.preferences.client.content_types[doc.value._type];
306 var msg = $.ajatus.elements.messages.create(
307 $.ajatus.i10n.get('Object saved'),
308 $.ajatus.i10n.get("%s saved successfully", [content_type.title])
314 ajax: function(form_data, callback) {
315 var doc = $.ajatus.forms.process.common(form_data);
317 $.jqCouch.connection('doc').save($.ajatus.preferences.client.content_database, doc);
318 doc = new $.ajatus.document(doc);
320 $.ajatus.events.named_lock_pool.decrease('unsaved');
322 if (typeof callback == 'function') {
323 callback.apply(callback, [doc]);