summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog1
-rw-r--r--data/lang.txt12
-rw-r--r--data/script.js37
-rw-r--r--data/style.css3
-rw-r--r--lib/VNDB/DB/Releases.pm8
-rw-r--r--lib/VNDB/Handler/Releases.pm22
-rw-r--r--util/dump.sql3
-rw-r--r--util/updates/update_2.8.sql5
8 files changed, 65 insertions, 26 deletions
diff --git a/ChangeLog b/ChangeLog
index 857c2ad4..6a62b020 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);
+