ian%hixie.ch 4015b54a02 Stop perl parsing source files that aren't used. (Lazy loading using __DATA__ blocks)
git-svn-id: svn://10.0.0.236/trunk@139442 18797224-902f-48f8-a5cc-f745e15eee43
2003-03-14 07:50:18 +00:00

313 lines
8.9 KiB
Perl

# -*- Mode: perl; tab-width: 4; indent-tabs-mode: nil; -*-
#
# This file is MPL/GPL dual-licensed under the following terms:
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.1 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
# the License for the specific language governing rights and
# limitations under the License.
#
# The Original Code is PLIF 1.0.
# The Initial Developer of the Original Code is Ian Hickson.
#
# Alternatively, the contents of this file may be used under the terms
# of the GNU General Public License Version 2 or later (the "GPL"), in
# which case the provisions of the GPL are applicable instead of those
# above. If you wish to allow use of your version of this file only
# under the terms of the GPL and not to allow others to use your
# version of this file under the MPL, indicate your decision by
# deleting the provisions above and replace them with the notice and
# other provisions required by the GPL. If you do not delete the
# provisions above, a recipient may use your version of this file
# under either the MPL or the GPL.
package PLIF::DataSource::User;
use strict;
use vars qw(@ISA);
use PLIF::DataSource;
@ISA = qw(PLIF::DataSource);
1;
sub provides {
my $class = shift;
my($service) = @_;
return ($service eq 'dataSource.user' or $service eq 'setup.install' or $class->SUPER::provides($service));
}
sub databaseName {
return 'default';
}
__DATA__
sub getUserByUsername {
my $self = shift;
my($app, $username) = @_;
# decent databases can do this in one go. Those that can't can do
# it in a generic two-step process:
my $userID = $self->getUserIDByUsername($app, $username);
if (defined($userID)) {
return $self->getUserByID($app, $userID);
} else {
return ();
}
# return the same as getUserByID()
}
sub getUserIDByUsername {
my $self = shift;
my($app, $username) = @_;
$self->notImplemented();
# return userID or undef
}
sub getUserByContactDetails {
my $self = shift;
my($app, $contactName, $address) = @_;
# decent databases can do this in one go. Those that can't can do
# it in a generic two-step process:
my $userID = $self->getUserIDByContactDetails($app, $contactName, $address);
if (defined($userID)) {
return $self->getUserByID($app, $userID);
} else {
return ();
}
# return the same as getUserByID()
}
sub getUserIDByContactDetails {
my $self = shift;
my($app, $contactName, $address) = @_;
$self->notImplemented();
# return userID or undef
}
sub getUserByID {
my $self = shift;
my($app, $id) = @_;
$self->notImplemented();
# return userID, disabled, password, adminMessage,
# [ fieldID, data ]*, [ groupID, name, level ]*, [rightNames]*
# or () if unsuccessful
}
sub setUser {
my $self = shift;
my($app, $userID, $disabled, $password, $adminMessage) = @_;
# if userID is undefined, then add a new entry and return the
# userID (so that it can be used in setUserField and
# setUserGroups, later).
$self->notImplemented();
}
sub setUserField {
my $self = shift;
my($app, $userID, $fieldID, $data) = @_;
$self->notImplemented();
}
sub removeUserField {
my $self = shift;
my($app, $userID, $fieldID) = @_;
$self->notImplemented();
}
sub setUserFieldChange {
my $self = shift;
my($app, $userID, $fieldID, $newData, $password, $type) = @_;
$self->notImplemented();
# return change ID
}
sub getUserFieldChangeFromChangeID {
my $self = shift;
my($app, $changeID) = @_;
$self->notImplemented();
# return [userID, fieldID, newData, password, createTime, type]
}
sub getUserFieldChangesFromUserIDAndFieldID {
my $self = shift;
my($app, $userID, $fieldID) = @_;
$self->notImplemented();
# return [changeID, newData, password, createTime, type]*
}
sub removeUserFieldChangeByChangeID {
my $self = shift;
my($changeID) = @_;
$self->notImplemented();
}
sub removeUserFieldChangesByUserIDAndFieldID {
my $self = shift;
my($app, $userID, $fieldID) = @_;
$self->notImplemented();
}
sub setUserGroups {
my $self = shift;
my($app, $userID, $groupIDs) = @_;
# $groupIDs is a hashref in the form { groupID => level }*
foreach my $groupID (keys(%$groupIDs)) {
$self->assert($groupIDs->{$groupID} > 0, 1, 'Invalid group membership level passed to setUserGroups');
}
$self->notImplemented();
}
sub addUserGroup {
my $self = shift;
my($app, $userID, $groupID, $level) = @_;
$self->assert($level > 0, 1, 'Invalid group membership level passed to addUserGroup');
$self->notImplemented();
}
sub removeUserGroup {
my $self = shift;
my($app, $userID, $groupID) = @_;
$self->notImplemented();
}
# returns the userDataTypes table, basically...
sub getFields {
my $self = shift;
my($app) = @_;
$self->notImplemented();
# return [type, fieldID, category, name, typeData]*
}
# returns the userDataTypes table in a nice way
# data sources for data bases where this can be efficiently extracted
# from the database can reimplement this method, but for the others
# here is a default implementation that simply recasts getFields().
sub getFieldsHierarchically {
my $self = shift;
my($app) = @_;
my $fields = {};
foreach my $field (@{$self->getFields($app)}) {
if (not defined($fields->{$field->[2]})) {
$fields->{$field->[2]} = { $field->[3] => { 'type' => $field->[0], 'fieldID' => $field->[1], 'typeData' => $field->[4], } };
} else {
$fields->{$field->[2]}->{$field->[3]} = { 'type' => $field->[0], 'fieldID' => $field->[1], 'typeData' => $field->[4], };
}
}
return $fields; # { category => { name => { 'type' => '', 'fieldID' => 0, 'typeData' => '', } } }
}
sub getFieldByID {
my $self = shift;
my($app, $fieldID) = @_;
$self->notImplemented();
# return [type, fieldID, category, name, typeData]
}
sub getFieldByName {
my $self = shift;
my($app, $category, $name) = @_;
$self->notImplemented();
# return [type, fieldID, category, name, typeData]
}
sub getFieldNamesByCategory {
my $self = shift;
my($app, $category) = @_;
$self->notImplemented();
# return [name, name, name, name ...]
}
sub getFieldsByCategory {
my $self = shift;
my($app, $category) = @_;
$self->notImplemented();
# return [type, fieldID, category, name, typeData]*
}
sub setField {
my $self = shift;
my($app, $fieldID, $category, $name, $type, $data) = @_;
# if fieldID is undefined, then add a new entry and return the
# fieldID. Typically data will be undefined then too.
$self->notImplemented();
# The caller should make sure that the relevant service
# ('user.field.$type.manager') is then notified
# ('fieldAdded($fieldID)') so that any additional database setup
# can be performed. If this was merely a change and not a new
# addition, then call fieldChanged($fieldID) instead. (It is a
# change if you pass $fieldID, and it is an addition if $fieldID
# is undefined.)
# returns the fieldID.
}
sub removeField {
my $self = shift;
my($app, $fieldID) = @_;
# The caller should make sure that the relevant service
# ('user.field.$type.manager') is notified
# ('fieldRemoved($fieldID)') so that any additional database
# cleanup can be performed.
$self->notImplemented();
}
sub getGroups {
my $self = shift;
my($app) = @_;
$self->notImplemented();
# return [groupID, name, [rightName]*]*
}
sub getGroupMembers {
my $self = shift;
my($app, $groupID) = @_;
$self->notImplemented();
# return [userID, level]*
}
sub getGroupName {
my $self = shift;
my($app, $groupID) = @_;
$self->notImplemented();
# return name
}
sub setGroup {
my $self = shift;
my($app, $groupID, $groupName, @rightNames) = @_;
# If groupID is undefined, then add a new entry and return the new
# groupID. If groupName is undefined, then leave it as is. If both
# groupID and groupName are undefined, there is an error.
$self->assert(defined($groupID) or defined($groupName), 1,
'Invalid arguments to DataSource::User::setGroup: \'groupID\' and \'groupName\' both undefined');
$self->notImplemented();
}
sub getRightsForGroups {
my $self = shift;
my($app, @groups) = @_;
$self->notImplemented();
# return [rightName]*
}
sub getAllRights {
my $self = shift;
my($app) = @_;
$self->notImplemented();
# return [rightName]*
}
sub addRight {
my $self = shift;
my($app, $name) = @_;
# only adds $name if it isn't there already
$self->notImplemented();
}
sub setupInstall {
my $self = shift;
$self->notImplemented();
}