diff options
-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | data/lang.txt | 12 | ||||
-rw-r--r-- | data/script.js | 37 | ||||
-rw-r--r-- | data/style.css | 3 | ||||
-rw-r--r-- | lib/VNDB/DB/Releases.pm | 8 | ||||
-rw-r--r-- | lib/VNDB/Handler/Releases.pm | 22 | ||||
-rw-r--r-- | util/dump.sql | 3 | ||||
-rw-r--r-- | util/updates/update_2.8.sql | 5 |
8 files changed, 65 insertions, 26 deletions
@@ -16,6 +16,7 @@ git - ? - Language strings are translatable - Information is automatically synchronised with data/global.pl - Changed language selector into a Javascript dropdown + - Added producer role (developer/publisher) to releases 2.7 - 2009-09-24 - Improved styling of the threeboxes layout diff --git a/data/lang.txt b/data/lang.txt index 0b00f7c5..e78bf30b 100644 --- a/data/lang.txt +++ b/data/lang.txt @@ -1942,6 +1942,18 @@ ru : Выбранные компании en : Add producer ru : Добавить компанию +:_redit_form_prod_dev +en : Developer +ru*: + +:_redit_form_prod_pub +en : Publisher +ru*: + +:_redit_form_prod_both +en : Both +ru*: + :_redit_form_prod_addbut en : add ru*: diff --git a/data/script.js b/data/script.js index bd56f12e..cc984230 100644 --- a/data/script.js +++ b/data/script.js @@ -1426,8 +1426,10 @@ if(byId('jt_box_rel_vn')) function rprLoad() { var ps = byId('producers').value.split('|||'); - for(var i=0; i<ps.length && ps[i].length>1; i++) - rprAdd(ps[i].split(',',2)[0], ps[i].split(',',2)[1]); + for(var i=0; i<ps.length && ps[i].length>1; i++) { + var val = ps[i].split(',',3); + rprAdd(val[0], val[1], val[2]); + } rprEmpty(); dsInit(byId('producer_input'), '/xml/producers.xml?q=', @@ -1442,12 +1444,17 @@ function rprLoad() { byId('producer_add').onclick = rprFormAdd; } -function rprAdd(id, name) { +function rprAdd(id, role, name) { + var roles = byId('producer_role').options; + var rl = tag('select', {onchange:rprSerialize}); + for(var i=0; i<roles.length; i++) + rl.appendChild(tag('option', {value: roles[i].value, selected:role==roles[i].value}, getText(roles[i]))); + byId('producer_tbl').appendChild(tag('tr', {id:'rpr_'+id, rpr_id:id}, tag('td', {'class':'tc_name'}, 'p'+id+':', tag('a', {href:'/p'+id}, shorten(name, 40))), + tag('td', {'class':'tc_role'}, rl), tag('td', {'class':'tc_rm'}, tag('a', {href:'#', onclick:rprDel}, mt('_redit_form_prod_remove'))) )); - rprStripe(); rprEmpty(); } @@ -1458,7 +1465,6 @@ function rprDel() { tr.parentNode.removeChild(tr); rprEmpty(); rprSerialize(); - rprStripe(); return false; } @@ -1470,12 +1476,6 @@ function rprEmpty() { tbl.removeChild(byId('rpr_tr_none')); } -function rprStripe() { - var l = byName(byId('producer_tbl'), 'tr'); - for(var i=0; i<l.length; i++) - setClass(l[i], 'odd', i%2); -} - function rprFormAdd() { var txt = byId('producer_input'); var lnk = byId('producer_add'); @@ -1503,7 +1503,10 @@ function rprFormAdd() { if(byId('rpr_'+id)) return alert(mt('_redit_form_prod_double')); - rprAdd(id, items[0].firstChild.nodeValue); + var role = byId('producer_role'); + role = role[role.selectedIndex].value; + + rprAdd(id, role, items[0].firstChild.nodeValue); rprSerialize(); }); return false; @@ -1513,8 +1516,14 @@ function rprSerialize() { var r = []; var l = byName(byId('producer_tbl'), 'tr'); for(var i=0; i<l.length; i++) - if(l[i].rpr_id) - r[r.length] = l[i].rpr_id + ',' + getText(byName(byClass(l[i], 'td', 'tc_name')[0], 'a')[0]); + if(l[i].rpr_id) { + var role = byName(byClass(l[i], 'td', 'tc_role')[0], 'select')[0]; + r[r.length] = [ + l[i].rpr_id, + role.options[role.selectedIndex].value, + getText(byName(byClass(l[i], 'td', 'tc_name')[0], 'a')[0]) + ].join(','); + } byId('producers').value = r.join('|||'); } diff --git a/data/style.css b/data/style.css index af9370e3..56c68f3c 100644 --- a/data/style.css +++ b/data/style.css @@ -870,8 +870,9 @@ div.scr_uploader { visibility: hidden; overflow: hidden; width: 1px; height: 1px #jt_box_rel_vn h2, #jt_box_rel_prod h2 { clear: left; padding-top: 10px; } #jt_box_rel_vn div, #jt_box_rel_vn table, #jt_box_rel_prod div, #jt_box_rel_prod table { margin-left: 20px } -#jt_box_rel_vn input, #jt_box_rel_prod input { margin-right: 10px; width: 300px } +#jt_box_rel_vn input, #jt_box_rel_prod input { margin-right: 10px; width: 295px } #jt_box_rel_vn .tc_title, #jt_box_rel_prod .tc_name { width: 310px; padding: 2px } +#jt_box_rel_prod .tc_role select { width: 100px; margin-right: 10px; } diff --git a/lib/VNDB/DB/Releases.pm b/lib/VNDB/DB/Releases.pm index 05f42ab8..551855e8 100644 --- a/lib/VNDB/DB/Releases.pm +++ b/lib/VNDB/DB/Releases.pm @@ -117,7 +117,7 @@ sub dbReleaseGet { if($o{what} =~ /producers/) { push(@{$r->[$r{$_->{rid}}]{producers}}, $_) for (@{$self->dbAll(q| - SELECT rp.rid, p.id, pr.name, pr.original, pr.type + SELECT rp.rid, rp.developer, rp.publisher, p.id, pr.name, pr.original, pr.type FROM releases_producers rp JOIN producers p ON rp.pid = p.id JOIN producers_rev pr ON pr.id = p.latest @@ -189,9 +189,9 @@ sub insert_rev { ) for (@{$o->{languages}}); $self->dbExec(q| - INSERT INTO releases_producers (rid, pid) - VALUES (?, ?)|, - $cid, $_ + INSERT INTO releases_producers (rid, pid, developer, publisher) + VALUES (?, ?, ?, ?)|, + $cid, $_->[0], $_->[1]?1:0, $_->[2]?1:0 ) for (@{$o->{producers}}); $self->dbExec(q| diff --git a/lib/VNDB/Handler/Releases.pm b/lib/VNDB/Handler/Releases.pm index 586bb666..763ff59c 100644 --- a/lib/VNDB/Handler/Releases.pm +++ b/lib/VNDB/Handler/Releases.pm @@ -284,7 +284,10 @@ sub edit { (map { $_ => $r->{$_} } qw|type title original gtin catalog languages website released notes minage platforms patch resolution voiced freeware doujin ani_story ani_ero|), media => join(',', sort map "$_->{medium} $_->{qty}", @{$r->{media}}), - producers => join('|||', map "$_->{id},$_->{name}", sort { $a->{id} <=> $b->{id} } @{$r->{producers}}), + producers => join('|||', map + sprintf('%d,%d,%s', $_->{id}, ($_->{developer}?1:0)+($_->{publisher}?2:0), $_->{name}), + sort { $a->{id} <=> $b->{id} } @{$r->{producers}} + ), ); $b4{vn} = join('|||', map "$_->{vid},$_->{title}", @$vn); my $frm; @@ -320,7 +323,7 @@ sub edit { if(!$frm->{_err}) { # de-serialize $media = [ map [ split / / ], split /,/, $frm->{media} ]; - $producers = [ map { /^([0-9]+)/ ? $1 : () } split /\|\|\|/, $frm->{producers} ]; + $producers = [ map { /^([0-9]+),([1-3])/ ? [ $1, $2&1?1:0, $2&2?1:0] : () } split /\|\|\|/, $frm->{producers} ]; $new_vn = [ map { /^([0-9]+)/ ? $1 : () } split /\|\|\|/, $frm->{vn} ]; $frm->{platforms} = [ grep $_, @{$frm->{platforms}} ]; $frm->{$_} = $frm->{$_} ? 1 : 0 for (qw|patch freeware doujin|); @@ -330,7 +333,7 @@ sub edit { my $same = $rid && (join(',', sort @{$b4{platforms}}) eq join(',', sort @{$frm->{platforms}})) && - (join(',', sort @$producers) eq join(',', sort map $_->{id}, @{$r->{producers}})) && + (join(',', map join(' ', @$_), sort { $a->[0] <=> $b->[0] } @$producers) eq join(',', sort map sprintf('%d %d %d',$_->{id}, $_->{developer}?1:0, $_->{publisher}?1:0), sort { $a->{id} <=> $b->{id} } @{$r->{producers}})) && (join(',', sort @$new_vn) eq join(',', sort map $_->{vid}, @$vn)) && (join(',', sort @{$b4{languages}}) eq join(',', sort @{$frm->{languages}})) && !grep !/^(platforms|producers|vn|languages)$/ && $frm->{$_} ne $b4{$_}, keys %b4; @@ -443,10 +446,15 @@ sub _form { h2 mt('_redit_form_prod_sel'); table; tbody id => 'producer_tbl'; end; end; h2 mt('_redit_form_prod_add'); - div; - input id => 'producer_input', type => 'text', class => 'text'; - a id => 'producer_add', href => '#', mt '_redit_form_prod_addbut'; - end; + table; Tr; + td class => 'tc_name'; input id => 'producer_input', type => 'text', class => 'text'; end; + td class => 'tc_role'; Select id => 'producer_role'; + option value => 1, mt '_redit_form_prod_dev'; + option value => 2, selected => 'selected', mt '_redit_form_prod_pub'; + option value => 3, mt '_redit_form_prod_both'; + end; end; + td class => 'tc_add'; a id => 'producer_add', href => '#', mt '_redit_form_prod_addbut'; end; + end; end; }], ], diff --git a/util/dump.sql b/util/dump.sql index b43d8c62..10d13b9d 100644 --- a/util/dump.sql +++ b/util/dump.sql @@ -103,6 +103,9 @@ CREATE TABLE releases_platforms ( CREATE TABLE releases_producers ( rid integer NOT NULL, pid integer NOT NULL, + developer boolean NOT NULL DEFAULT FALSE, + publisher boolean NOT NULL DEFAULT TRUE, + CHECK(developer OR publisher), PRIMARY KEY(pid, rid) ); diff --git a/util/updates/update_2.8.sql b/util/updates/update_2.8.sql index df5221ee..2993467c 100644 --- a/util/updates/update_2.8.sql +++ b/util/updates/update_2.8.sql @@ -54,3 +54,8 @@ ALTER TABLE releases_media ALTER COLUMN medium DROP DEFAULT; ALTER TABLE releases_media ALTER COLUMN medium TYPE medium USING TRIM(both ' ' from medium)::medium; +-- Differentiate between publishers and developers +ALTER TABLE releases_producers ADD COLUMN developer boolean NOT NULL DEFAULT FALSE; +ALTER TABLE releases_producers ADD COLUMN publisher boolean NOT NULL DEFAULT TRUE; +ALTER TABLE releases_producers ADD CHECK(developer OR publisher); + |