Source for file admin.templates.php

Documentation is available at admin.templates.php

  1. <?php
  2. /**
  3. @package Mambo
  4. @subpackage Templates
  5. @copyright  Refer to copyright.php
  6. @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
  7. @author Mambo Foundation Inc see README.php
  8. */ 
  9.  
  10. /** ensure this file is being included by a parent file */
  11. defined'_VALID_MOS' or die'Direct Access to this location is not allowed.' );
  12.  
  13. // ensure user has access to this function
  14. if (!$acl->acl_check'administration''manage''users'$GLOBALS['my']->usertype'components''com_templates' )) {
  15.     mosRedirect'index2.php'T_('You are not authorized to view this resource.') );
  16. }
  17.  
  18. require_once$mainframe->getPath'admin_html' ) );
  19. require_once$mosConfig_absolute_path .'/administrator/components/com_templates/admin.templates.class.php' );
  20.  
  21. $task trimstrtolowermosGetParam$_REQUEST"task""" ) ) );
  22. $cid mosGetParam$_REQUEST"cid"array(0) );
  23. $client mosGetParam$_REQUEST'client''' );
  24.  
  25. if (!is_array$cid )) {
  26.     $cid array(0);
  27. }
  28.  
  29. switch ($task{
  30.     case 'new':
  31.         mosRedirect 'index2.php?option=com_installer&element=template&client='$client );
  32.         break;
  33.  
  34.     case 'edit_source':
  35.         editTemplateSource$cid[0]$option$client );
  36.         break;
  37.  
  38.     case 'save_source':
  39.         saveTemplateSource$option$client );
  40.         break;
  41.  
  42.     case 'edit_css':
  43.         editTemplateCSS$cid[0]$option$client );
  44.         break;
  45.  
  46.     case 'save_css':
  47.         saveTemplateCSS$option$client );
  48.         break;
  49.  
  50.     case 'remove':
  51.         removeTemplate$cid[0]$option$client );
  52.         break;
  53.  
  54.     case 'publish':
  55.         defaultTemplate$cid[0]$option$client );
  56.         break;
  57.  
  58.     case 'default':
  59.         defaultTemplate$cid[0]$option$client );
  60.         break;
  61.  
  62.     case 'assign':
  63.         assignTemplate$cid[0]$option$client );
  64.         break;
  65.  
  66.     case 'save_assign':
  67.         saveTemplateAssign$option$client );
  68.         break;
  69.  
  70.     case 'cancel':
  71.         mosRedirect'index2.php?option='$option .'&client='$client );
  72.         break;
  73.  
  74.     case 'positions':
  75.         editPositions$option );
  76.         break;
  77.  
  78.     case 'save_positions':
  79.         savePositions$option );
  80.         break;
  81.  
  82.     default:
  83.         viewTemplates$option$client );
  84.         break;
  85. }
  86.  
  87.  
  88. /**
  89. * Compiles a list of installed, version 4.5+ templates
  90. *
  91. * Based on xml files found.  If no xml file found the template
  92. * is ignored
  93. */
  94. function viewTemplates$option$client {
  95.     global $database$mainframe;
  96.     global $mosConfig_absolute_path$mosConfig_list_limit;
  97.  
  98.     $limit $mainframe->getUserStateFromRequest'viewlistlimit''limit'$mosConfig_list_limit );
  99.     $limitstart $mainframe->getUserStateFromRequest"view{$option}limitstart"'limitstart');
  100.  
  101.     if ($client == 'admin'{
  102.         $templateBaseDir mosPathName$mosConfig_absolute_path '/administrator/templates' );
  103.     else {
  104.         $templateBaseDir mosPathName$mosConfig_absolute_path '/templates' );
  105.     }
  106.  
  107.     $rows array();
  108.     // Read the template dir to find templates
  109.     $templateDirs        mosReadDirectory($templateBaseDir);
  110.  
  111.     $id intval$client == 'admin' );
  112.  
  113.     if ($client=='admin'{
  114.         $database->setQuery"SELECT template FROM #__templates_menu WHERE client_id='1' AND menuid='0'" );
  115.     else {
  116.         $database->setQuery"SELECT template FROM #__templates_menu WHERE client_id='0' AND menuid='0'" );
  117.     }
  118.     $cur_template $database->loadResult();
  119.  
  120.     $rowid 0;
  121.     // Check that the directory contains an xml file
  122.     foreach($templateDirs as $templateDir{
  123.         $dirName mosPathName($templateBaseDir $templateDir);
  124.         $xmlFilesInDir mosReadDirectory($dirName,'.xml$');
  125.  
  126.         foreach($xmlFilesInDir as $xmlfile{
  127.             // Read the file to see if it's a valid template XML file
  128.             $parser =new mosXMLDescription($dirName.$xmlfile);
  129.             if ($parser->getType(!= 'template'continue;
  130.             $row new StdClass();
  131.             $row->id $rowid;
  132.             $row->directory $templateDir;
  133.  
  134.             $row->creationdate $parser->getCreationDate('template');
  135.             $row->name $parser->getName('template');
  136.             $row->author $parser->getAuthor('template');
  137.             $row->copyright $parser->getCopyright('template');
  138.             $row->authorEmail $parser->getAuthorEmail('template');
  139.             $row->authorUrl $parser->getAuthorUrl('template');
  140.             $row->version $parser->getVersion('template');
  141. /*
  142.             $element = &$xmlDoc->getElementsByPath('name', 1 );
  143.             $row->name = $element->getText();
  144.  
  145.             $element = &$xmlDoc->getElementsByPath('creationDate', 1);
  146.             $row->creationdate = $element ? $element->getText() : 'Unknown';
  147.  
  148.             $element = &$xmlDoc->getElementsByPath('author', 1);
  149.             $row->author = $element ? $element->getText() : 'Unknown';
  150.  
  151.             $element = &$xmlDoc->getElementsByPath('copyright', 1);
  152.             $row->copyright = $element ? $element->getText() : '';
  153.  
  154.             $element = &$xmlDoc->getElementsByPath('authorEmail', 1);
  155.             $row->authorEmail = $element ? $element->getText() : '';
  156.  
  157.             $element = &$xmlDoc->getElementsByPath('authorUrl', 1);
  158.             $row->authorUrl = $element ? $element->getText() : '';
  159.  
  160.             $element = &$xmlDoc->getElementsByPath('version', 1);
  161.             $row->version = $element ? $element->getText() : '';
  162. */
  163.             // Get info from db
  164.             if ($cur_template == $templateDir{
  165.                 $row->published    1;
  166.             else {
  167.                 $row->published 0;
  168.             }
  169.  
  170.             $row->checked_out 0;
  171.             $row->mosname strtolowerstr_replace' ''_'$row->name ) );
  172.  
  173.             // check if template is assigned
  174.             $database->setQuery"SELECT count(*) FROM #__templates_menu WHERE client_id='0' AND template='$row->directory' AND menuid<>'0');
  175.             $row->assigned $database->loadResult(0;
  176.  
  177.             $rows[$row;
  178.             $rowid++;
  179.         }
  180.     }
  181.  
  182.     require_once$GLOBALS['mosConfig_absolute_path''/administrator/includes/pageNavigation.php' );
  183.     $pageNav new mosPageNavcount$rows )$limitstart$limit );
  184.  
  185.     $rows array_slice$rows$pageNav->limitstart$pageNav->limit );
  186.  
  187.     HTML_templates::showTemplates$rows$pageNav$option$client );
  188. }
  189.  
  190.  
  191. /**
  192. * Publish, or make current, the selected template
  193. */
  194. function defaultTemplate$p_tname$option$client {
  195.     global $database;
  196.  
  197.     if ($client=='admin'{
  198.         $database->setQuery("DELETE FROM #__templates_menu WHERE client_id='1' AND menuid='0'");
  199.         $database->query();
  200.  
  201.         $database->setQuery("INSERT INTO #__templates_menu SET client_id='1', template='$p_tname', menuid='0'");
  202.         $database->query();
  203.     else {
  204.         $database->setQuery("DELETE FROM #__templates_menu WHERE client_id='0' AND menuid='0'");
  205.         $database->query();
  206.  
  207.         $database->setQuery("INSERT INTO #__templates_menu SET client_id='0', template='$p_tname', menuid='0'");
  208.         $database->query();
  209.  
  210.         $_SESSION['cur_template'$p_tname;
  211.     }
  212.  
  213.     mosRedirect('index2.php?option='$option .'&client='$client);
  214. }
  215.  
  216. /**
  217. * Remove the selected template
  218. */
  219. function removeTemplate$cid$option$client {
  220.     global $database;
  221.  
  222.     $client_id $client=='admin' 0;
  223.  
  224.     $database->setQuery("SELECT template FROM #__templates_menu WHERE client_id='$client_id' AND menuid='0'");
  225.     $cur_template $database->loadResult();
  226.  
  227.     if ($cur_template == $cid{
  228.         echo "<script>alert('".T_('You can not delete template in use.')."'); window.history.go(-1); </script>\n";
  229.         exit();
  230.     }
  231.  
  232.     // Un-assign
  233.  
  234.     $database->setQuery"DELETE FROM #__templates_menu WHERE template='$cid' AND client_id='$client_id' AND menuid<>'0');
  235.     $database->query();
  236.  
  237.     mosRedirect'index2.php?option=com_installer&element=template&client='$client .'&task=remove&cid[]='$cid );
  238. }
  239.  
  240. function editTemplateSource$p_tname$option$client {
  241.     global $mosConfig_absolute_path;
  242.  
  243.     if $client == 'admin' {
  244.         $file $mosConfig_absolute_path .'/administrator/templates/'$p_tname .'/index.php';
  245.     else {
  246.         $file $mosConfig_absolute_path .'/templates/'$p_tname .'/index.php';
  247.     }
  248.  
  249.     if $fp fopen$file'r' ) ) {
  250.         $content fread$fpfilesize$file ) );
  251.         $content htmlspecialchars$content );
  252.  
  253.         HTML_templates::editTemplateSource$p_tname$content$option$client );
  254.     else {
  255.         mosRedirect'index2.php?option='$option .'&client='$clientsprintf(T_('Operation Failed: Could not open %s' )$file) );
  256.     }
  257. }
  258.  
  259.  
  260. function saveTemplateSource$option$client {
  261.     global $mosConfig_absolute_path;
  262.  
  263.     $template mosGetParam$_POST'template''' );
  264.     $filecontent mosGetParam$_POST'filecontent'''_MOS_ALLOWHTML );
  265.  
  266.     if !$template {
  267.         mosRedirect'index2.php?option='$option .'&client='$clientT_('Operation failed: No template specified.') );
  268.     }
  269.     if !$filecontent {
  270.         mosRedirect'index2.php?option='$option .'&client='$clientT_('Operation failed: Content empty.') );
  271.     }
  272.  
  273.     if $client == 'admin' {
  274.         $file $mosConfig_absolute_path .'/administrator/templates/'$template .'/index.php';
  275.     else {
  276.         $file $mosConfig_absolute_path .'/templates/'$template .'/index.php';
  277.     }
  278.  
  279.     $enable_write mosGetParam($_POST,'enable_write',0);
  280.     $oldperms fileperms($file);
  281.     if ($enable_write@chmod($file$oldperms 0222);
  282.  
  283.     clearstatcache();
  284.     if is_writable$file == false {
  285.         mosRedirect'index2.php?option='$option sprintf(T_('Operation failed: %s is not writable.')$file) );
  286.     }
  287.  
  288.     if $fp fopen ($file'w' ) ) {
  289.         fputs$fpstripslashes$filecontent )strlen$filecontent ) );
  290.         fclose$fp );
  291.         if ($enable_write{
  292.             @chmod($file$oldperms);
  293.         else {
  294.             if (mosGetParam($_POST,'disable_write',0))
  295.                 @chmod($file$oldperms 0777555);
  296.         // if
  297.         mosRedirect'index2.php?option='$option .'&client='$client );
  298.     else {
  299.         if ($enable_write@chmod($file$oldperms);
  300.         mosRedirect'index2.php?option='$option .'&client='$clientT_('Operation failed: Failed to open file for writing.') );
  301.     }
  302.  
  303. }
  304.  
  305. function editTemplateCSS$p_tname$option$client {
  306.     global $mosConfig_absolute_path;
  307.  
  308.     if $client == 'admin' {
  309.         $file $mosConfig_absolute_path .'/administrator/templates/'$p_tname .'/css/template_css.css';
  310.     else {
  311.         $file $mosConfig_absolute_path .'/templates/'$p_tname .'/css/template_css.css';
  312.     }
  313.  
  314.     if ($fp fopen$file'r' )) {
  315.         $content fread$fpfilesize$file ) );
  316.         $content htmlspecialchars$content );
  317.  
  318.         HTML_templates::editCSSSource$p_tname$content$option$client );
  319.     else {
  320.         mosRedirect'index2.php?option='$option .'&client='$clientsprintf(T_('Operation Failed: Could not open %s' )$file) );
  321.     }
  322. }
  323.  
  324.  
  325. function saveTemplateCSS$option$client {
  326.     global $mosConfig_absolute_path;
  327.     $template trimmosGetParam$_POST'template''' ) );
  328.     $filecontent mosGetParam$_POST'filecontent'''_MOS_ALLOWHTML );
  329.  
  330.     if !$template {
  331.         mosRedirect'index2.php?option='$option .'&client='$clientT_('Operation failed: No template specified.') );
  332.     }
  333.  
  334.     if !$filecontent {
  335.         mosRedirect'index2.php?option='$option .'&client='$clientT_('Operation failed: Content empty.') );
  336.     }
  337.  
  338.     if $client == 'admin' {
  339.         $file $mosConfig_absolute_path .'/administrator/templates/'$template .'/css/template_css.css';
  340.     else {
  341.         $file $mosConfig_absolute_path .'/templates/'$template .'/css/template_css.css';
  342.     }
  343.  
  344.     $enable_write mosGetParam($_POST,'enable_write',0);
  345.     $oldperms fileperms($file);
  346.     if ($enable_write@chmod($file$oldperms 0222);
  347.  
  348.     clearstatcache();
  349.     if is_writable$file == false {
  350.         mosRedirect'index2.php?option='$option .'&client='$clientT_('Operation failed: The file is not writable.') );
  351.     }
  352.  
  353.     if ($fp fopen ($file'w')) {
  354.         fputs$fpstripslashes$filecontent ) );
  355.         fclose$fp );
  356.         if ($enable_write{
  357.             @chmod($file$oldperms);
  358.         else {
  359.             if (mosGetParam($_POST,'disable_write',0))
  360.                 @chmod($file$oldperms 0777555);
  361.         // if
  362.         mosRedirect'index2.php?option='$option );
  363.     else {
  364.         if ($enable_write@chmod($file$oldperms);
  365.         mosRedirect'index2.php?option='$option .'&client='$clientT_('Operation failed: Failed to open file for writing.') );
  366.     }
  367.  
  368. }
  369.  
  370.  
  371. function assignTemplate$p_tname$option$client {
  372.     global $database;
  373.  
  374.     // get selected pages for $menulist
  375.     if $p_tname {
  376.         $database->setQuery"SELECT menuid AS value FROM #__templates_menu WHERE client_id='0' AND template='$p_tname');
  377.         $lookup $database->loadObjectList();
  378.     }
  379.  
  380.     // build the html select list
  381.     $menulist mosAdminMenus::MenuLinks$lookup0);
  382.  
  383.     HTML_templates::assignTemplate$p_tname$menulist$option$client );
  384. }
  385.  
  386.  
  387. function saveTemplateAssign$option$client {
  388.     global $database;
  389.  
  390.     $menus mosGetParam$_POST'selections'array() );
  391.     $template mosGetParam$_POST'template''' );
  392.  
  393.     $database->setQuery"DELETE FROM #__templates_menu WHERE client_id='0' AND template='$template' AND menuid<>'0');
  394.     $database->query();
  395.  
  396.     if !in_array''$menus ) ) {
  397.         foreach $menus as $menuid ){
  398.             // If 'None' is not in array
  399.             if $menuid <> -999 {
  400.                 // check if there is already a template assigned to this menu item
  401.                 $database->setQuery"DELETE FROM #__templates_menu WHERE client_id='0' AND menuid='$menuid');
  402.                 $database->query();
  403.                 $database->setQuery"INSERT INTO #__templates_menu SET client_id='0', template='$template', menuid='$menuid');
  404.                 $database->query();
  405.             }
  406.         }
  407.     }
  408.  
  409.     mosRedirect'index2.php?option='$option .'&client='$client );
  410. }
  411.  
  412.  
  413. /**
  414. */
  415. function editPositions$option {
  416.     global $database;
  417.  
  418.     $database->setQuery"SELECT * FROM #__template_positions" );
  419.     $positions $database->loadObjectList();
  420.  
  421.     HTML_templates::editPositions$positions$option );
  422. }
  423.  
  424. /**
  425. */
  426. function savePositions$option {
  427.     global $database;
  428.  
  429.     $positions mosGetParam$_POST'position'array() );
  430.     $descriptions mosGetParam$_POST'description'array() );
  431.  
  432.     $query 'DELETE FROM #__template_positions';
  433.     $database->setQuery$query );
  434.     $database->query();
  435.  
  436.     foreach ($positions as $id=>$position{
  437.         $position trim$database->getEscaped$position ) );
  438.         $description mosGetParam$descriptions$id'' );
  439.         if ($position != ''{
  440.             $id intval$id );
  441.             $query "INSERT INTO #__template_positions"
  442.                 . "\nVALUES ($id,'$position','$description')";
  443.             $database->setQuery$query );
  444.             $database->query();
  445.         }
  446.     }
  447.     mosRedirect'index2.php?option='$option .'&task=positions'T_('Positions saved') );
  448. }
  449. ?>

Documentation generated on Mon, 05 May 2008 16:16:24 +0400 by phpDocumentor 1.4.0