<?php require_once dirname(__FILE__).'/accesscheck.php'; #$_POST['pluginurl'] = ''; ## handle non-JS ajax if (isset($_GET['disable']) || isset($_GET['enable'])) { include "actions/plugins.php"; } $pluginDestination = PLUGIN_ROOTDIR; $pluginInfo = array(); if (!empty($_GET['delete'])) { $pluginname = preg_replace('/[^\w_-]/','',$_GET['delete']); if (is_file($pluginDestination.'/'.$pluginname.'.info.txt')) { $pluginDetails = unserialize(file_get_contents($pluginDestination.'/'.$pluginname.'.info.txt')); unlink($pluginDestination.'/'.$pluginname.'.info.txt'); delFsTree($pluginDestination.'/'.$pluginname); unlink($pluginDestination.'/'.$pluginname.'.php'); $_SESSION['action_result'] = s('The plugin '.$pluginname.' was removed'); } Redirect('plugins'); } if (!empty($_POST['pluginurl']) && class_exists('ZipArchive')) { if (!verifyToken()) { print Error(s('Invalid security token, please reload the page and try again')); return; } $packageurl = trim($_POST['pluginurl']); ## verify the url against known locations, and require it to be "zip". ## let's hope Github keeps this structure for a while if (!preg_match('~^https?://github\.com/([\w-_]+)/([\w-_]+)/archive/([\w]+)\.zip$~i',$packageurl,$regs)) { print Error(s('Invalid download URL, please reload the page and try again')); return; } else { $developer = $regs[1]; $project_name = $regs[2]; $branch = $regs[3]; } print '<h3>'.s('Fetching plugin').'</h3>'; print '<h2>'.s('Developer').' '.$developer.'</h2>'; print '<h2>'.s('Project').' '.$project_name.'</h2>'; $filename = ''; $packagefile = file_get_contents($packageurl); if (!$packagefile) { print Error(s('Unable to download plugin package, check your connection')); } else { $filename = basename($packageurl); file_put_contents($GLOBALS['tmpdir'].'/phpListPlugin-'.$filename,$packagefile); print '<h3>'.s('Installing plugin').'</h3>'; } $zip = new ZipArchive; if (!empty($filename) && $zip->open($GLOBALS['tmpdir'].'/phpListPlugin-'.$filename) === TRUE) { /* the zip may have a variety of directory structures, as Github seems to add at least one for the "branch" of * the project and then the developer has some more. * We look for a directory called "plugins" and place it's contents in the plugins folder. */ # var_dump($zip); //echo "numFiles: " . $zip->numFiles . "\n"; //echo "status: " . $zip->status . "\n"; //echo "statusSys: " . $zip->statusSys . "\n"; //echo "filename: " . $zip->filename . "\n"; //echo "comment: " . $zip->comment . "\n"; $extractList = array(); $dir_prefix = ''; for ($i=0; $i<$zip->numFiles;$i++) { # echo "index: $i<br/>\n"; # var_dump($zip->statIndex($i)); $zipItem = $zip->statIndex($i); if (preg_match('~^([^/]+)/plugins/~',$zipItem['name'],$regs)) { array_push($extractList,$zipItem['name']); $dir_prefix = $regs[1]; } } //var_dump($extractList); //var_dump($dir_prefix); @mkdir($GLOBALS['tmpdir'].'/phpListPluginInstall',0755); # $destination = $GLOBALS['tmpdir'].'/phpListPluginDestination'; @mkdir($pluginDestination,0755); if (is_writable($pluginDestination)) { if ($zip->extractTo($GLOBALS['tmpdir'].'/phpListPluginInstall',$extractList)) { $extractedDir = opendir($GLOBALS['tmpdir'].'/phpListPluginInstall/'.$dir_prefix.'/plugins/'); $installOk = false; $pluginsForUpgrade = array(); while ($dirEntry = readdir($extractedDir)) { if (!preg_match('/^\./',$dirEntry)) { print $dirEntry; if (preg_match('/^([\w]+)\.php$/',$dirEntry,$regs)) { $pluginInfo[$regs[1]] = array( 'installUrl' => $packageurl, 'developer' => $developer, 'projectName' => $project_name, 'installDate' => time(), ); } $bu_dir = time(); if (file_exists($pluginDestination.'/'.$dirEntry)) { print ' '.s('updating existing plugin'); if (preg_match('/(.*)\.php$/',$dirEntry,$regs)) { $pluginsForUpgrade[] = $regs[1]; } @rename($pluginDestination.'/'.$dirEntry, $pluginDestination.'/'.$dirEntry.'.'.$bu_dir); } else { print ' '.s('new plugin'); } # var_dump($pluginInfo); print '<br/>'; if (copy_recursive($GLOBALS['tmpdir'].'/phpListPluginInstall/'.$dir_prefix.'/plugins/'.$dirEntry, $pluginDestination.'/'.$dirEntry)) { delFsTree($pluginDestination.'/'.$dirEntry.'.'.$bu_dir); $installOk = true; } elseif (is_dir($pluginDestination.'/'.$dirEntry.'.'.$bu_dir)) { ## try to place old one back @rename($pluginDestination.'/'.$dirEntry.'.'.$bu_dir,$pluginDestination.'/'.$dirEntry); } } } foreach ($pluginInfo as $plugin => $pluginDetails) { # print 'Writing '.$pluginDestination.'/'.$plugin.'.info.txt<br/>'; file_put_contents($pluginDestination.'/'.$plugin.'.info.txt',serialize($pluginDetails)); } ## clean up delFsTree($GLOBALS['tmpdir'].'/phpListPluginInstall'); if ($installOk) { upgradePlugins($pluginsForUpgrade); print s('Plugin installed successfully'); } else { print s('Error installing plugin'); } $zip->close(); print '<hr/>'.PageLinkButton('plugins',s('Continue')); return; } } else { Error(s('Plugin directory is not writable')); } } else { Error(s('Invalid plugin package')); } print s('Plugin installation failed'); print '<hr/>'.PageLinkButton('plugins',s('Continue')); return; } if (defined('PLUGIN_ROOTDIR') && !is_writable(PLUGIN_ROOTDIR)) { Info(s('The plugin root directory is not writable, please install plugins manually')); } elseif (!class_exists('ZipArchive')) { Info(s('PHP has no <a href="http://php.net/zip">Zip capability</a>. This is required to allow installation from a remote URL')); } else { print '<h3>'.s('Install a new plugin').'</h3>'; print '<p><a class="resourceslink" href="http://resources.phplist.com/plugins/" title="'.s('Find plugins').'" target="_blank">'.s('Find plugins').'</a></p>'; print formStart(); print '<fieldset> <label for="pluginurl">'.s('Plugin package URL').'</label> <div type="field"><input type="text" id="pluginurl" name="pluginurl" /></div> <button type="submit" name="download">'.s('Install plugin').'</button> </fieldset></form>'; } $ls = new WebblerListing(s('Installed plugins')); if (empty($GLOBALS['allplugins'])) return; ksort($GLOBALS['allplugins'], SORT_FLAG_CASE | SORT_STRING); foreach ($GLOBALS['allplugins'] as $pluginname => $plugin) { $pluginDetails = array(); $refl = new ReflectionObject($plugin); if (is_file(dirname($refl->getFileName()).'/'.$pluginname.'.info.txt')) { $pluginDetails = unserialize(file_get_contents($pluginDestination.'/'.$pluginname.'.info.txt')); } $ls->addElement($pluginname); $ls->setClass($pluginname, 'row1'); # $ls->addColumn($pluginname,s('name'),$plugin->name); $details = '<div class="plugindetails">'; $details .= '<div class="detail"><span class="label">'.s('name').'</span>'; $details .= '<span class="value">'.$plugin->name. '</span></div>'; $details .= '<div class="detail"><span class="label">'.s('version').'</span>'; $details .= '<span class="value">'.$plugin->version. '</span></div>'; $details .= '<div class="detail"><span class="label">'.s('description').'</span>'; $details .= '<span class="value">'.$plugin->description. '</span></div>'; # $ls->addRow($pluginname,s('description'),$plugin->description); # $ls->addColumn($pluginname,s('version'),$plugin->version); if (!empty($pluginDetails['installDate'])) { # $ls->addColumn($pluginname,s('installed'),date('Y-m-d',$pluginDetails['installDate'])); $details .= '<div class="detail"><span class="label">'.s('installed').'</span>'; $details .= '<span class="value">'.date('Y-m-d',$pluginDetails['installDate']). '</span></div>'; } if (!empty($pluginDetails['installUrl'])) { # $ls->addRow($pluginname,s('installation Url'),$pluginDetails['installUrl']); $details .= '<div class="detail"><span class="label">'.s('installation Url').'</span>'; $details .= '<span class="value">'.$pluginDetails['installUrl']. '</span></div>'; } if (!empty($pluginDetails['developer'])) { # $ls->addColumn($pluginname,s('developer'),$pluginDetails['developer']); $details .= '<div class="detail"><span class="label">'.s('developer').'</span>'; $details .= '<span class="value">'.$pluginDetails['developer']. '</span></div>'; } $ls->addColumn($pluginname,s('enabled'),$plugin->enabled ? PageLinkAjax('plugins&disable='.$pluginname,$GLOBALS['img_tick']) : PageLinkAjax('plugins&enable='.$pluginname,$GLOBALS['img_cross'])); if (DEVVERSION) { //$ls->addColumn($pluginname,s('initialise'),$plugin->enabled ? //PageLinkAjax('plugins&initialise='.$pluginname,s('Initialise')) : ''); if ($plugin->enabled) { $details .= '<div class="detail"><span class="label">'.s('initialise').'</span>'; $details .= '<span class="value">'; $details .= PageLinkAjax('plugins&initialise='.$pluginname,s('Initialise')); $details .= '</span></div>'; } } if (!empty($pluginDetails['installUrl']) && is_writable($pluginDestination.'/'.$pluginname)) { ## we can only delete the ones that were installed from the interface $ls->addColumn($pluginname,s('delete'),'<span class="delete"><a href="javascript:deleteRec(\'./?page=plugins&delete='.$pluginname. '\');" class="button" title="'.s('delete this plugin').'">'.s('delete').'</a></span>'); } if (!empty($pluginDetails['installUrl']) && class_exists('ZipArchive')) { $updateForm = formStart(); $updateForm .= '<input type="hidden" name="pluginurl" value="'.$pluginDetails['installUrl'].'"/> <button type="submit" name="update" title="'.s('update this plugin').'">'.s('update').'</button></form>'; $ls->addColumn($pluginname,s('update'),$updateForm); } $details .= '</div>'; $ls->addRow($pluginname,s('details'),$details); } print $ls->display();
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
FCKeditor | Folder | 0755 |
|
|
PEAR | Folder | 0755 |
|
|
PHPMailer | Folder | 0755 |
|
|
PHPMailer6 | Folder | 0755 |
|
|
actions | Folder | 0755 |
|
|
auth | Folder | 0755 |
|
|
commonlib | Folder | 0755 |
|
|
css | Folder | 0755 |
|
|
data | Folder | 0755 |
|
|
help | Folder | 0755 |
|
|
images | Folder | 0755 |
|
|
inc | Folder | 0755 |
|
|
info | Folder | 0755 |
|
|
js | Folder | 0755 |
|
|
lan | Folder | 0755 |
|
|
locale | Folder | 0755 |
|
|
oldmailer | Folder | 0755 |
|
|
onyxrss | Folder | 0755 |
|
|
plugins | Folder | 0755 |
|
|
styles | Folder | 0755 |
|
|
tests | Folder | 0755 |
|
|
ui | Folder | 0755 |
|
|
uploadimages | Folder | 0755 |
|
|
.gitignore | File | 20 B | 0644 |
|
.htaccess | File | 171 B | 0644 |
|
.minceconf | File | 994 B | 0644 |
|
AnalyticsQuery.php | File | 985 B | 0644 |
|
CsvReader.php | File | 1.27 KB | 0644 |
|
EmailSender.php | File | 477 B | 0644 |
|
about.php | File | 4.22 KB | 0644 |
|
accesscheck.php | File | 1.51 KB | 0644 |
|
addprefix.php | File | 966 B | 0644 |
|
adduser.php | File | 46 B | 0644 |
|
admin.php | File | 10.68 KB | 0644 |
|
adminattributes.php | File | 6.39 KB | 0644 |
|
admins.php | File | 4.54 KB | 0644 |
|
adodb.inc | File | 6.49 KB | 0644 |
|
analytics.php | File | 2.84 KB | 0644 |
|
attributes.php | File | 102 B | 0644 |
|
blacklistemail.php | File | 1.04 KB | 0644 |
|
bounce.php | File | 10.09 KB | 0644 |
|
bouncemgt.php | File | 1.39 KB | 0644 |
|
bouncerule.php | File | 3 KB | 0644 |
|
bouncerules.php | File | 5.86 KB | 0644 |
|
bounces.php | File | 6.01 KB | 0644 |
|
catlists.php | File | 2.64 KB | 0644 |
|
checkbouncerules.php | File | 1.34 KB | 0644 |
|
checki18n.php | File | 2.69 KB | 0644 |
|
checkprerequisites.php | File | 1.05 KB | 0644 |
|
class.html.mime.mail-outlookfix.inc | File | 19.93 KB | 0644 |
|
class.html.mime.mail.inc | File | 19.35 KB | 0644 |
|
class.image.inc | File | 5.77 KB | 0644 |
|
class.phplistmailer.php | File | 24.23 KB | 0644 |
|
class.phplistmailerbase.php | File | 1.5 KB | 0644 |
|
community.php | File | 1.78 KB | 0644 |
|
communityfeed.php | File | 2.36 KB | 0644 |
|
configure.php | File | 5.25 KB | 0644 |
|
connect.php | File | 74.36 KB | 0644 |
|
convertstats.php | File | 5.51 KB | 0644 |
|
converttoutf8.php | File | 3.77 KB | 0644 |
|
cron.php | File | 3.37 KB | 0644 |
|
date.php | File | 6.08 KB | 0644 |
|
dbcheck.php | File | 111 B | 0644 |
|
defaultFrontendTexts.php | File | 9.57 KB | 0644 |
|
defaultconfig.inc | File | 23.52 KB | 0644 |
|
defaultconfig.php | File | 24.92 KB | 0644 |
|
defaultplugin.php | File | 23.31 KB | 0644 |
|
defaults.php | File | 2.83 KB | 0644 |
|
defaultsystemtemplate.php | File | 1.83 KB | 0644 |
|
defaulttest.php | File | 1.12 KB | 0644 |
|
dlusers.php | File | 232 B | 0644 |
|
domainbounces.php | File | 507 B | 0644 |
|
domainstats.php | File | 2.83 KB | 0644 |
|
editattributes.php | File | 6.7 KB | 0644 |
|
editlist.php | File | 6.79 KB | 0644 |
|
error_log | File | 274 B | 0644 |
|
eventlog.php | File | 4.49 KB | 0644 |
|
export.php | File | 4.84 KB | 0644 |
|
exportuserdata.php | File | 6.36 KB | 0644 |
|
fckphplist.php | File | 43.21 KB | 0644 |
|
footer.inc | File | 1.19 KB | 0644 |
|
footer.old.inc | File | 1.82 KB | 0644 |
|
gchart.php | File | 869 B | 0644 |
|
generatebouncerules.php | File | 5.24 KB | 0644 |
|
getrss.php | File | 3.94 KB | 0644 |
|
header.inc | File | 1.75 KB | 0644 |
|
home.php | File | 16.36 KB | 0644 |
|
hostedprocessqueuesetup.php | File | 1.64 KB | 0644 |
|
htaccess | File | 311 B | 0644 |
|
image.php | File | 795 B | 0644 |
|
import.php | File | 2.54 KB | 0644 |
|
import1.php | File | 9.41 KB | 0644 |
|
import2.php | File | 243 B | 0644 |
|
import3.php | File | 20.26 KB | 0644 |
|
import4.php | File | 15.63 KB | 0644 |
|
importadmin.php | File | 14.5 KB | 0644 |
|
importlib.php | File | 2.86 KB | 0644 |
|
importsimple.php | File | 5.84 KB | 0644 |
|
index.php | File | 22.53 KB | 0644 |
|
index.php.old | File | 22.53 KB | 0644 |
|
info.php | File | 1.01 KB | 0644 |
|
init.php | File | 21.7 KB | 0644 |
|
initialise.php | File | 10.02 KB | 0644 |
|
initlanguages.php | File | 794 B | 0644 |
|
languages.php | File | 22.43 KB | 0644 |
|
lib.php | File | 59.85 KB | 0644 |
|
list.php | File | 11.79 KB | 0644 |
|
listbounces.php | File | 4.64 KB | 0644 |
|
login.php | File | 6.05 KB | 0755 |
|
logout.php | File | 224 B | 0644 |
|
massremove.php | File | 1.81 KB | 0644 |
|
massunconfirm.php | File | 1.52 KB | 0644 |
|
mclicks.php | File | 9.55 KB | 0644 |
|
members.php | File | 16.58 KB | 0644 |
|
mergeduplicates.php | File | 4.28 KB | 0644 |
|
message.php | File | 7.27 KB | 0644 |
|
messages.php | File | 18.94 KB | 0644 |
|
mimePart.php | File | 10.7 KB | 0644 |
|
minify.txt | File | 201 B | 0644 |
|
msgbounces.php | File | 3.79 KB | 0644 |
|
msgstatus.php | File | 1.18 KB | 0644 |
|
mviews.php | File | 7.88 KB | 0644 |
|
mysql.inc | File | 11.19 KB | 0644 |
|
mysqli.inc | File | 11.58 KB | 0644 |
|
pageaction.php | File | 1.08 KB | 0644 |
|
pagetop.php | File | 1.17 KB | 0644 |
|
phpListAdminAuthentication.php | File | 7.2 KB | 0644 |
|
pluginlib.php | File | 6.39 KB | 0644 |
|
plugins.php | File | 10.32 KB | 0644 |
|
preparesend.php | File | 627 B | 0644 |
|
processbounces.php | File | 29.71 KB | 0644 |
|
processqueue.php | File | 3.73 KB | 0644 |
|
purgerss.php | File | 1.38 KB | 0644 |
|
readtestmail.php | File | 11.26 KB | 0644 |
|
reconcileusers.php | File | 25.16 KB | 0644 |
|
redirecttoupdater.php | File | 170 B | 0644 |
|
reindex.php | File | 1.69 KB | 0644 |
|
rsslib.php | File | 2.8 KB | 0644 |
|
runcommand.php | File | 583 B | 0644 |
|
send.php | File | 5.58 KB | 0644 |
|
send_core.php | File | 56.08 KB | 0644 |
|
sendemaillib.php | File | 64.2 KB | 0644 |
|
sendprepared.php | File | 4.33 KB | 0644 |
|
sessionlib.php | File | 2.92 KB | 0644 |
|
setpermissions.php | File | 1.57 KB | 0644 |
|
setup.php | File | 3.21 KB | 0644 |
|
sidebar.php | File | 2.67 KB | 0644 |
|
spage.php | File | 3.29 KB | 0644 |
|
spageedit.php | File | 17.07 KB | 0644 |
|
statsmgt.php | File | 1.22 KB | 0644 |
|
statsoverview.php | File | 7.62 KB | 0644 |
|
stresstest.php | File | 5.1 KB | 0644 |
|
structure.php | File | 26.79 KB | 0644 |
|
subscribelib2.php | File | 66.02 KB | 0644 |
|
subscriberstats.php | File | 591 B | 0644 |
|
suppressionlist.php | File | 1.71 KB | 0644 |
|
system.php | File | 784 B | 0644 |
|
systemstats.php | File | 7.71 KB | 0644 |
|
template.php | File | 12.72 KB | 0644 |
|
templates.php | File | 3.02 KB | 0644 |
|
tests.php | File | 1.57 KB | 0644 |
|
uclicks.php | File | 6.52 KB | 0644 |
|
update.php | File | 187 B | 0644 |
|
updateLib.php | File | 2.77 KB | 0644 |
|
updatetlds.php | File | 399 B | 0644 |
|
updatetranslation.php | File | 1.94 KB | 0644 |
|
upgrade.php | File | 29.03 KB | 0644 |
|
user.php | File | 2.35 KB | 0644 |
|
usercheck.php | File | 2.27 KB | 0644 |
|
userclicks.php | File | 8 KB | 0644 |
|
userhistory.php | File | 127 B | 0644 |
|
usermgt.php | File | 1.83 KB | 0644 |
|
users.php | File | 393 B | 0644 |
|
vCard.php | File | 1.9 KB | 0644 |
|
viewmessage.php | File | 610 B | 0644 |
|
viewrss.php | File | 4.07 KB | 0644 |
|
viewtemplate.php | File | 1.82 KB | 0644 |
|
vote.php | File | 38 B | 0644 |
|