2024-02-07 Fred Gleason <fredg@paravelsystems.com>

* Added the option to provision users from an existing RSS feed
	to the 'Add RSS Feed' dialog in rdadmin(1).

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason 2024-02-07 11:54:55 -05:00
parent c0a8e1e692
commit ae5d20cbe9
4 changed files with 115 additions and 36 deletions

View File

@ -24642,3 +24642,6 @@
* Fixed a regression in rdlogmanager(1) that caused clock titles * Fixed a regression in rdlogmanager(1) that caused clock titles
to fail to be centered in the pie wedge display in the to fail to be centered in the pie wedge display in the
'Edit Clock' dialog. 'Edit Clock' dialog.
2024-02-07 Fred Gleason <fredg@paravelsystems.com>
* Added the option to provision users from an existing RSS feed
to the 'Add RSS Feed' dialog in rdadmin(1).

View File

@ -2,7 +2,7 @@
// //
// Add a Rivendell RSS Feed // Add a Rivendell RSS Feed
// //
// (C) Copyright 2002-2021 Fred Gleason <fredg@paravelsystems.com> // (C) Copyright 2002-2024 Fred Gleason <fredg@paravelsystems.com>
// //
// This program is free software; you can redistribute it and/or modify // This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as // it under the terms of the GNU General Public License version 2 as
@ -29,17 +29,19 @@
#include "edit_feed.h" #include "edit_feed.h"
#include "globals.h" #include "globals.h"
AddFeed::AddFeed(unsigned *id,QString *keyname,QWidget *parent) AddFeed::AddFeed(unsigned *id,QString *keyname,QStringList *usernames,
QWidget *parent)
: RDDialog(parent) : RDDialog(parent)
{ {
feed_keyname=keyname; feed_keyname=keyname;
feed_id=id; feed_id=id;
feed_usernames=usernames;
// //
// Fix the Window Size // Fix the Window Size
// //
setMinimumSize(sizeHint()); setMinimumSize(sizeHint());
setMaximumSize(sizeHint()); setMaximumHeight(sizeHint().height());
setWindowTitle("RDADmin - "+tr("Add RSS Feed")); setWindowTitle("RDADmin - "+tr("Add RSS Feed"));
@ -62,13 +64,33 @@ AddFeed::AddFeed(unsigned *id,QString *keyname,QWidget *parent)
feed_keyname_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); feed_keyname_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
// //
// Enable Users Checkbox // Enable User Selector
// //
feed_users_box=new QCheckBox(this); feed_usernames_groupbox=new QGroupBox(tr("Enable Users For Feed"),this);
feed_users_box->setChecked(true);
feed_users_label= feed_usernames_group=new QButtonGroup(this);
new QLabel(tr("Enable Feed for All Users"),this); connect(feed_usernames_group,SIGNAL(buttonToggled(QAbstractButton *,bool)),
feed_users_label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); this,SLOT(buttonToggledData(QAbstractButton *,bool)));
feed_none_radio=
new QRadioButton(tr("No Users"),this);
feed_usernames_group->addButton(feed_none_radio);
feed_all_radio=
new QRadioButton(tr("All Users"),this);
feed_usernames_group->addButton(feed_all_radio);
feed_some_radio=
new QRadioButton(tr("Users from Feed")+":",this);
feed_usernames_group->addButton(feed_some_radio);
feed_keyname_box=new QComboBox(this);
feed_keyname_model=new RDFeedListModel(true,false,this);
feed_keyname_model->setPalette(palette());
feed_keyname_model->setFont(font());
feed_keyname_box->setModel(feed_keyname_model);
feed_some_radio->setDisabled(feed_keyname_model->rowCount()==0);
feed_none_radio->setChecked(true);
buttonToggledData(feed_usernames_group->checkedButton(),true);
// //
// Ok Button // Ok Button
@ -98,7 +120,7 @@ AddFeed::~AddFeed()
QSize AddFeed::sizeHint() const QSize AddFeed::sizeHint() const
{ {
return QSize(290,123); return QSize(310,205);
} }
@ -114,14 +136,43 @@ void AddFeed::keynameChangedData(const QString &str)
} }
void AddFeed::buttonToggledData(QAbstractButton *rbutton,bool checked)
{
feed_keyname_box->setEnabled((rbutton==feed_some_radio)&&checked);
}
void AddFeed::okData() void AddFeed::okData()
{ {
QString err_msg; QString err_msg;
QString sql;
RDSqlQuery *q=NULL;
*feed_id=RDFeed::create(feed_keyname_edit->text(),feed_users_box->isChecked(), *feed_id=RDFeed::create(feed_keyname_edit->text(),false,&err_msg);
&err_msg);
if(*feed_id!=0) { if(*feed_id!=0) {
*feed_keyname=feed_keyname_edit->text(); *feed_keyname=feed_keyname_edit->text();
if(feed_usernames_group->checkedButton()==feed_all_radio) {
sql=QString("select ")+
"`LOGIN_NAME` "+ // 00
"from `USERS` where "+
"(`ADMIN_CONFIG_PRIV`='N')&&(ADMIN_RSS_PRIV='N')";
q=new RDSqlQuery(sql);
while(q->next()) {
AuthorizeUser(*feed_keyname,q->value(0).toString());
}
delete q;
}
if(feed_usernames_group->checkedButton()==feed_some_radio) {
sql=QString("select ")+
"`USER_NAME` "+ // 00
"from `FEED_PERMS` where "+
"`KEY_NAME`='"+RDEscapeString(feed_keyname_box->currentText())+"'";
q=new RDSqlQuery(sql);
while(q->next()) {
AuthorizeUser(*feed_keyname,q->value(0).toString());
}
delete q;
}
done(true); done(true);
} }
else { else {
@ -139,11 +190,24 @@ void AddFeed::cancelData()
void AddFeed::resizeEvent(QResizeEvent *e) void AddFeed::resizeEvent(QResizeEvent *e)
{ {
feed_keyname_label->setGeometry(10,11,120,19); feed_keyname_label->setGeometry(10,11,120,19);
feed_keyname_edit->setGeometry(135,11,sizeHint().width()-140,19); feed_keyname_edit->setGeometry(135,11,sizeHint().width()-145,19);
feed_users_box->setGeometry(40,35,15,15);
feed_users_label->setGeometry(60,33,sizeHint().width()-60,19);
feed_usernames_groupbox->setGeometry(10,35,size().width()-20,97);
feed_none_radio->setGeometry(30,45,160,30);
feed_all_radio->setGeometry(30,70,160,30);
feed_some_radio->setGeometry(30,95,160,30);
feed_keyname_box->setGeometry(150,95,size().width()-170,30);
feed_ok_button->setGeometry(size().width()-180,size().height()-60,80,50); feed_ok_button->setGeometry(size().width()-180,size().height()-60,80,50);
feed_cancel_button->setGeometry(size().width()-90,size().height()-60,80,50); feed_cancel_button->setGeometry(size().width()-90,size().height()-60,80,50);
} }
void AddFeed::AuthorizeUser(const QString &keyname,
const QString &login_name) const
{
QString sql=QString("insert into `FEED_PERMS` set ")+
"`KEY_NAME`='"+RDEscapeString(keyname)+"',"+
"`USER_NAME`='"+RDEscapeString(login_name)+"'";
RDSqlQuery::apply(sql);
}

View File

@ -2,7 +2,7 @@
// //
// Add a Rivendell Feed // Add a Rivendell Feed
// //
// (C) Copyright 2002-2020 Fred Gleason <fredg@paravelsystems.com> // (C) Copyright 2002-2024 Fred Gleason <fredg@paravelsystems.com>
// //
// This program is free software; you can redistribute it and/or modify // This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as // it under the terms of the GNU General Public License version 2 as
@ -21,40 +21,53 @@
#ifndef ADD_FEED_H #ifndef ADD_FEED_H
#define ADD_FEED_H #define ADD_FEED_H
#include <qcheckbox.h> #include <QButtonGroup>
#include <qcombobox.h> #include <QCheckBox>
#include <qlineedit.h> #include <QComboBox>
#include <qlabel.h> #include <QGroupBox>
#include <qpushbutton.h> #include <QLineEdit>
#include <QLabel>
#include <QPushButton>
#include <QRadioButton>
#include <QStringList>
#include <rddialog.h> #include <rddialog.h>
#include <rdfeedlistmodel.h>
class AddFeed : public RDDialog class AddFeed : public RDDialog
{ {
Q_OBJECT Q_OBJECT
public: public:
AddFeed(unsigned *id,QString *keyname,QWidget *parent=0); AddFeed(unsigned *id,QString *keyname,QStringList *usernames,QWidget *parent);
~AddFeed(); ~AddFeed();
QSize sizeHint() const; QSize sizeHint() const;
QSizePolicy sizePolicy() const; QSizePolicy sizePolicy() const;
private slots: private slots:
void keynameChangedData(const QString &str); void keynameChangedData(const QString &str);
void buttonToggledData(QAbstractButton *rbutton,bool checked);
void okData(); void okData();
void cancelData(); void cancelData();
protected: protected:
void resizeEvent(QResizeEvent *e); void resizeEvent(QResizeEvent *e);
private: private:
QLabel *feed_keyname_label; void AuthorizeUser(const QString &keyname,const QString &login_name) const;
QLineEdit *feed_keyname_edit; QLabel *feed_keyname_label;
QCheckBox *feed_users_box; QLineEdit *feed_keyname_edit;
QLabel *feed_users_label; QGroupBox *feed_usernames_groupbox;
QPushButton *feed_ok_button; QButtonGroup *feed_usernames_group;
QPushButton *feed_cancel_button; QRadioButton *feed_none_radio;
QString *feed_keyname; QRadioButton *feed_all_radio;
unsigned *feed_id; QRadioButton *feed_some_radio;
QComboBox *feed_keyname_box;
RDFeedListModel *feed_keyname_model;
QPushButton *feed_ok_button;
QPushButton *feed_cancel_button;
QString *feed_keyname;
unsigned *feed_id;
QStringList *feed_usernames;
}; };

View File

@ -2,7 +2,7 @@
// //
// List Rivendell Feeds // List Rivendell Feeds
// //
// (C) Copyright 2002-2023 Fred Gleason <fredg@paravelsystems.com> // (C) Copyright 2002-2024 Fred Gleason <fredg@paravelsystems.com>
// //
// This program is free software; you can redistribute it and/or modify // This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as // it under the terms of the GNU General Public License version 2 as
@ -144,9 +144,10 @@ void ListFeeds::addData()
{ {
QString feed; QString feed;
unsigned id; unsigned id;
QStringList usernames;
QString sql; QString sql;
AddFeed *ad=new AddFeed(&id,&feed,this); AddFeed *ad=new AddFeed(&id,&feed,&usernames,this);
if(ad->exec()) { if(ad->exec()) {
EditFeed *d=new EditFeed(feed,this); EditFeed *d=new EditFeed(feed,this);
if(d->exec()) { if(d->exec()) {
@ -168,8 +169,6 @@ void ListFeeds::addData()
sql=QString("delete from `FEEDS` where ")+ sql=QString("delete from `FEEDS` where ")+
"`KEY_NAME`='"+RDEscapeString(feed)+"'"; "`KEY_NAME`='"+RDEscapeString(feed)+"'";
RDSqlQuery::apply(sql); RDSqlQuery::apply(sql);
return;
} }
delete d; delete d;
} }