/** * count the number of items per month * @param $args['cids'] not supported here (yet ?) * @param $args['ptid'] publication type ID we're interested in * @param $args['state'] array of requested status(es) for the publications * @return array array(month => count), or false on failure */ function publications_userapi_getmonthcount($args) { // Get database setup $dbconn = xarDB::getConn(); // Get the field names and LEFT JOIN ... ON ... parts from publications // By passing on the $args, we can let leftjoin() create the WHERE for // the publications-specific columns too now $publicationsdef = xarModAPIFunc('publications', 'user', 'leftjoin', $args); // Bug 1590 - Create custom query supported by each database. $dbtype = xarDB::getType(); switch ($dbtype) { case 'mysql': $query = "SELECT LEFT(FROM_UNIXTIME(start_date),7) AS mymonth, COUNT(*) FROM " . $publicationsdef['table']; // echo $query;exit; break; case 'postgres': $query = "SELECT TO_CHAR(ABSTIME(pubdate),'YYYY-MM') AS mymonth, COUNT(*) FROM " . $publicationsdef['table']; break; case 'mssql': $query = "SELECT LEFT(CONVERT(VARCHAR,DATEADD(ss,pubdate,'1/1/1970'),120),7) as mymonth, COUNT(*) FROM " . $publicationsdef['table']; break; // TODO: Add SQL queries for Oracle, etc. // TODO: Add SQL queries for Oracle, etc. default: return; } if (!empty($publicationsdef['where'])) { $query .= ' WHERE ' . $publicationsdef['where']; } switch ($dbtype) { case 'mssql': $query .= " GROUP BY LEFT(CONVERT(VARCHAR,DATEADD(ss,pubdate,'1/1/1970'),120),7)"; break; default: $query .= ' GROUP BY mymonth'; break; } $result =& $dbconn->Execute($query); if (!$result) { return; } $months = array(); while (!$result->EOF) { list($month, $count) = $result->fields; $months[$month] = $count; $result->MoveNext(); } return $months; }
/** * count number of items depending on additional module criteria * * @param array group * @return array number of items with descriptors */ function publications_adminapi_getstats($args) { extract($args); $allowedfields = array('pubtype_id', 'state', 'owner', 'locale', 'pubdate_year', 'pubdate_month', 'pubdate_day'); if (empty($group)) { $group = array(); } $newfields = array(); $newgroups = array(); foreach ($group as $field) { if (empty($field) || !in_array($field, $allowedfields)) { continue; } if ($field == 'pubdate_year') { $dbtype = xarDB::getType(); switch ($dbtype) { case 'mysql': $newfields[] = "LEFT(FROM_UNIXTIME(start_date),4) AS myyear"; $newgroups[] = "myyear"; break; case 'postgres': $newfields[] = "TO_CHAR(ABSTIME(start_date),'YYYY') AS myyear"; // CHECKME: do we need to use TO_CHAR(...) for the group field too ? $newgroups[] = "myyear"; break; case 'mssql': $newfields[] = "LEFT(CONVERT(VARCHAR,DATEADD(ss,start_date,'1/1/1970'),120),4) as myyear"; $newgroups[] = "LEFT(CONVERT(VARCHAR,DATEADD(ss,start_date,'1/1/1970'),120),4)"; break; // TODO: Add SQL queries for Oracle, etc. // TODO: Add SQL queries for Oracle, etc. default: continue; } } elseif ($field == 'pubdate_month') { $dbtype = xarDB::getType(); switch ($dbtype) { case 'mysql': $newfields[] = "LEFT(FROM_UNIXTIME(start_date),7) AS mymonth"; $newgroups[] = "mymonth"; break; case 'postgres': $newfields[] = "TO_CHAR(ABSTIME(start_date),'YYYY-MM') AS mymonth"; // CHECKME: do we need to use TO_CHAR(...) for the group field too ? $newgroups[] = "mymonth"; break; case 'mssql': $newfields[] = "LEFT(CONVERT(VARCHAR,DATEADD(ss,start_date,'1/1/1970'),120),7) as mymonth"; $newgroups[] = "LEFT(CONVERT(VARCHAR,DATEADD(ss,start_date,'1/1/1970'),120),7)"; break; // TODO: Add SQL queries for Oracle, etc. // TODO: Add SQL queries for Oracle, etc. default: continue; } } elseif ($field == 'pubdate_day') { $dbtype = xarDB::getType(); switch ($dbtype) { case 'mysql': $newfields[] = "LEFT(FROM_UNIXTIME(start_date),10) AS myday"; $newgroups[] = "myday"; break; case 'postgres': $newfields[] = "TO_CHAR(ABSTIME(start_date),'YYYY-MM-DD') AS myday"; // CHECKME: do we need to use TO_CHAR(...) for the group field too ? $newgroups[] = "myday"; break; case 'mssql': $newfields[] = "LEFT(CONVERT(VARCHAR,DATEADD(ss,start_date,'1/1/1970'),120),10) as myday"; $newgroups[] = "LEFT(CONVERT(VARCHAR,DATEADD(ss,start_date,'1/1/1970'),120),10)"; break; // TODO: Add SQL queries for Oracle, etc. // TODO: Add SQL queries for Oracle, etc. default: continue; } } else { $newfields[] = $field; $newgroups[] = $field; } } if (empty($newfields) || count($newfields) < 1) { $newfields = array('pubtype_id', 'state', 'owner'); $newgroups = array('pubtype_id', 'state', 'owner'); } // Database information $dbconn = xarDB::getConn(); $xartables = xarDB::getTables(); $query = 'SELECT ' . join(', ', $newfields) . ', COUNT(*) FROM ' . $xartables['publications'] . ' GROUP BY ' . join(', ', $newgroups) . ' ORDER BY ' . join(', ', $newgroups); $result =& $dbconn->Execute($query); if (!$result) { return; } $stats = array(); while (!$result->EOF) { if (count($newfields) > 3) { list($field1, $field2, $field3, $field4, $count) = $result->fields; $stats[$field1][$field2][$field3][$field4] = $count; } elseif (count($newfields) == 3) { list($field1, $field2, $field3, $count) = $result->fields; $stats[$field1][$field2][$field3] = $count; } elseif (count($newfields) == 2) { list($field1, $field2, $count) = $result->fields; $stats[$field1][$field2] = $count; } elseif (count($newfields) == 1) { list($field1, $count) = $result->fields; $stats[$field1] = $count; } $result->MoveNext(); } $result->Close(); return $stats; }
function publications_admin_updateconfig() { // Confirm authorisation code if (!xarSecConfirmAuthKey()) { return; } // Get parameters //A lot of these probably are bools, still might there be a need to change the template to return //'true' and 'false' to use those... if (!xarVarFetch('settings', 'array', $settings, array(), XARVAR_NOT_REQUIRED)) { return; } if (!xarVarFetch('usetitleforurl', 'int', $usetitleforurl, xarModVars::get('publications', 'usetitleforurl'), XARVAR_NOT_REQUIRED)) { return; } if (!xarVarFetch('defaultstate', 'isset', $defaultstate, 0, XARVAR_NOT_REQUIRED)) { return; } if (!xarVarFetch('defaultsort', 'isset', $defaultsort, 'date', XARVAR_NOT_REQUIRED)) { return; } if (!xarVarFetch('usealias', 'int', $usealias, 0, XARVAR_NOT_REQUIRED)) { return; } if (!xarVarFetch('ptid', 'isset', $ptid, xarModVars::get('publications', 'defaultpubtype'), XARVAR_NOT_REQUIRED)) { return; } if (!xarVarFetch('multilanguage', 'int', $multilanguage, 0, XARVAR_NOT_REQUIRED)) { return; } if (!xarVarFetch('tab', 'str:1:10', $data['tab'], 'global', XARVAR_NOT_REQUIRED)) { return; } if (!xarSecurityCheck('AdminPublications', 1, 'Publication', "{$ptid}:All:All:All")) { return; } if ($data['tab'] == 'global') { if (!xarVarFetch('defaultpubtype', 'isset', $defaultpubtype, 1, XARVAR_NOT_REQUIRED)) { return; } if (!xarVarFetch('sortpubtypes', 'isset', $sortpubtypes, 'id', XARVAR_NOT_REQUIRED)) { return; } if (!xarVarFetch('defaultlanguage', 'str:1:100', $defaultlanguage, xarModVars::get('publications', 'defaultlanguage'), XARVAR_NOT_REQUIRED)) { return; } if (!xarVarFetch('debugmode', 'checkbox', $debugmode, xarModVars::get('publications', 'debugmode'), XARVAR_NOT_REQUIRED)) { return; } if (!xarVarFetch('defaultfrontpage', 'str', $defaultfrontpage, xarModVars::get('publications', 'defaultfrontpage'), XARVAR_NOT_REQUIRED)) { return; } if (!xarVarFetch('defaultbackpage', 'str', $defaultbackpage, xarModVars::get('publications', 'defaultbackpage'), XARVAR_NOT_REQUIRED)) { return; } xarModVars::set('publications', 'defaultpubtype', $defaultpubtype); xarModVars::set('publications', 'sortpubtypes', $sortpubtypes); xarModVars::set('publications', 'defaultlanguage', $defaultlanguage); xarModVars::set('publications', 'debugmode', $debugmode); xarModVars::set('publications', 'usealias', $usealias); xarModVars::set('publications', 'usetitleforurl', $usetitleforurl); xarModVars::set('publications', 'defaultfrontpage', $defaultfrontpage); xarModVars::set('publications', 'defaultbackpage', $defaultbackpage); // Allow multilanguage only if the languages property is present sys::import('modules.dynamicdata.class.properties.registration'); $types = PropertyRegistration::Retrieve(); if (isset($types[30039])) { xarModVars::set('publications', 'multilanguage', $multilanguage); } else { xarModVars::set('publications', 'multilanguage', 0); } // Get the special pages. foreach (array('defaultpage', 'errorpage', 'notfoundpage', 'noprivspage') as $special_name) { unset($special_id); if (!xarVarFetch($special_name, 'id', $special_id, 0, XARVAR_NOT_REQUIRED)) { return; } xarModVars::set('publications', $special_name, $special_id); } if (xarDB::getType() == 'mysql') { if (!xarVarFetch('fulltext', 'isset', $fulltext, '', XARVAR_NOT_REQUIRED)) { return; } $oldval = xarModVars::get('publications', 'fulltextsearch'); $index = 'i_' . xarDB::getPrefix() . '_publications_fulltext'; if (empty($fulltext) && !empty($oldval)) { // Get database setup $dbconn = xarDB::getConn(); $xartable = xarDB::getTables(); $publicationstable = $xartable['publications']; // Drop fulltext index on publications table $query = "ALTER TABLE {$publicationstable} DROP INDEX {$index}"; $result =& $dbconn->Execute($query); if (!$result) { return; } xarModVars::set('publications', 'fulltextsearch', ''); } elseif (!empty($fulltext) && empty($oldval)) { $searchfields = array('title', 'description', 'summary', 'body1', 'notes'); // $searchfields = explode(',',$fulltext); // Get database setup $dbconn = xarDB::getConn(); $xartable = xarDB::getTables(); $publicationstable = $xartable['publications']; // Add fulltext index on publications table $query = "ALTER TABLE {$publicationstable} ADD FULLTEXT {$index} (" . join(', ', $searchfields) . ")"; $result =& $dbconn->Execute($query); if (!$result) { return; } xarModVars::set('publications', 'fulltextsearch', join(',', $searchfields)); } } // Module settings $data['module_settings'] = xarMod::apiFunc('base', 'admin', 'getmodulesettings', array('module' => 'publications')); $data['module_settings']->setFieldList('items_per_page, use_module_alias, module_alias_name, enable_short_urls, user_menu_link', 'use_module_icons'); $isvalid = $data['module_settings']->checkInput(); if (!$isvalid) { return xarTplModule('base', 'admin', 'modifyconfig', $data); } else { $itemid = $data['module_settings']->updateItem(); } // Pull the base category ids from the template and save them $picker = DataPropertyMaster::getProperty(array('name' => 'categorypicker')); $picker->checkInput('basecid'); } elseif ($data['tab'] == 'pubtypes') { // Get the publication type for this display and save the settings to it $pubtypeobject = DataObjectMaster::getObject(array('name' => 'publications_types')); $pubtypeobject->getItem(array('itemid' => $ptid)); $configsettings = $pubtypeobject->properties['configuration']->getValue(); $checkbox = DataPropertyMaster::getProperty(array('name' => 'checkbox')); $boxes = array('show_hitount', 'show_ratings', 'show_keywords', 'show_comments', 'show_prevnext', 'show_archives', 'show_publinks', 'show_pubcount', 'show_map', 'prevnextart', 'dot_transform', 'title_transform', 'show_categories', 'show_catcount', 'show_prevnext', 'allow_translations'); foreach ($boxes as $box) { $isvalid = $checkbox->checkInput($box); if ($isvalid) { $settings[$box] = $checkbox->value; } } // foreach ($configsettings as $key => $value) // if (!isset($settings[$key])) $settings[$key] = 0; $isvalid = true; // Get the default access rules $access = DataPropertyMaster::getProperty(array('name' => 'access')); $validprop = $access->checkInput("access_add"); $addaccess = $access->value; $isvalid = $isvalid && $validprop; $validprop = $access->checkInput("access_display"); $displayaccess = $access->value; $isvalid = $isvalid && $validprop; $validprop = $access->checkInput("access_modify"); $modifyaccess = $access->value; $isvalid = $isvalid && $validprop; $validprop = $access->checkInput("access_delete"); $deleteaccess = $access->value; $isvalid = $isvalid && $validprop; $allaccess = array('add' => $addaccess, 'display' => $displayaccess, 'modify' => $modifyaccess, 'delete' => $deleteaccess); $pubtypeobject->properties['access']->setValue(serialize($allaccess)); $pubtypeobject->properties['configuration']->setValue(serialize($settings)); $pubtypeobject->updateItem(array('itemid' => $ptid)); $pubtypes = xarModAPIFunc('publications', 'user', 'get_pubtypes'); if ($usealias) { xarModSetAlias($pubtypes[$ptid]['name'], 'publications'); } else { xarModDelAlias($pubtypes[$ptid]['name'], 'publications'); } } elseif ($data['tab'] == 'redirects') { $redirects = DataPropertyMaster::getProperty(array('name' => 'array')); $redirects->display_column_definition['value'] = array(array("From", "To"), array(2, 2), array("", ""), array("", "")); $isvalid = $redirects->checkInput("redirects"); xarModVars::set('publications', 'redirects', $redirects->value); } xarController::redirect(xarModURL('publications', 'admin', 'modifyconfig', array('ptid' => $ptid, 'tab' => $data['tab']))); return true; }