getPath( 'admin_html' ) );
require_once($mosConfig_absolute_path.'/components/com_content/content.class.php');
$id = mosGetParam( $_REQUEST, 'id', '' );
$cid = mosGetParam( $_POST, 'cid', array(0) );
if (!is_array( $cid )) {
$cid = array(0);
}
switch ( $task ) {
case 'cancel':
cancel( $option );
break;
case 'new':
edit( 0, $option );
break;
case 'edit':
edit( $id, $option );
break;
case 'editA':
edit( $cid[0], $option );
break;
case 'go2menu':
case 'go2menuitem':
case 'resethits':
case 'menulink':
case 'save':
case 'apply':
save( $option, $task );
break;
case 'remove':
trash( $cid, $option );
break;
case 'publish':
changeState( $cid, 1, $option );
break;
case 'unpublish':
changeState( $cid, 0, $option );
break;
case 'accesspublic':
changeAccess( $cid[0], 0, $option );
break;
case 'accessregistered':
changeAccess( $cid[0], 1, $option );
break;
case 'accessspecial':
changeAccess( $cid[0], 2, $option );
break;
case 'saveorder':
saveOrder( $cid );
break;
case 'toggle_frontpage':
toggleFrontPage( $cid, $option );
break;
default:
view( $option );
break;
}
/**
* Compiles a list of installed or defined modules
* @param database A database connector object
*/
function view( $option ) {
global $database, $mainframe, $mosConfig_list_limit;
$filter_authorid = $mainframe->getUserStateFromRequest( "filter_authorid{$option}", 'filter_authorid', 0 );
$order = $mainframe->getUserStateFromRequest( "zorder", 'zorder', 'c.ordering DESC' );
$limit = $mainframe->getUserStateFromRequest( "viewlistlimit", 'limit', $mosConfig_list_limit );
$limitstart = $mainframe->getUserStateFromRequest( "view{$option}limitstart", 'limitstart', 0 );
$search = $mainframe->getUserStateFromRequest( "search{$option}", 'search', '' );
$search = $database->getEscaped( trim( strtolower( $search ) ) );
// used by filter
if ( $search ) {
$search_query = "\n AND ( LOWER( c.title ) LIKE '%$search%' OR LOWER( c.title_alias ) LIKE '%$search%' )";
} else {
$search_query = '';
}
$filter = '';
if ( $filter_authorid > 0 ) {
$filter = "\n AND c.created_by = '$filter_authorid'";
}
// get the total number of records
$query = "SELECT count(*)"
. "\n FROM #__content AS c"
. "\n WHERE c.sectionid = '0'"
. "\n AND c.catid = '0'"
. "\n AND c.state <> '-2'"
. $filter
;
$database->setQuery( $query );
$total = $database->loadResult();
require_once( $GLOBALS['mosConfig_absolute_path'] . '/administrator/includes/pageNavigation.php' );
$pageNav = new mosPageNav( $total, $limitstart, $limit );
$query = "SELECT c.*, g.name AS groupname, u.name AS editor, z.name AS creator, f.content_id AS frontpage"
. "\n FROM #__content AS c"
. "\n LEFT JOIN #__groups AS g ON g.id = c.access"
. "\n LEFT JOIN #__users AS u ON u.id = c.checked_out"
. "\n LEFT JOIN #__users AS z ON z.id = c.created_by"
. "\n LEFT JOIN #__content_frontpage AS f ON f.content_id = c.id"
. "\n WHERE c.sectionid = '0'"
. "\n AND c.catid = '0'"
. "\n AND c.state <> '-2'"
. $search_query
. $filter
. "\n ORDER BY ". $order
. "\n LIMIT $pageNav->limitstart,$pageNav->limit"
;
$database->setQuery( $query );
$rows = $database->loadObjectList();
if ($database->getErrorNum()) {
echo $database->stderr();
return false;
}
$count = count( $rows );
for( $i = 0; $i < $count; $i++ ) {
$query = "SELECT COUNT( id )"
. "\n FROM #__menu"
. "\n WHERE componentid = ". $rows[$i]->id
. "\n AND type = 'content_typed'"
. "\n AND published <> '-2'"
;
$database->setQuery( $query );
$rows[$i]->links = $database->loadResult();
}
$ordering[] = mosHTML::makeOption( 'c.ordering ASC', T_('Ordering asc') );
$ordering[] = mosHTML::makeOption( 'c.ordering DESC', T_('Ordering desc') );
$ordering[] = mosHTML::makeOption( 'c.id ASC', T_('ID asc') );
$ordering[] = mosHTML::makeOption( 'c.id DESC', T_('ID desc') );
$ordering[] = mosHTML::makeOption( 'c.title ASC', T_('Title asc') );
$ordering[] = mosHTML::makeOption( 'c.title DESC', T_('Title desc') );
$ordering[] = mosHTML::makeOption( 'c.created ASC', T_('Date asc') );
$ordering[] = mosHTML::makeOption( 'c.created DESC', T_('Date desc') );
$ordering[] = mosHTML::makeOption( 'z.name ASC', T_('Author asc') );
$ordering[] = mosHTML::makeOption( 'z.name DESC', T_('Author desc') );
$ordering[] = mosHTML::makeOption( 'c.state ASC', T_('Published asc') );
$ordering[] = mosHTML::makeOption( 'c.state DESC', T_('Published desc') );
$ordering[] = mosHTML::makeOption( 'c.access ASC', T_('Access asc') );
$ordering[] = mosHTML::makeOption( 'c.access DESC', T_('Access desc') );
$javascript = 'onchange="document.adminForm.submit();"';
$lists['order'] = mosHTML::selectList( $ordering, 'zorder', 'class="inputbox" size="1"'. $javascript, 'value', 'text', $order );
// get list of Authors for dropdown filter
$query = "SELECT c.created_by AS value, u.name AS text"
. "\n FROM #__content AS c"
. "\n LEFT JOIN #__users AS u ON u.id = c.created_by"
. "\n WHERE c.sectionid = 0"
. "\n GROUP BY u.name"
. "\n ORDER BY u.name"
;
$authors[] = mosHTML::makeOption( '0', T_('- All Authors -') );
$database->setQuery( $query );
$_dbAuthors = $database->loadObjectList();
if (is_array($_dbAuthors)){
$authors = array_merge( $authors, $_dbAuthors );
}
$lists['authorid'] = mosHTML::selectList( $authors, 'filter_authorid', 'class="inputbox" size="1" onchange="document.adminForm.submit( );"', 'value', 'text', $filter_authorid );
HTML_typedcontent::showContent( $rows, $pageNav, $option, $search, $lists );
}
/**
* Compiles information to add or edit content
* @param database A database connector object
* @param string The name of the category section
* @param integer The unique id of the category to edit (0 if new)
*/
function edit( $uid, $option ) {
global $database, $my, $mainframe;
global $mosConfig_absolute_path, $mosConfig_live_site;
$row = new mosContent( $database );
// fail if checked out not by 'me'
if ($row->checked_out && $row->checked_out <> $my->id) {
echo "\n";
exit(0);
}
$lists = array();
if ($uid) {
// load the row from the db table
$row->load( $uid );
$row->checkout( $my->id );
if (trim( $row->images )) {
$row->images = explode( "\n", $row->images );
} else {
$row->images = array();
}
if (trim( $row->publish_down ) == "0000-00-00 00:00:00") {
$row->publish_down = "Never";
}
// @RawSQLUse, trivial_implementation, SELECT
$query = "SELECT name from #__users"
. "\n WHERE id=$row->created_by"
;
$database->setQuery( $query );
$row->creator = $database->loadResult();
// @RawSQLUse, trivial_implementation, SELECT
$query = "SELECT name from #__users"
. "\n WHERE id=$row->modified_by"
;
$database->setQuery( $query );
$row->modifier = $database->loadResult();
// @RawSQLUse, trivial_implementation, SELECT
$query = "SELECT content_id from #__content_frontpage"
. "\n WHERE content_id=$row->id"
;
$database->setQuery( $query );
$row->frontpage = $database->loadResult();
// get list of links to this item
$_and = "\n AND componentid = ". $row->id;
$menus = mosAdminMenus::Links2Menu( 'content_typed', $_and );
} else {
// initialise values for a new item
$row->version = 0;
$row->state = 1;
$row->images = array();
$row->publish_up = date( "Y-m-d", time() );
$row->publish_down = "Never";
$row->sectionid = 0;
$row->catid = 0;
$row->creator = '';
$row->modifier = '';
$row->ordering = 0;
$row->frontpage = 0;
$menus = array();
}
// calls function to read image from directory
$pathA = $mosConfig_absolute_path .'/images/stories';
$pathL = $mosConfig_live_site .'/images/stories';
$images = array();
$folders = array();
$folders[] = mosHTML::makeOption( '/' );
mosAdminMenus::ReadImages( $pathA, '/', $folders, $images );
// list of folders in images/stories/
$lists['folders'] = mosAdminMenus::GetImageFolders( $folders, $pathL );
// list of images in specfic folder in images/stories/
$lists['imagefiles'] = mosAdminMenus::GetImages( $images, $pathL );
// list of saved images
$lists['imagelist'] = mosAdminMenus::GetSavedImages( $row, $pathL );
// build list of users
$active = ( intval( $row->created_by ) ? intval( $row->created_by ) : $my->id );
$lists['created_by'] = mosAdminMenus::UserSelect( 'created_by', $active );
// build the html select list for the group access
$lists['access'] = mosAdminMenus::Access( $row );
// build the html select list for menu selection
$lists['menuselect'] = mosAdminMenus::MenuSelect( );
// build the select list for the image positions
$lists['_align'] = mosAdminMenus::Positions( '_align' );
// build the select list for the image caption alignment
$lists['_caption_align'] = mosAdminMenus::Positions( '_caption_align' );
// build the select list for the image caption position
$pos[] = mosHTML::makeOption( 'bottom', T_('Bottom') );
$pos[] = mosHTML::makeOption( 'top', T_('Top') );
$lists['_caption_position'] = mosHTML::selectList( $pos, '_caption_position', 'class="inputbox" size="1"', 'value', 'text' );
// get params definitions
$params =& new mosAdminParameters( $row->attribs, $mainframe->getPath( 'com_xml', 'com_typedcontent' ), 'component' );
HTML_typedcontent::edit( $row, $images, $lists, $params, $option, $menus );
}
/**
* Saves the typed content item
*/
function save( $option, $task ) {
global $database, $my, $mainframe;
$menu = mosGetParam( $_POST, 'menu', 'mainmenu' );
$menuid = mosGetParam( $_POST, 'menuid', 0 );
$row = new mosContent( $database );
if (!$row->bind( $_POST )) {
echo "\n";
exit();
}
if ( $row->id ) {
$row->modified = date( 'Y-m-d H:i:s' );
$row->modified_by = $my->id;
} else {
$row->created = date( 'Y-m-d H:i:s' );
$row->created_by = $my->id;
}
if (trim( $row->publish_down ) == 'Never') {
$row->publish_down = '0000-00-00 00:00:00';
}
// Save Parameters
$params = mosGetParam( $_POST, 'params', '' );
if (is_array( $params )) {
$txt = array();
foreach ( $params as $k=>$v) {
$txt[] = "$k=$v";
}
$row->attribs = implode( "\n", $txt );
}
// code cleaner for xhtml transitional compliance
$row->introtext = str_replace( '
', '
', $row->introtext );
$row->state = mosGetParam( $_REQUEST, 'published', 0 );
if (!$row->check()) {
echo "\n";
exit();
}
if (!$row->store()) {
echo "\n";
exit();
}
// manage frontpage items
require_once( $mainframe->getPath( 'class', 'com_frontpage' ) );
$fp = new mosFrontPage( $database );
if (mosGetParam( $_REQUEST, 'frontpage', 0 )) {
// toggles go to first place
if (!$fp->load( $row->id )) {
// new entry
// @RawSQLUse, trivial_implementation, INSERT
$database->setQuery( "INSERT INTO #__content_frontpage VALUES ('$row->id','1')" );
if (!$database->query()) {
echo "\n";
exit();
}
$fp->ordering = 1;
}
} else {
// no frontpage mask
if (!$fp->delete( $row->id )) {
$msg .= $fp->stderr();
}
$fp->ordering = 0;
}
$fp->updateOrder();
$row->checkin();
switch ( $task ) {
case 'go2menu':
mosRedirect( 'index2.php?option=com_menus&menutype='. $menu );
break;
case 'go2menuitem':
mosRedirect( 'index2.php?option=com_menus&menutype='. $menu .'&task=edit&hidemainmenu=1&id='. $menuid );
break;
case 'menulink':
menuLink( $option, $row->id );
break;
case 'resethits':
resethits( $option, $row->id );
break;
case 'save':
$msg = T_('Typed Content Item saved');
mosRedirect( 'index2.php?option='. $option, $msg );
break;
case 'apply':
default:
$msg = T_('Changes to Typed Content Item saved');
mosRedirect( 'index2.php?option='. $option .'&task=edit&hidemainmenu=1&id='. $row->id, $msg );
break;
}
}
/**
* Trashes the typed content item
*/
function trash( &$cid, $option ) {
global $database, $mainframe;
$total = count( $cid );
if ( $total < 1) {
echo "\n";
exit;
}
$state = '-2';
$ordering = '0';
//seperate contentids
$cids = implode( ',', $cid );
// @RawSQLUse, trivial_implementation, UPDATE
$query = "UPDATE #__content SET state = '". $state ."', ordering = '". $ordering ."'"
. "\n WHERE id IN ( ". $cids ." )"
;
$database->setQuery( $query );
if ( !$database->query() ) {
echo "\n";
exit();
}
$msg = sprintf(Tn_('%d Item sent to the Trash', '%d Items sent to the Trash', $total), $total) ."";
mosRedirect( 'index2.php?option='. $option, $msg );
}
/**
* Changes the state of one or more content pages
* @param string The name of the category section
* @param integer A unique category id (passed from an edit form)
* @param array An array of unique category id numbers
* @param integer 0 if unpublishing, 1 if publishing
* @param string The name of the current user
*/
function changeState( $cid=null, $state=0, $option ) {
global $database, $my;
if (count( $cid ) < 1) {
$action = $state == 1 ? T_('publish') : ($state == -1 ? T_('archive') : T_('unpublish'));
echo "\n";
exit;
}
$total = count ( $cid );
$cids = implode( ',', $cid );
$database->setQuery( "UPDATE #__content SET state='$state'"
. "\nWHERE id IN ($cids) AND (checked_out=0 OR (checked_out='$my->id'))"
);
if (!$database->query()) {
echo "\n";
exit();
}
if (count( $cid ) == 1) {
$row = new mosContent( $database );
$row->checkin( $cid[0] );
}
if ( $state == "1" ) {
$msg = $total ."";
$msg = sprintf(Tn_('%d Item successfully Published', '%d Items successfully Published', $total), $total);
} else if ( $state == "0" ) {
$msg = sprintf(Tn_('%d Item successfully Unpublished', '%d Items successfully Unpublished', $total), $total);
}
mosRedirect( 'index2.php?option='. $option .'&msg='. $msg );
}
/**
* changes the access level of a record
* @param integer The increment to reorder by
*/
function changeAccess( $id, $access, $option ) {
global $database;
$row = new mosContent( $database );
$row->load( $id );
$row->access = $access;
if ( !$row->check() ) {
return $row->getError();
}
if ( !$row->store() ) {
return $row->getError();
}
mosRedirect( 'index2.php?option='. $option );
}
/**
* Function to reset Hit count of a content item
*/
function resethits( $option, $id ) {
global $database;
$row = new mosContent($database);
$row->Load( $id );
$row->hits = "0";
$row->store();
$row->checkin();
$msg = T_('Successfully Reset Hit');
mosRedirect( 'index2.php?option='. $option .'&task=edit&hidemainmenu=1&id='. $row->id, $msg );
}
/**
* Cancels an edit operation
* @param database A database connector object
*/
function cancel( $option ) {
global $database;
$row = new mosContent( $database );
$row->bind( $_POST );
// sanitize
$row->id = intval($row->id);
$row->checkin();
mosRedirect( 'index2.php?option='. $option );
}
function menuLink( $option, $id ) {
global $database;
$menu = mosGetParam( $_POST, 'menuselect', '' );
$link = mosGetParam( $_POST, 'link_name', '' );
$row = new mosMenu( $database );
$row->menutype = $menu;
$row->name = $link;
$row->type = 'content_typed';
$row->published = 1;
$row->componentid = $id;
$row->link = 'index.php?option=com_content&task=view&id='. $id;
$row->ordering = 9999;
if (!$row->check()) {
echo "\n";
exit();
}
if (!$row->store()) {
echo "\n";
exit();
}
$row->checkin();
$row->updateOrder( "menutype='$row->menutype' AND parent='$row->parent'" );
$msg =sprintf(T_('%s (Link - Static Content) in menu: %s successfully created'),$link , $menu);
mosRedirect( 'index2.php?option='. $option .'&task=edit&hidemainmenu=1&id='. $id, $msg );
}
function go2menu() {
global $database;
// checkin content
$row = new mosContent( $database );
$row->bind( $_POST );
$row->checkin();
$menu = mosGetParam( $_POST, 'menu', 'mainmenu' );
mosRedirect( 'index2.php?option=com_menus&menutype='. $menu );
}
function go2menuitem() {
global $database;
// checkin content
$row = new mosContent( $database );
$row->bind( $_POST );
$row->checkin();
$menu = mosGetParam( $_POST, 'menu', 'mainmenu' );
$id = mosGetParam( $_POST, 'menuid', 0 );
mosRedirect( 'index2.php?option=com_menus&menutype='. $menu .'&task=edit&hidemainmenu=1&id='. $id );
}
function saveOrder( &$cid ) {
global $database;
$order = mosGetParam( $_POST, 'order', array(0) );
$row = new mosMenu( $database );
$categories = array();
// update ordering values
foreach ($cid as $i=>$ciditem) {
$row->load( $ciditem );
if ($row->ordering != $order[$i]) {
$row->ordering = $order[$i];
if (!$row->store()) {
echo "\n";
exit();
}
// remember to updateOrder this group
$categories[$row->catid] = $row->id;
}
}
// execute updateOrder for each group
foreach ($categories as $catid=>$rowid) {
$row->updateOrder("catid = $catid AND state >= 0");
} // foreach
$msg = T_('New ordering saved');
mosRedirect( 'index2.php?option=com_typedcontent', $msg );
} // saveOrder
/**
* Changes the state of one or more content pages
* @param string The name of the category section
* @param integer A unique category id (passed from an edit form)
* @param array An array of unique category id numbers
* @param integer 0 if unpublishing, 1 if publishing
* @param string The name of the current user
*/
function toggleFrontPage( $cid, $option ) {
global $database, $my, $mainframe;
if (count( $cid ) < 1) {
echo "\n";
exit;
}
$msg = '';
require_once( $mainframe->getPath( 'class', 'com_frontpage' ) );
$fp = new mosFrontPage( $database );
foreach ($cid as $id) {
// toggles go to first place
if ($fp->load( $id )) {
if (!$fp->delete( $id )) {
$msg .= $fp->stderr();
}
$fp->ordering = 0;
} else {
// new entry
// @RawSQLUse, trivial_implementation, INSERT
$database->setQuery( "INSERT INTO #__content_frontpage VALUES ('$id','0')" );
if (!$database->query()) {
echo "\n";
exit();
}
$fp->ordering = 0;
}
$fp->updateOrder();
}
mosRedirect( 'index2.php?option=com_typedcontent' );
} //toggleFrontPage
?>