diff --git a/pandora/config.indiancinema.jsonc b/pandora/config.indiancinema.jsonc index 42bae5881..e86731975 100644 --- a/pandora/config.indiancinema.jsonc +++ b/pandora/config.indiancinema.jsonc @@ -713,7 +713,8 @@ { "id": "dateofcensorcertificate", "title": "Date of Censor Certificate", - "type": "date" + "find": true, + "type": ["date"] }, { "id": "certificationcentre", diff --git a/pandora/item/managers.py b/pandora/item/managers.py index d1aa6d0e4..cd1854414 100644 --- a/pandora/item/managers.py +++ b/pandora/item/managers.py @@ -49,6 +49,9 @@ def parseCondition(condition, user, owner=None): key_type = (utils.get_by_id(settings.CONFIG['itemKeys'], k) or {'type': 'string'}).get('type') if isinstance(key_type, list): key_type = key_type[0] + type_is_list = True + else: + type_is_list = False key_type = { 'title': 'string', 'person': 'string', @@ -114,7 +117,7 @@ def parseCondition(condition, user, owner=None): if exclude: q = ~Q(id__in=models.Item.objects.filter(q)) return q - elif key_type == "string": + elif key_type == "string" or (key_type == 'date' and type_is_list): in_find = not k.startswith('public_id') if in_find: value_key = 'find__value' @@ -166,7 +169,7 @@ def parseCondition(condition, user, owner=None): else: q = Q(id=0) return q - elif key_type == 'date': + elif key_type == 'date' and not type_is_list: def parse_date(d): while len(d) < 3: d.append(1) diff --git a/static/js/infoView.indiancinema.js b/static/js/infoView.indiancinema.js index 8a0d7380a..cb34ec87a 100644 --- a/static/js/infoView.indiancinema.js +++ b/static/js/infoView.indiancinema.js @@ -24,7 +24,13 @@ pandora.ui.infoView = function(data, isMixed) { listWidth = 0, margin = 16, // these may contain commas, and are thus separated by semicolons - specialListKeys = ['alternativeTitles', 'productionCompany'], + specialListKeys = ['alternativeTitles', 'productionCompany'].concat( + pandora.site.itemKeys.filter(function(key) { + return key.type[0] == 'date' + }).map(function(key) { + return key.id; + }) + ), nameKeys = pandora.site.itemKeys.filter(function(key) { return key.sortType == 'person'; }).map(function(key) { @@ -625,6 +631,7 @@ pandora.ui.infoView = function(data, isMixed) { function editMetadata(key, value) { if (value != data[key]) { + var itemKey = Ox.getObjectById(pandora.site.itemKeys, key); var edit = {id: isMultiple ? ui.listSelection : data.id}; if (key == 'alternativeTitles') { edit[key] = value ? Ox.decodeHTMLEntities(value).split('; ').map(function(value) { @@ -645,12 +652,12 @@ pandora.ui.infoView = function(data, isMixed) { : []; } else if (key == 'imdbId') { edit[key] = value.match(/\d{7}/)[0]; - } else if (key == 'dateofcensorcertificate') { - value = cleanupDate(value); - edit[key] = value; } else { edit[key] = value; } + if (itemKey && itemKey.type && itemKey.type[0] == 'date') { + edit[key] = edit[key].map(cleanupDate); + } pandora.api.edit(edit, function(result) { if (!isMultiple) { var src; @@ -717,12 +724,14 @@ pandora.ui.infoView = function(data, isMixed) { return '' + str + ''; } - function formatLink(value, key) { - return (Ox.isArray(value) ? value : [value]).map(function(value) { + function formatLink(value, key, linkValue) { + linkValue = linkValue || value + linkValue = Ox.isArray(linkValue) ? linkValue: [linkValue] + return (Ox.isArray(value) ? value : [value]).map(function(value, idx) { return key ? '' + value + '' + ) + '=' + pandora.escapeQueryValue(linkValue[idx]) + '">' + value + '' : value; }).join(Ox.contains(specialListKeys, key) ? '; ' : ', '); } @@ -744,7 +753,17 @@ pandora.ui.infoView = function(data, isMixed) { var ret; if (key == 'year') { ret = formatLink(value, 'year'); - } else if (['releasedate', 'dateofcensorcertificate'].indexOf(key) > -1) { + } else if ( + listKeys.indexOf(key) > -1 && Ox.getObjectById(pandora.site.itemKeys, key).type[0] == 'date' + ) { + ret = value.split('; ').map(function(date) { + date = cleanupDate(date) + return date ? formatLink(Ox.formatDate(date, + ['', '%Y', '%B %Y', '%B %e, %Y'][date.split('-').length], + true + ), key, date) : ''; + }).join('; '); + } else if (['releasedate'].indexOf(key) > -1) { value = cleanupDate(value); ret = value ? Ox.formatDate(value, ['', '%Y', '%B %Y', '%B %e, %Y'][value.split('-').length], diff --git a/static/js/infoView.js b/static/js/infoView.js index a14601489..9c18ff698 100644 --- a/static/js/infoView.js +++ b/static/js/infoView.js @@ -30,6 +30,13 @@ pandora.ui.infoView = function(data, isMixed) { }).map(function(key){ return key.id; }), + specialListKeys = [].concat( + pandora.site.itemKeys.filter(function(key) { + return key.type[0] == 'date' + }).map(function(key) { + return key.id; + }) + ), posterKeys = nameKeys.concat(['title', 'year']), statisticsWidth = 128, @@ -364,16 +371,37 @@ pandora.ui.infoView = function(data, isMixed) { $('
').css({height: '16px'}).appendTo($statistics); + function cleanupDate(value) { + if (/\d{2}-\d{2}-\d{4}/.test(value)) { + value = Ox.reverse(value.split('-')).join('-') + } + if (/\d{4}i\/\d{2}\/\d{d}/.test(value)) { + value = value.split('/').join('-') + } + if (/\d{2}\/\d{2}\/\d{4}/.test(value)) { + value = Ox.reverse(value.split('/')).join('-') + } + return value + } + function editMetadata(key, value) { if (value != data[key]) { + var itemKey = Ox.getObjectById(pandora.site.itemKeys, key); var edit = {id: isMultiple ? ui.listSelection : data.id}; if (key == 'title') { edit[key] = value; } else if (listKeys.indexOf(key) >= 0) { edit[key] = value ? value.split(', ') : []; + } else if (specialListKeys.indexOf(key) > -1) { + edit[key] = value + ? Ox.decodeHTMLEntities(value).split('; ').map(Ox.encodeHTMLEntities) + : []; } else { edit[key] = value ? value : null; } + if (itemKey && itemKey.type && itemKey.type[0] == 'date') { + edit[key] = edit[key].map(cleanupDate); + } pandora.api.edit(edit, function(result) { if (!isMultiple) { var src; @@ -425,20 +453,40 @@ pandora.ui.infoView = function(data, isMixed) { return '' + str + ''; } - function formatLink(value, key) { - return (Ox.isArray(value) ? value : [value]).map(function(value) { + + function formatLink(value, key, linkValue) { + linkValue = linkValue || value + linkValue = Ox.isArray(linkValue) ? linkValue: [linkValue] + return (Ox.isArray(value) ? value : [value]).map(function(value, idx) { return key - ? '' + value + '' + ? '' + value + '' : value; - }).join(', '); + }).join(Ox.contains(specialListKeys, key) ? '; ' : ', '); } function formatValue(key, value) { var ret; if (nameKeys.indexOf(key) > -1) { ret = formatLink(value.split(', '), 'name'); + } else if ( + listKeys.indexOf(key) > -1 && Ox.getObjectById(pandora.site.itemKeys, key).type[0] == 'date' + ) { + ret = value.split('; ').map(function(date) { + date = cleanupDate(date) + return date ? formatLink(Ox.formatDate(date, + ['', '%Y', '%B %Y', '%B %e, %Y'][date.split('-').length], + true + ), key, date) : ''; + }).join('; '); } else if (listKeys.indexOf(key) > -1) { ret = formatLink(value.split(', '), key); + } else if (specialListKeys.indexOf(key) > -1) { + ret = formatLink( + Ox.decodeHTMLEntities(value).split('; ').map(Ox.encodeHTMLEntities), + key + ); } else if (['year', 'country'].indexOf(key) > -1) { ret = formatLink(value, key); } else { @@ -458,6 +506,7 @@ pandora.ui.infoView = function(data, isMixed) { function getValue(key, value) { return !value ? '' + : Ox.contains(specialListKeys, key) ? value.join('; ') : Ox.contains(listKeys, key) ? value.join(', ') : value; }