Bivio::Biz::Model::RowTag
# Copyright (c) 2007-2012 bivio Software, Inc. All Rights Reserved. # $Id$ package Bivio::Biz::Model::RowTag; use strict; use Bivio::Base 'Biz.PropertyModel'; my($_PI) = b_use('Type.PrimaryId'); my($_RTK) = b_use('Type.RowTagKey'); my($_M) = b_use('Biz.Model'); sub create { my($self, $values) = @_; return defined($values->{value}) && length($values->{value}) ? shift->SUPER::create(@_) : $self; } sub create_value { return _do(create => @_); } sub get_value { return _do(unsafe_load => @_) ? shift->get('value') : undef; } sub internal_initialize { my($self) = @_; return $self->merge_initialize_info($self->SUPER::internal_initialize, { version => 1, table_name => 'row_tag_t', columns => { primary_id => ['PrimaryId', 'PRIMARY_KEY'], key => ['RowTagKey', 'PRIMARY_KEY'], value => ['RowTagValue', 'NOT_NULL'], }, }); } sub replace_value { return _do(create_or_update => @_); } sub row_tag_get { my(undef, $self, $id, $key) = _args(undef, @_); my($t) = $key->get_type; return $t->get_default unless $self->unsafe_load({primary_id => $id, key => $key}); my($v) = $t->from_sql_column($self->get('value')); return $t->is_specified($v) ? $v : $t->get_default; } sub row_tag_get_for_auth_user { my($self, $key) = @_; $key = $_RTK->from_any($key); return $key->get_type->get_default unless my $uid = $self->ureq('auth_user_id'); return $self->row_tag_get($uid, $key); } sub row_tag_replace { my(undef, $self, $id, $key, $value) = _args(undef, @_); my($t) = $key->get_type; return $self->create_or_update({ primary_id => $id, key => $key, value => !$t->is_specified($value) || $t->is_equal($value, $t->get_default) ? undef : $t->to_sql_param($value), }); } sub row_tag_replace_for_auth_user { my($self) = shift; return unless my $uid = $self->ureq('auth_user_id'); return $self->row_tag_replace($uid, @_); } sub update { my($self, $values) = @_; return shift->SUPER::update(@_) if !exists($values->{value}) || defined($values->{value}) && length($values->{value}); $self->delete; return $self; } sub _args { my($method, $self, $model_or_id, $key, $value) = @_; my($id) = _primary_id($self, $model_or_id); unless ($id) { ($key, $value) = ($model_or_id, $key); $id = $self->req('auth_id'); } return ($method, $self, $id, $_RTK->from_any($key), $value); } sub _do { my($method, $self, $id, $key, $value) = _args(@_); return $self->$method({ primary_id => $id, key => $key, $method =~ /load/ ? () : (value => $value), }); } sub _primary_id { my($self, $model_or_id) = @_; return $model_or_id->get_primary_id if $_M->is_blesser_of($model_or_id); return $self->req('auth_id') unless defined($model_or_id); return $model_or_id if $model_or_id =~ /^\d+$/; return undef; } 1;