| 
      1
     | 
    
      <?php
 
     | 
  
  
    | 
      2
     | 
    
      /**
 
     | 
  
  
    | 
      3
     | 
    
       *
 
     | 
  
  
    | 
      4
     | 
    
       * @category        module
 
     | 
  
  
    | 
      5
     | 
    
       * @package         droplet
 
     | 
  
  
    | 
      6
     | 
    
       * @author          Ruud Eisinga (Ruud) John (PCWacht)
 
     | 
  
  
    | 
      7
     | 
    
       * @author          WebsiteBaker Project
 
     | 
  
  
    | 
      8
     | 
    
       * @copyright       2009-2013, WebsiteBaker Org. e.V.
 
     | 
  
  
    | 
      9
     | 
    
       * @link            http://www.websitebaker.org/
 
     | 
  
  
    | 
      10
     | 
    
       * @license         http://www.gnu.org/licenses/gpl.html
 
     | 
  
  
    | 
      11
     | 
    
       * @platform        WebsiteBaker 2.8.x
 
     | 
  
  
    | 
      12
     | 
    
       * @requirements    PHP 5.2.2 and higher
 
     | 
  
  
    | 
      13
     | 
    
       * @version         $Id: droplets.functions.php 2070 2014-01-03 01:21:42Z darkviper $
 
     | 
  
  
    | 
      14
     | 
    
       * @filesource      $HeadURL: svn://isteam.dynxs.de/wb-archiv/branches/2.8.x/wb/modules/droplets/droplets.functions.php $
 
     | 
  
  
    | 
      15
     | 
    
       * @lastmodified    $Date: 2014-01-03 02:21:42 +0100 (Fri, 03 Jan 2014) $
 
     | 
  
  
    | 
      16
     | 
    
       *
 
     | 
  
  
    | 
      17
     | 
    
       */
 
     | 
  
  
    | 
      18
     | 
    
      /* -------------------------------------------------------- */
 
     | 
  
  
    | 
      19
     | 
    
      // Must include code to stop this file being accessed directly
 
     | 
  
  
    | 
      20
     | 
    
      if(!defined('WB_PATH')) {
     | 
  
  
    | 
      21
     | 
    
      
 
     | 
  
  
    | 
      22
     | 
    
      	require_once(dirname(dirname(dirname(__FILE__))).'/framework/globalExceptionHandler.php');
 
     | 
  
  
    | 
      23
     | 
    
      	throw new IllegalFileException();
 
     | 
  
  
    | 
      24
     | 
    
      }
 
     | 
  
  
    | 
      25
     | 
    
      /* -------------------------------------------------------- */
 
     | 
  
  
    | 
      26
     | 
    
      
 
     | 
  
  
    | 
      27
     | 
    
      function prepareDropletToFile($aDroplet) {
     | 
  
  
    | 
      28
     | 
    
      	$retVal = '';
 
     | 
  
  
    | 
      29
     | 
    
      	$sDescription = '//:'.(($aDroplet['description']!='') ? $aDroplet['description']: 'Desription');
 
     | 
  
  
    | 
      30
     | 
    
      	$sComments = '';
 
     | 
  
  
    | 
      31
     | 
    
      	$aComments = explode("\n",$aDroplet['comments']);
     | 
  
  
    | 
      32
     | 
    
      	$sCode = '';
 
     | 
  
  
    | 
      33
     | 
    
      	$aCode = explode("\n",$aDroplet['code']);
     | 
  
  
    | 
      34
     | 
    
      	if( (sizeof($aComments)) ){
     | 
  
  
    | 
      35
     | 
    
      		foreach($aComments AS $isComment) {
     | 
  
  
    | 
      36
     | 
    
      			$sComments .= '//:'.$isComment;
 
     | 
  
  
    | 
      37
     | 
    
      		}
 
     | 
  
  
    | 
      38
     | 
    
      	} else {
     | 
  
  
    | 
      39
     | 
    
      		$sComments .= '//:use [['.$aDroplet['name'].']]';
 
     | 
  
  
    | 
      40
     | 
    
      	}
 
     | 
  
  
    | 
      41
     | 
    
      	if( (sizeof($aCode)) ){
     | 
  
  
    | 
      42
     | 
    
      		foreach($aCode AS $isCode) {
     | 
  
  
    | 
      43
     | 
    
      			$sCode .= $isCode;
 
     | 
  
  
    | 
      44
     | 
    
      		}
 
     | 
  
  
    | 
      45
     | 
    
      	}
 
     | 
  
  
    | 
      46
     | 
    
       
 
     | 
  
  
    | 
      47
     | 
    
      	$retVal = $sDescription."\n".$sComments."\n".$sCode;
 
     | 
  
  
    | 
      48
     | 
    
      	return $retVal;
 
     | 
  
  
    | 
      49
     | 
    
      }
 
     | 
  
  
    | 
      50
     | 
    
      // 
 
     | 
  
  
    | 
      51
     | 
    
      function backupDropletFromDatabase($sTmpDir) {
     | 
  
  
    | 
      52
     | 
    
      	$retVal = '';
 
     | 
  
  
    | 
      53
     | 
    
      	$database=WbDatabase::getInstance();
 
     | 
  
  
    | 
      54
     | 
    
      	$sql = 'SELECT `name`,`description`,`comments`,`code`  FROM `'.$database->TablePrefix.'mod_droplets` '
 
     | 
  
  
    | 
      55
     | 
    
      	     . 'ORDER BY `modified_when` DESC';
 
     | 
  
  
    | 
      56
     | 
    
      	if( $oRes = $database->query($sql) ) {
     | 
  
  
    | 
      57
     | 
    
      		while($aDroplet = $oRes->fetchRow(MYSQL_ASSOC)) {
     | 
  
  
    | 
      58
     | 
    
      			$sData = prepareDropletToFile($aDroplet);
 
     | 
  
  
    | 
      59
     | 
    
      			$sFileName = $sTmpDir.$aDroplet['name'].'.php';
 
     | 
  
  
    | 
      60
     | 
    
      			if(file_put_contents($sFileName,$sData)) {
     | 
  
  
    | 
      61
     | 
    
      				$retVal .= $sFileName.',';
 
     | 
  
  
    | 
      62
     | 
    
      			}
 
     | 
  
  
    | 
      63
     | 
    
      		}
 
     | 
  
  
    | 
      64
     | 
    
      	}
 
     | 
  
  
    | 
      65
     | 
    
      	return $retVal;
 
     | 
  
  
    | 
      66
     | 
    
      }
 
     | 
  
  
    | 
      67
     | 
    
      
 
     | 
  
  
    | 
      68
     | 
    
      
 
     | 
  
  
    | 
      69
     | 
    
      function insertDropletFile($aDropletFiles,&$msg,$bOverwriteDroplets,$admin)
 
     | 
  
  
    | 
      70
     | 
    
      {
     | 
  
  
    | 
      71
     | 
    
      	$OK  = ' <span style="color:#006400; font-weight:bold;">OK</span> ';
 
     | 
  
  
    | 
      72
     | 
    
      	$FAIL = ' <span style="color:#ff0000; font-weight:bold;">FAILED</span> ';
 
     | 
  
  
    | 
      73
     | 
    
      	$oDb = WbDatabase::getInstance();
 
     | 
  
  
    | 
      74
     | 
    
      	foreach ($aDropletFiles as $sDropletFile) {
     | 
  
  
    | 
      75
     | 
    
      		$msgSql = '';
 
     | 
  
  
    | 
      76
     | 
    
      		$extraSql = '';
 
     | 
  
  
    | 
      77
     | 
    
      		$sDropletName = pathinfo ($sDropletFile, PATHINFO_FILENAME);
 
     | 
  
  
    | 
      78
     | 
    
      		$sql = 'SELECT `name` FROM `'.$oDb->TablePrefix.'mod_droplets` '
 
     | 
  
  
    | 
      79
     | 
    
      		     . 'WHERE `name` LIKE \''.addcslashes($oDb->escapeString($sDropletName), '%_').'\' ';
 
     | 
  
  
    | 
      80
     | 
    
      		if( !( $sTmpName = $oDb->get_one($sql)) )
 
     | 
  
  
    | 
      81
     | 
    
      		{
     | 
  
  
    | 
      82
     | 
    
      			$sql = 'INSERT INTO `'.$oDb->TablePrefix.'mod_droplets`';
 
     | 
  
  
    | 
      83
     | 
    
      			$msgSql = 'INSERT Droplet `'.$oDb->escapeString($sDropletName).'` INTO`'.$oDb->TablePrefix.'mod_droplets`'." $OK";
 
     | 
  
  
    | 
      84
     | 
    
      		} elseif ($bOverwriteDroplets) 
 
     | 
  
  
    | 
      85
     | 
    
      		{
     | 
  
  
    | 
      86
     | 
    
      			$sDropletName = $sTmpName;
 
     | 
  
  
    | 
      87
     | 
    
      			$sql = 'UPDATE `'.$oDb->TablePrefix.'mod_droplets` ';
 
     | 
  
  
    | 
      88
     | 
    
      			$extraSql = 'WHERE `name` = \''.addcslashes($oDb->escapeString($sDropletName), '%_').'\' ';
 
     | 
  
  
    | 
      89
     | 
    
      			$msgSql = 'UPDATE Droplet `'.$sDropletName.'` INTO`'.$oDb->TablePrefix.'mod_droplets`'." $OK";
 
     | 
  
  
    | 
      90
     | 
    
      		}
 
     | 
  
  
    | 
      91
     | 
    
      // get description, comments and oode
 
     | 
  
  
    | 
      92
     | 
    
      		$sDropletFile = preg_replace('/^\xEF\xBB\xBF/', '', $sDropletFile);
     | 
  
  
    | 
      93
     | 
    
      		if( ($msgSql!='') && ($aFileData = file($sDropletFile)) ) {
     | 
  
  
    | 
      94
     | 
    
      				$bDescription = false;
 
     | 
  
  
    | 
      95
     | 
    
      				$bComments = false;
 
     | 
  
  
    | 
      96
     | 
    
      				$bCode = false;
 
     | 
  
  
    | 
      97
     | 
    
      				$sDescription = '';
 
     | 
  
  
    | 
      98
     | 
    
      				$sComments = '';
 
     | 
  
  
    | 
      99
     | 
    
      				$sCode = '';
 
     | 
  
  
    | 
      100
     | 
    
      				$sPattern = "#//:#im";
 
     | 
  
  
    | 
      101
     | 
    
      				while ( sizeof($aFileData) > 0 ) {
     | 
  
  
    | 
      102
     | 
    
      					$sSqlLine = trim(array_shift($aFileData));
 
     | 
  
  
    | 
      103
     | 
    
      					$isNotCode = (bool)preg_match($sPattern, $sSqlLine);
 
     | 
  
  
    | 
      104
     | 
    
      					if( $isNotCode==true ) {
     | 
  
  
    | 
      105
     | 
    
      // first step line is description
 
     | 
  
  
    | 
      106
     | 
    
      						if($bDescription==false) {
     | 
  
  
    | 
      107
     | 
    
      							$sDescription .= str_replace('//:','',$sSqlLine);
     | 
  
  
    | 
      108
     | 
    
      							$bDescription = true;
 
     | 
  
  
    | 
      109
     | 
    
      						} else {
     | 
  
  
    | 
      110
     | 
    
      // second step fill comments
 
     | 
  
  
    | 
      111
     | 
    
      							$sComments .= str_replace('//:','',$sSqlLine).PHP_EOL;
     | 
  
  
    | 
      112
     | 
    
      						}
 
     | 
  
  
    | 
      113
     | 
    
      					} else {
     | 
  
  
    | 
      114
     | 
    
      // third step fill code
 
     | 
  
  
    | 
      115
     | 
    
      						$sCode .= str_replace('//:','',$sSqlLine).PHP_EOL;
     | 
  
  
    | 
      116
     | 
    
      					}
 
     | 
  
  
    | 
      117
     | 
    
      				}
 
     | 
  
  
    | 
      118
     | 
    
      			$iModifiedWhen = time();
 
     | 
  
  
    | 
      119
     | 
    
      			$iModifiedBy = (method_exists($admin, 'get_user_id') && ($admin->get_user_id()!=null) ? $admin->get_user_id() : 1);
 
     | 
  
  
    | 
      120
     | 
    
      			$sql .= 'SET  `name` =\''.$oDb->escapeString($sDropletName).'\','
 
     | 
  
  
    | 
      121
     | 
    
      				 .       '`description` =\''.$oDb->escapeString($sDescription).'\','
 
     | 
  
  
    | 
      122
     | 
    
      				 .       '`comments` =\''.$oDb->escapeString($sComments).'\','
 
     | 
  
  
    | 
      123
     | 
    
      				 .       '`code` =\''.$oDb->escapeString($sCode).'\','
 
     | 
  
  
    | 
      124
     | 
    
      				 .       '`modified_when` = '.$iModifiedWhen.','
 
     | 
  
  
    | 
      125
     | 
    
      				 .       '`modified_by` = '.$iModifiedBy.','
 
     | 
  
  
    | 
      126
     | 
    
      				 .       '`active` = 1'
 
     | 
  
  
    | 
      127
     | 
    
      				 .       $extraSql;
 
     | 
  
  
    | 
      128
     | 
    
      		}
 
     | 
  
  
    | 
      129
     | 
    
      		if( $oDb->query($sql) ) {
     | 
  
  
    | 
      130
     | 
    
      			if( $msgSql!='' ) { $msg[] = $msgSql; }
     | 
  
  
    | 
      131
     | 
    
      		} else {
     | 
  
  
    | 
      132
     | 
    
      			$msg[] = $oDb->get_error();
 
     | 
  
  
    | 
      133
     | 
    
      		}
 
     | 
  
  
    | 
      134
     | 
    
      	}
 
     | 
  
  
    | 
      135
     | 
    
      	return;
 
     | 
  
  
    | 
      136
     | 
    
      }
 
     | 
  
  
    | 
      137
     | 
    
      /* -------------------------------------------------------- */
 
     | 
  
  
    | 
      138
     | 
    
      
 
     | 
  
  
    | 
      139
     | 
    
      function isDropletFile($sFileName)
 
     | 
  
  
    | 
      140
     | 
    
      {
     | 
  
  
    | 
      141
     | 
    
      	$bRetval = false;
 
     | 
  
  
    | 
      142
     | 
    
      	$matches = array();
 
     | 
  
  
    | 
      143
     | 
    
      	if(($sFileData = file_get_contents($sFileName)) !== false)
 
     | 
  
  
    | 
      144
     | 
    
      	{
     | 
  
  
    | 
      145
     | 
    
      //		$sPattern = "#(?://:)+[\w]*\w?#is";
 
     | 
  
  
    | 
      146
     | 
    
      //		$sPattern = "#//:[\w].+#imS";
 
     | 
  
  
    | 
      147
     | 
    
      		$sPattern = "#//:#im";
 
     | 
  
  
    | 
      148
     | 
    
      		$bRetval = (bool)preg_match_all($sPattern, $sFileData, $matches, PREG_SET_ORDER);
 
     | 
  
  
    | 
      149
     | 
    
      	}
 
     | 
  
  
    | 
      150
     | 
    
      	return $bRetval;
 
     | 
  
  
    | 
      151
     | 
    
      }
 
     | 
  
  
    | 
      152
     | 
    
      
 
     | 
  
  
    | 
      153
     | 
    
      /* -------------------------------------------------------- */
 
     | 
  
  
    | 
      154
     | 
    
      	function getDropletFromFiles($sBaseDir)
 
     | 
  
  
    | 
      155
     | 
    
      	{
     | 
  
  
    | 
      156
     | 
    
      		$aRetval = array();
 
     | 
  
  
    | 
      157
     | 
    
      		$oIterator = new DirectoryIterator($sBaseDir);
 
     | 
  
  
    | 
      158
     | 
    
      		foreach ($oIterator as $fileInfo) {
     | 
  
  
    | 
      159
     | 
    
      		// iterate the directory
 
     | 
  
  
    | 
      160
     | 
    
      			if($fileInfo->isDot()) continue;
 
     | 
  
  
    | 
      161
     | 
    
      			$sFileName = rtrim(str_replace('\\', '/', $fileInfo->getPathname()), '/');
     | 
  
  
    | 
      162
     | 
    
      			if($fileInfo->isFile()) {
     | 
  
  
    | 
      163
     | 
    
      			// only droplets are interesting
 
     | 
  
  
    | 
      164
     | 
    
      				if((file_exists($sFileName) && isDropletFile($sFileName))) {
     | 
  
  
    | 
      165
     | 
    
      				// if dir has no corresponding accessfile remember it
 
     | 
  
  
    | 
      166
     | 
    
      					$aRetval[] = $sFileName;
 
     | 
  
  
    | 
      167
     | 
    
      				}
 
     | 
  
  
    | 
      168
     | 
    
      			}
 
     | 
  
  
    | 
      169
     | 
    
      		}
 
     | 
  
  
    | 
      170
     | 
    
      		return $aRetval;
 
     | 
  
  
    | 
      171
     | 
    
      	}
 
     |