The field opac_news.new is very confusing and should be renamed.
If you want to access it via Koha::NewsItem you will have trouble:
use Koha::News;
my $news_item = Koha::News->next;
say $news_item->new;
=> Attempt to bless into a reference at /home/vagrant/kohaclone/Koha/Object.pm line 78.
This patchset is going to rename this DB field to opac_news_content instead.
Since the opac_news.new can be used in notice templates, we need to warn the
user during the update DB process that some templates must be updated.
Test plan:
0/ Apply the first patch "Add a test to highlight the issue" and confirm that
the test fail
1/ Apply this second patch
2/ Execute the DB entry
3/ Confirm that you get a warning if at least one of your notice templates is
using opac_news.new
4/ Confirm that the test new pass
5/ Add/update and delete a news
6/ Confirm that the RSS new feed still works as expected
Signed-off-by: Josef Moravec <josef.moravec@gmail.com>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
--- /dev/null
+$DBversion = 'XXX';
+if( CheckVersion( $DBversion ) ) {
+
+ if ( column_exists('opac_news', 'new' ) ) {
+ $dbh->do(q|ALTER TABLE opac_news CHANGE COLUMN new content text NOT NULL|);
+ }
+
+ my ( $used_in_templates ) = $dbh->selectrow_array(q|
+ SELECT COUNT(*) FROM letter WHERE content LIKE "%<<opac_news.new>>%";
+ |);
+ if ( $used_in_templates ) {
+ print "WARNING - It seems that you are using the opac_news.new column in your notice templates\n";
+ print "Since it has now been renamed with opac_news.content, you should update them.\n";
+ }
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 17960 - Rename opac_news with opac_news.content)\n";
+}
`idnew` int(10) unsigned NOT NULL auto_increment, -- unique identifier for the news article
`branchcode` varchar(10) default NULL, -- branch code users to create branch specific news, NULL is every branch.
`title` varchar(250) NOT NULL default '', -- title of the news article
- `new` text NOT NULL, -- the body of your news article
+ `content` text NOT NULL, -- the body of your news article
`lang` varchar(25) NOT NULL default '', -- location for the article (koha is the staff client, slip is the circulation receipt and language codes are for the opac)
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP, -- pulibcation date and time
`expirationdate` date default NULL, -- date the article is set to expire or no longer be visible
<input id="number" size="3" name="number" type="text" />
[% END %]
</li>
- <li><label for="new">News: </label>
- <textarea name="new" id="new" cols="75" rows="10">[% new_detail.new %]</textarea>
+ <li><label for="content">News: </label>
+ <textarea name="content" id="content" cols="75" rows="10">[% new_detail.content %]</textarea>
</li>
</ol>
</fieldset>
<td>[% opac_new.title %]</td>
<td>[% opac_new.author_title %] [% opac_new.author_firstname %] [% opac_new.author_surname %]</td>
<td>
- [% opac_new.new %]
+ [% opac_new.content %]
</td>
<td class="actions">
<a href="/cgi-bin/koha/tools/koha-news.pl?op=add_form&id=[% opac_new.idnew %]" class="btn btn-default btn-xs"><i class="fa fa-pencil"></i> Edit</a>
[% FOREACH newsitem IN koha_news %]
<item>
<title>[% newsitem.title |html %]</title>
- <description>[% newsitem.new |html %]</description>
+ <description>[% newsitem.content |html %]</description>
<guid>[% OPACBaseURL %]/cgi-bin/koha/opac-main.pl#newsitem[% newsitem.idnew |html %]</guid>
</item>
[% END %]
my $retrieved_news_item_1 = Koha::News->find( $new_news_item_1->idnew );
is( $retrieved_news_item_1->title, $new_news_item_1->title, 'Find a news_item by id should return the correct news_item' );
-is( $retrieved_news_item_1->new, $new_news_item_1->new, 'This test is failing because ->new is not a valid accessor');
+is( $retrieved_news_item_1->content, $new_news_item_1->content, 'The content method return the content of the news');
$retrieved_news_item_1->delete;
is( Koha::News->search->count, $nb_of_news + 1, 'Delete should have deleted the news_item' );
( 'News Title', '<p>We have some exciting news!</p>', q{}, '2999-12-30', 1 );
my $href_entry1 = {
title => $title1,
- new => $new1,
+ content => $new1,
lang => $lang1,
expirationdate => $expirationdate1,
timestamp => $timestamp1,
( 'News Title2', '<p>We have some exciting news!</p>', q{}, '2999-12-31', 1 );
my $href_entry2 = {
title => $title2,
- new => $new2,
+ content => $new2,
lang => $lang2,
expirationdate => $expirationdate2,
timestamp => $timestamp2,
( 'News Title3', '<p>News without expiration date</p>', q{}, 1 );
my $href_entry3 = {
title => $title3,
- new => $new3,
+ content => $new3,
lang => $lang3,
timestamp => $timestamp3,
number => $number3,
is( $rv, 0, 'Correctly failed on no parameter!' );
$new2 = '<p>Update! There is no news!</p>';
-$href_entry2->{new} = $new2;
+$href_entry2->{content} = $new2;
$href_entry2->{idnew} = $idnew2;
$rv = upd_opac_new($href_entry2);
is( $rv, 1, 'Successfully updated second dummy news item!' );
get_opac_new($idnew1),
{
title => $title1,
- new => $new1,
+ content => $new1,
lang => $lang1,
expirationdate => $expirationdate1,
timestamp => $timestamp1,
get_opac_new($idnew2),
{
title => $title2,
- new => $new2,
+ content => $new2,
lang => $lang2,
expirationdate => $expirationdate2,
timestamp => $timestamp2,
my $id = $cgi->param('id');
my $title = $cgi->param('title');
-my $new = $cgi->param('new');
+my $content = $cgi->param('content');
my $expirationdate;
if ( $cgi->param('expirationdate') ) {
$expirationdate = output_pref({ dt => dt_from_string( scalar $cgi->param('expirationdate') ), dateformat => 'iso', dateonly => 1 });
add_opac_new(
{
title => $title,
- new => $new,
+ content => $content,
lang => $lang,
expirationdate => $expirationdate,
timestamp => $timestamp,
{
idnew => $id,
title => $title,
- new => $new,
+ content => $content,
lang => $lang,
expirationdate => $expirationdate,
timestamp => $timestamp,