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
to fail to be centered in the pie wedge display in the
'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
//
// (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
// it under the terms of the GNU General Public License version 2 as
@ -29,17 +29,19 @@
#include "edit_feed.h"
#include "globals.h"
AddFeed::AddFeed(unsigned *id,QString *keyname,QWidget *parent)
AddFeed::AddFeed(unsigned *id,QString *keyname,QStringList *usernames,
QWidget *parent)
: RDDialog(parent)
{
feed_keyname=keyname;
feed_id=id;
feed_usernames=usernames;
//
// Fix the Window Size
//
setMinimumSize(sizeHint());
setMaximumSize(sizeHint());
setMaximumHeight(sizeHint().height());
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);
//
// Enable Users Checkbox
// Enable User Selector
//
feed_users_box=new QCheckBox(this);
feed_users_box->setChecked(true);
feed_users_label=
new QLabel(tr("Enable Feed for All Users"),this);
feed_users_label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter);
feed_usernames_groupbox=new QGroupBox(tr("Enable Users For Feed"),this);
feed_usernames_group=new QButtonGroup(this);
connect(feed_usernames_group,SIGNAL(buttonToggled(QAbstractButton *,bool)),
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
@ -98,7 +120,7 @@ AddFeed::~AddFeed()
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()
{
QString err_msg;
QString sql;
RDSqlQuery *q=NULL;
*feed_id=RDFeed::create(feed_keyname_edit->text(),feed_users_box->isChecked(),
&err_msg);
*feed_id=RDFeed::create(feed_keyname_edit->text(),false,&err_msg);
if(*feed_id!=0) {
*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);
}
else {
@ -139,11 +190,24 @@ void AddFeed::cancelData()
void AddFeed::resizeEvent(QResizeEvent *e)
{
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_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
//
// (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
// it under the terms of the GNU General Public License version 2 as
@ -21,40 +21,53 @@
#ifndef ADD_FEED_H
#define ADD_FEED_H
#include <qcheckbox.h>
#include <qcombobox.h>
#include <qlineedit.h>
#include <qlabel.h>
#include <qpushbutton.h>
#include <QButtonGroup>
#include <QCheckBox>
#include <QComboBox>
#include <QGroupBox>
#include <QLineEdit>
#include <QLabel>
#include <QPushButton>
#include <QRadioButton>
#include <QStringList>
#include <rddialog.h>
#include <rdfeedlistmodel.h>
class AddFeed : public RDDialog
{
Q_OBJECT
public:
AddFeed(unsigned *id,QString *keyname,QWidget *parent=0);
AddFeed(unsigned *id,QString *keyname,QStringList *usernames,QWidget *parent);
~AddFeed();
QSize sizeHint() const;
QSizePolicy sizePolicy() const;
private slots:
void keynameChangedData(const QString &str);
void buttonToggledData(QAbstractButton *rbutton,bool checked);
void okData();
void cancelData();
protected:
void resizeEvent(QResizeEvent *e);
private:
QLabel *feed_keyname_label;
QLineEdit *feed_keyname_edit;
QCheckBox *feed_users_box;
QLabel *feed_users_label;
QPushButton *feed_ok_button;
QPushButton *feed_cancel_button;
QString *feed_keyname;
unsigned *feed_id;
private:
void AuthorizeUser(const QString &keyname,const QString &login_name) const;
QLabel *feed_keyname_label;
QLineEdit *feed_keyname_edit;
QGroupBox *feed_usernames_groupbox;
QButtonGroup *feed_usernames_group;
QRadioButton *feed_none_radio;
QRadioButton *feed_all_radio;
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
//
// (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
// it under the terms of the GNU General Public License version 2 as
@ -144,9 +144,10 @@ void ListFeeds::addData()
{
QString feed;
unsigned id;
QStringList usernames;
QString sql;
AddFeed *ad=new AddFeed(&id,&feed,this);
AddFeed *ad=new AddFeed(&id,&feed,&usernames,this);
if(ad->exec()) {
EditFeed *d=new EditFeed(feed,this);
if(d->exec()) {
@ -168,8 +169,6 @@ void ListFeeds::addData()
sql=QString("delete from `FEEDS` where ")+
"`KEY_NAME`='"+RDEscapeString(feed)+"'";
RDSqlQuery::apply(sql);
return;
}
delete d;
}