Project

General

Profile

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
	}
(6-6/16)