2021-01-17 Fred Gleason <fredg@paravelsystems.com>

* Restored enforcement of service authorized groups in rdairplay(1)
	and rdlogedit(1).

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason
2021-01-17 16:50:25 -05:00
parent 834ea996fd
commit cd581d3c51
26 changed files with 137 additions and 146 deletions

View File

@@ -18,6 +18,7 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
#include <QList>
#include <QResizeEvent>
#include "rdapplication.h"
@@ -33,6 +34,9 @@ RDCartFilter::RDCartFilter(bool show_drag_box,QWidget *parent)
d_model=NULL;
d_show_drag_box=show_drag_box;
//
// Filter Phrase
//
d_filter_edit=new QLineEdit(this);
d_filter_label=new QLabel(d_filter_edit,tr("Filter:"),this);
d_filter_label->setFont(labelFont());
@@ -85,16 +89,6 @@ RDCartFilter::RDCartFilter(bool show_drag_box,QWidget *parent)
connect(d_codes_box,SIGNAL(activated(const QString &)),
this,SLOT(groupChangedData(const QString &)));
//
// Scheduler Codes2 Filter
//
d_codes2_box=new QComboBox(this);
d_codes2_label=new QLabel(d_codes2_box,tr("And Scheduler Code:"),this);
d_codes2_label->setFont(labelFont());
d_codes2_label->setAlignment(Qt::AlignVCenter|Qt::AlignRight);
connect(d_codes2_box,SIGNAL(activated(const QString &)),
this,SLOT(groupChangedData(const QString &)));
//
// Results Counter
//
@@ -232,7 +226,7 @@ QString RDCartFilter::filterSql(const QStringList &and_fields) const
sql+=RDCartFilter::typeFilter(d_showaudio_check->isChecked(),
d_showmacro_check->isChecked(),
d_show_cart_type);
// sql+=RDCartFilter::phraseFilter(d_filter_edit->text().trimmed(),true);
sql+=RDCartFilter::phraseFilter(d_filter_edit->text().trimmed(),true);
QStringList groups;
for(int i=0;i<d_group_box->count();i++) {
groups.push_back(d_group_box->text(i));
@@ -369,6 +363,24 @@ void RDCartFilter::setUserIsAdmin(bool state)
}
QString RDCartFilter::service() const
{
return d_service;
}
void RDCartFilter::setService(const QString &svc)
{
if(svc!=d_service) {
d_service=svc;
if(!d_service.isEmpty()) {
LoadServiceGroups();
}
emit filterChanged(filterSql());
}
}
RDLibraryModel *RDCartFilter::model() const
{
return d_model;
@@ -409,35 +421,19 @@ void RDCartFilter::changeUser()
QString sql;
RDSqlQuery *q;
d_group_box->clear();
d_group_box->insertItem(tr("ALL"));
if(d_user_is_admin) {
sql=QString("select NAME from GROUPS order by NAME ");
if(d_service.isEmpty()) {
LoadUserGroups();
}
else {
sql=QString("select GROUP_NAME from USER_PERMS where ")+
"USER_NAME=\""+RDEscapeString(rda->user()->name())+"\" "+
"order by GROUP_NAME";
}
q=new RDSqlQuery(sql);
while(q->next()) {
d_group_box->insertItem(q->value(0).toString());
}
delete q;
d_codes_box->clear();
d_codes_box->insertItem(tr("ALL"));
d_codes2_box->clear();
d_codes2_box->insertItem(tr("ALL"));
sql=QString().sprintf("select CODE from SCHED_CODES");
q=new RDSqlQuery(sql);
while(q->next()) {
d_codes_box->insertItem(q->value(0).toString());
d_codes2_box->insertItem(q->value(0).toString());
}
delete q;
d_search_button->setDisabled(true);
groupChangedData(d_group_box->currentText());
}
@@ -523,8 +519,6 @@ void RDCartFilter::resizeEvent(QResizeEvent *e)
d_group_box->setGeometry(70,40,100,20);
d_codes_label->setGeometry(175,40,115,20);
d_codes_box->setGeometry(295,40,100,20);
d_codes2_label->setGeometry(410,40,130,20);
d_codes2_box->setGeometry(545,40,100,20);
d_matches_label->setGeometry(660,40,100,20);
d_matches_edit->setGeometry(765,40,55,20);
d_showmatches_label->setGeometry(760,66,200,20);
@@ -545,29 +539,29 @@ QString RDCartFilter::phraseFilter(const QString &phrase, bool incl_cuts)
QString sql="";
if(phrase.isEmpty()) {
sql=" &&";
sql=" ";
}
else {
sql+=QString(" (")+
"(CART.TITLE like \"%%\")||"+
"(CART.ARTIST like \"%%\")||"+
"(CART.CLIENT like \"%%\")||"+
"(CART.AGENCY like \"%%\")||"+
"(CART.ALBUM like \"%%\")||"+
"(CART.LABEL like \"%%\")||"+
"(CART.NUMBER like \"%%\")||"+
"(CART.PUBLISHER like \"%%\")||"+
"(CART.COMPOSER like \"%%\")||"+
"(CART.CONDUCTOR like \"%%\")||"+
"(CART.SONG_ID like \"%%\")||"+
"(CART.USER_DEFINED like \"%%\")";
QString search=RDEscapeString(phrase);
sql=sql+QString(" ((CART.TITLE like \"%")+search+"%\")||"+
"(CART.ARTIST like \"%"+search+"%\")||"+
"(CART.CLIENT like \"%"+search+"%\")||"+
"(CART.AGENCY like \"%"+search+"%\")||"+
"(CART.ALBUM like \"%"+search+"%\")||"+
"(CART.LABEL like \"%"+search+"%\")||"+
"(CART.NUMBER like \"%"+search+"%\")||"+
"(CART.PUBLISHER like \"%"+search+"%\")||"+
"(CART.COMPOSER like \"%"+search+"%\")||"+
"(CART.CONDUCTOR like \"%"+search+"%\")||"+
"(CART.SONG_ID like \"%"+search+"%\")||"+
"(CART.USER_DEFINED like \"%"+search+"%\")";
if(incl_cuts) {
sql+=QString("||(CUTS.ISCI like \"%%\")")+
"||(CUTS.ISRC like \"%%\")"+
"||(CUTS.DESCRIPTION like \"%%\")"+
"||(CUTS.OUTCUE like \"%%\")";
sql+=QString("||(CUTS.ISCI like \"%")+search+"%\")"+
"||(CUTS.ISRC like \"%"+search+"%\")"+
"||(CUTS.DESCRIPTION like \"%"+search+"%\")"+
"||(CUTS.OUTCUE like \"%"+search+"%\")";
}
sql+=") &&";
sql+=") && ";
}
return sql;
@@ -630,3 +624,48 @@ QString RDCartFilter::typeFilter(bool incl_audio,bool incl_macro,
}
return sql;
}
void RDCartFilter::LoadUserGroups()
{
QString sql;
RDSqlQuery *q;
d_group_box->clear();
d_group_box->insertItem(tr("ALL"));
if(d_user_is_admin) {
sql=QString("select NAME from GROUPS order by NAME ");
}
else {
sql=QString("select GROUP_NAME from USER_PERMS where ")+
"USER_NAME=\""+RDEscapeString(rda->user()->name())+"\" "+
"order by GROUP_NAME";
}
q=new RDSqlQuery(sql);
while(q->next()) {
d_group_box->insertItem(q->value(0).toString());
}
delete q;
groupChangedData(d_group_box->currentText());
}
void RDCartFilter::LoadServiceGroups()
{
QString sql;
RDSqlQuery *q=NULL;
d_group_box->clear();
d_group_box->insertItem(0,tr("ALL"));
sql=QString("select ")+
"GROUP_NAME "+
"from AUDIO_PERMS where "+
"SERVICE_NAME=\""+RDEscapeString(d_service)+"\" "+
"order by GROUP_NAME";
q=new RDSqlQuery(sql);
while(q->next()) {
d_group_box->insertItem(d_group_box->count(),q->value(0).toString());
}
delete q;
}