%# BEGIN LICENSE BLOCK %# %# Copyright (c) 2002-2003 Jesse Vincent %# %# This program is free software; you can redistribute it and/or modify %# it under the terms of version 2 of the GNU General Public License %# as published by the Free Software Foundation. %# %# A copy of that license should have arrived with this %# software, but in any event can be snarfed from www.gnu.org. %# %# This program is distributed in the hope that it will be useful, %# but WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %# GNU General Public License for more details. %# %# END LICENSE BLOCK % if ($id && $id ne 'new') { <& /RTFM/Article/Elements/Tabs, Article => $ArticleObj, current_subtab => "RTFM/Article/Edit.html?id=".$ArticleObj->Id , id => $id, Title => $title &> % } else { <& /RTFM/Article/Elements/Tabs, current_tab => "RTFM/Article/PreCreate.html", Title => loc('Create a new article') &> % } <& /Elements/ListActions, actions => \@results &>
<& Elements/EditBasics, ArticleObj => $ArticleObj, EditClass =>$EditClass, ClassObj => $ClassObj, %ARGS , id => $id &> <& Elements/EditCustomFields, ArticleObj => $ArticleObj, CFContent => \%CFContent, ClassObj => $ClassObj, %ARGS, id =>$id, &> <& Elements/EditLinks, ArticleObj => $ArticleObj, %ARGS, id => $id &>

<&|/l&>Basics

<&|/l&>Content

<&|/l&>Links

<&|/l&>Topics

<&|/l&>Topics <& Elements/EditTopics, ArticleObj => $ArticleObj, Classes => [$ArticleObj->Id ? $ArticleObj->ClassObj : $ClassObj], OnlyThisClass => 1, %ARGS, id => $id &>
<& /Elements/Submit, Label => ($id eq 'new' ? loc('Create') : loc('Save Changes')), color => "#993333" &>
<%INIT> if ( exists $ARGS{'Topics'} ) { $ARGS{'Topics'} = ref( $ARGS{'Topics'} ) ? $ARGS{'Topics'} : [ $ARGS{'Topics'} ]; } my @results; my $title; my $Entries = {}; my $ArticleObj = RT::FM::Article->new( $session{'CurrentUser'} ); my $ClassObj = RT::FM::Class->new( $session{'CurrentUser'} ); my %create_args; my %CFContent; my $EditClass = 1; if ( !$id ) { $title = loc('Create a new article'); foreach my $arg ( sort keys %ARGS ) { if ( $arg =~ /^Transaction-(\d+)$/ ) { my $trans = RT::Transaction->new( $session{'CurrentUser'} ); $trans->Load($1); $CFContent{ $ARGS{$arg} } .= "\n\n" if $CFContent{ $ARGS{$arg} }; $CFContent{ $ARGS{$arg} } .= $trans->Content; } } $ClassObj->Load($Class); unless ( $ClassObj->Id ) { $m->comp( "/RTFM/Elements/Error", Why => loc( "'[_1]' isn't a valid class identifier", $Class ) ); } $EditClass = 0; $id = 'new'; } elsif ( $id eq 'new' ) { if ( $ARGS{'RefersTo-new'} ) { @{ $create_args{'RefersTo-new'} } = split( /\s+/, $ARGS{'RefersTo-new'} ); } if ( $ARGS{'new-RefersTo'} ) { @{ $create_args{'new-RefersTo'} } = split( /\s+/, $ARGS{'new-RefersTo'} ); } my $msg; ( $id, $msg ) = $ArticleObj->Create( Summary => $ARGS{'Summary'}, Name => $ARGS{'Name'}, Class => $ARGS{'Class'}, Topics => $ARGS{'Topics'}, %create_args ); push( @results, $msg ); if ($id) { foreach my $key (keys %ARGS) { # when we create articles, we don't have an article id for the cf naming. # but here, we really want it for adding the value. so we do that now. if ($key =~ /^Object-RT::FM::Article--/) { my $new_key = $key; $new_key =~ s/--/-$id-/; $ARGS{$new_key} = delete $ARGS{$key}; } } my @cf_results = ProcessObjectCustomFieldUpdates( Object => $ArticleObj , ARGSRef => \%ARGS); @results = ( @results, @cf_results ); $title = loc( 'Modify article #[_1]', $ArticleObj->Id ); delete $ARGS{id}; $m->redirect($ARGS{next}) if $ARGS{next}; } else { $ClassObj->Load($Class); unless ( $ClassObj->Id ) { $m->comp( "/RTFM/Elements/Error", Why => loc( "'[_1]' isn't a valid class identifier", $Class ) ); } $ArticleObj = RT::FM::Article->new( $session{'CurrentUser'} ); $id = 'new'; $EditClass = 0; $title = loc('Create a new article'); } } else { $ArticleObj->Load($id); unless ( $ArticleObj->id ) { $m->comp( "/RTFM/Elements/Error", Why => loc("Unable to load article") ); } my @attribs = qw(Name Summary Class); @results = UpdateRecordObject( AttributesRef => \@attribs, Object => $ArticleObj, ARGSRef => \%ARGS ); my @cf_results = ProcessObjectCustomFieldUpdates( Object => $ArticleObj, ARGSRef => \%ARGS ); @results = ( @results, @cf_results ); # Delete links that are gone gone gone. foreach my $arg ( keys %ARGS ) { if ( $arg =~ /DeleteLink-(.*?)-(RefersTo|MemberOf|RefersTo)-(.*)$/ ) { my $base = $1; my $type = $2; my $target = $3; my ( $val, $msg ) = $ArticleObj->DeleteLink( Base => $base, Type => $type, Target => $target ); push @results, $msg; } } my @linktypes = qw(DependsOn MemberOf RefersTo ); foreach my $linktype (@linktypes) { for my $luri ( split( / /, $ARGS{ $ArticleObj->Id . "-$linktype" } ) ) { $luri =~ s/\s*$//; # Strip trailing whitespace my ( $val, $msg ) = $ArticleObj->AddLink( Target => $luri, Type => $linktype ); push @results, $msg; delete $ARGS{ $ArticleObj->Id . "-$linktype" } if $val; } for my $luri ( split( / /, $ARGS{ "$linktype-" . $ArticleObj->Id } ) ) { my ( $val, $msg ) = $ArticleObj->AddLink( Base => $luri, Type => $linktype ); push @results, $msg; delete $ARGS{ "$linktype-" . $ArticleObj->Id } if $val; } } my %topics; if ( $ARGS{'EditTopics'} ) { $topics{$_}++ for @{ $ARGS{'Topics'} }; my $objTopics = new RT::FM::ObjectTopicCollection( $session{'CurrentUser'} ); $objTopics->LimitToObject($ArticleObj); while ( my $t = $objTopics->Next ) { $topics{ $t->Topic }--; } for my $id ( keys %topics ) { if ( $topics{$id} > 0 ) { my ( $val, $msg ) = $ArticleObj->AddTopic( Topic => $id ); push @results, $msg; } elsif ( $topics{$id} < 0 ) { my ( $val, $msg ) = $ArticleObj->DeleteTopic( Topic => $id ); push @results, $msg; } } } $title = loc( 'Modify article #[_1]', $ArticleObj->Id ); } # if they're working on an existing article if ( $ArticleObj->id ) { unless ( $ArticleObj->CurrentUserHasRight('ShowArticle') ) { $m->comp( "/RTFM/Elements/Error", Why => "No permission to view Article" ); } } <%ARGS> $id => undef $Class => undef