[ Avaa Bypassed ]




Upload:

Command:

hmhc3928@18.221.217.100: ~ $
<?php

/**
 * phplistPlugin main class to extend for plugins.
 */

/**
 * a plugin for phpList should extend this class to work. Once you have extended
 * you can implement all the hooks provided to manipulate the functionality of phpList
 * in many places.
 */
require_once dirname(__FILE__).'/accesscheck.php';

class phplistPlugin
{
    public $name = 'Default Plugin';
    public $version = 'unknown';
    public $authors = '';
    public $description = 'No description';
    public $documentationUrl = ''; //# link to documentation for this plugin (eg https://resources.phplist.com/plugin/pluginname
    public $enabled = 1; // use directly, can be privitsed later and calculated with __get and __set
    public $system_root = ''; //# root dir of the phpList admin directory
    public $dependencyFailure;

    //@@Some ideas to implement this:
    // * Start each method with if (!$this->enabled) return parent :: parentMethod($args);
    // * Don't add to manage Global plugins if disabled
    public $coderoot = './PLUGIN_ROOTDIR/defaultplugin/'; // coderoot relative to the phplist admin directory
    // optional configuration variables
    public $configvars = array();
    // config var    array( type, name [array values]));
    public $DBstruct = array();

    // These files can be called from the commandline
    // The variable holds an array of page names, (the file name without .php) and the files must be in the $coderoot directory.
    public $commandlinePluginPages = array();

    // An array of page names that can be called as public pages, e.g. www.mysite.com/lists/?pi=myplugin&p=mypage
    // The page name is the file name without .php. The files must be in the $coderoot directory
    public $publicPages = array();

    // Pages that can be called using the remote processing secret parameter,
    // e.g. www.mysite.com/lists/admin/?pi=myplugin&page=mypage&secret=1234567890
    public $remotePages = array();

    public $configArray = array();

    public $importTabTitle = ''; //# title of the tab for the import page

    public $needI18N = 0;

    // Configuration items for the Settings page
    public $settings = [];

    // File system path to the plugin file
    public $origin = '';

    /**
     * set to true, if this plugin provides the WYSIWYG editor for the send page
     * the plugin will then need to implement:.
     *
     * function editor($fieldname,$fieldvalue)
     *
     * which returns the HTML for the editor.
     */
    public $editorProvider = false;

    /** set to true, if this plugin provides verification of the administrator login
     * the plugin will then need to implement a variety of methods, check the docs.
     */
    public $authProvider = false;

    /**
     * The priority of this plugin.
     * phplist will activate() plugins in descending priority order
     */
    public $priority = 10;

    /**
     * Holds tablename -> real table mapping
     */
    public $tables = array();

    /**
     * array of pages in this plugin to add to the main menu
     *
     * example format:
     *      array(
     *          'page' => array('category' => 'subscribers'),
     *      )
     *
     * valid categories are:
     *
     * subscribers
     * campaigns
     * statistics
     * system
     * config
     * develop (will only show up in "dev" mode)
     * info
     *
     */
    public $topMenuLinks = array();

    /**
     * titles of pages in the plugin, this is used in the listing of the pages in the menu
     *
     * example:
     *    array(
     *      'page' => 'Title of page'
     *    )
     */
    public $pageTitles = array();

    /**
      * dependencyFailure holds the reason the plugin cannot be initialised 
    
     */

    /**
     * dependency check
     *
     * provides tests to determine whether this plugin can be used
     * example:
     *    array(
     *        'description of dependency' => condition for plugin to be enabled
     *    )
     */
    public function dependencyCheck()
    {
        return array(
            'phpList version' => version_compare(VERSION, '3.0.12') >= 0,
        );
    }

    /**
     * name of this plugin.
     */
    public function name()
    {
        return $this->name;
    }

    /**
     * constructor
     * plugins should not run SQL queries as construction time
     * use the "activate" function instead
     * that way you can use processDBerror to handle DB errors
     */
    public function __construct()
    {
        $this->phplistplugin();
    }

    public function phplistplugin()
    {
        // constructor
        // Startup code, other objects might not be constructed yet
        //print ("<BR>Construct " . $this->name);
        //# try to prepend PLUGIN ROOTDIR, if necessary
        if (!is_dir($this->coderoot)) {
            $this->coderoot = PLUGIN_ROOTDIR.'/'.$this->coderoot;
        }
        //# always enable in dev mode
        if (!empty($GLOBALS['developer_email'])) {
            $this->enabled = 1;
        }
        $this->importTabTitle = $this->name;
        $this->system_root = dirname(__FILE__);
        $this->version = $this->getVersion();
        //# map table names
        $me = new ReflectionObject($this);
        foreach ($this->DBstruct as $table => $structure) {
            $this->tables[$table] = $GLOBALS['table_prefix'].$me->getName().'_'.$table;
        }
    }

    public function getVersion()
    {
        $version = array();
        $me = new ReflectionObject($this);

        //# interesting trick from Dokuwiki inc/infoutils.php
        if (is_dir(dirname($me->getFileName()).'/../.git')) {
            $version['type'] = 'Git';
            $version['date'] = 'unknown';

            $inventory = dirname($me->getFileName()).'/../.git/logs/HEAD';
            if (is_file($inventory)) {
                $sz = filesize($inventory);
                $seek = max(0, $sz - 2000); // read from back of the file
                $fh = fopen($inventory, 'rb');
                fseek($fh, $seek);
                $chunk = fread($fh, 2000);
                fclose($fh);
                $chunk = trim($chunk);
                $chunk = @array_pop(explode("\n", $chunk));   //last log line
                $chunk = @array_shift(explode("\t", $chunk)); //strip commit msg
                $chunk = explode(' ', $chunk);
                array_pop($chunk); //strip timezone
                $date = date('Y-m-d', array_pop($chunk));
                if ($date) {
                    $version['date'] = $date;
                }
            }

            return $version['type'].' - '.$version['date'];
        }

        return $this->version;
    }

    public function initialise()
    {
        global $table_prefix;
        $me = new ReflectionObject($this);
        $plugin_initialised = getConfig(md5('plugin-'.$me->getName().'-initialised'));
        if (empty($plugin_initialised)) {
            foreach ($this->DBstruct as $table => $structure) {
                if (!Sql_Table_exists($table_prefix.$me->getName().'_'.$table)) {
                    //  print s('Creating table').' '.$table . '<br/>';
                    Sql_Create_Table($table_prefix.$me->getName().'_'.$table, $structure);
                }
            }
            saveConfig(md5('plugin-'.$me->getName().'-initialised'), time(), 0);
        }
    }

    public function upgrade($previous)
    {
        return true;
    }

    /**
     * Allows a plugin to override the default check for a new version.
     *
     * @param array $pluginDetails
     *
     * @returns string|false|null new version, or false if update not available, or null to use the default update check
     *
     */
    public function checkForUpdate(array $pluginDetails)
    {
    }

    /**
     * Startup code, all other objects are constructed
     * returns success or failure, false means we cannot start
     */
    public function activate()
    {
        foreach ($this->settings as $item => $itemDetails) {
            $GLOBALS['default_config'][$item] = $itemDetails;
            $GLOBALS['default_config'][$item]['hidden'] = false;
        }
    }

    /**
     * Return html snippet to tell about copyrights of used third party code.
     * @note Plugin author is already displayed elsewhere
     */
    public function displayAbout()
    {
        return;
    }

    /**
     * Return i18n Language Dir so that main page content can be extended
     */
    public function i18nLanguageDir()
    {
        return;
    }

    public function pageTitle($page)
    {
        if (isset($this->pageTitles[$page])) {
            return s($this->pageTitles[$page]);
        }

        return $this->name.' : '.$page;
    }

    public function pageTitleHover($page)
    {
        if (isset($this->pageTitleHover[$page])) {
            return s($this->pageTitleHover[$page]);
        }

        return $this->name.' : '.$page;
    }

    /**
     * deleteSent - wipe DB entries marking a campaign sent for subscribers
     * this is used in DEV mode only.
     */
    public function deleteSent()
    {
    }

    /**
     * write a value to the general config to be retrieved at a later stage
     * parameters: name -> name of the variable
     * value -> value of the variablesiable, can be a scalar, array or object
     * returns success or failure
     */
    public function writeConfig($name, $value)
    {
        if (is_object($value) || is_array($value)) {
            $store = 'SER:'.serialize($value);
        } else {
            $store = $value;
        }
        Sql_Query(sprintf('replace into %s set item = "%s-%s",value="%s",editable=0', $GLOBALS['tables']['config'],
            $this->name, addslashes($name), addslashes($store)));
        //# force refresh of config in session
        unset($_SESSION['config'][$this->name.'-'.addslashes($name)]);

        return 1;
    }

    /**
     * read a value from the general config to be retrieved at a later stage
     * parameters: name -> name of the variable
     * returns value
     */
    public function getConfig($name)
    {
        if (isset($_SESSION['config'][$this->name.'-'.addslashes($name)])) {
            return $_SESSION['config'][$this->name.'-'.addslashes($name)];
        }

        $req = Sql_Fetch_Array_Query(sprintf('select value from  %s where item = "%s-%s"', $GLOBALS['tables']['config'],
            $this->name, addslashes($name)));
        $result = stripslashes($req[0]);
        if (!empty($result) && strpos('SER:', $result) == 1) {
            $result = substr($result, 4);
            $value = unserialize($result);
        } else {
            $value = $result;
        }
        $_SESSION['config'][$this->name.'-'.addslashes($name)] = $value;

        return $result;
    }

    /**
     * displayConfig
     * purpose: display input for a config variable in the backend
     * parameters:
     * name -> name of the config variable, as found in $this->configvars
     * return, HTML snippet of input to slot into a form
     */
    public function displayConfig($name)
    {
        $name = trim(strtolower($name));
        $name = preg_replace('/\W/', '', $name);
        $type = $this->configvars[$name][0];
        $label = $this->configvars[$name][1];
        $currentvalue = $this->getConfig($name);
        $html = '';
        switch ($type) {
            case 'attributeselect':
                $html = sprintf('<select name="%s"><option value=""> --%s</option>', $name,
                    $GLOBALS['I18N']->get('choose'));
                $req = Sql_Query(sprintf('select * from %s', $GLOBALS['tables']['attribute']));
                while ($row = Sql_Fetch_Array($req)) {
                    $html .= sprintf('<option value="%d" %s>%s</option>', $row['id'],
                        $row['id'] == $currentvalue ? 'selected="selected"' : '',
                        substr(htmlspecialchars($row['name']), 0, 25));
                }
                $html .= '</select>';

                return $html;
            case 'radio':
                $values = $this->configvars[$name][2];
                foreach ($values as $key => $label) {
                    $html .= sprintf('<input type="radio" name="%s" value="%s" %s> %s', $name, $key,
                        $currentvalue == $key ? 'checked="checked"' : '', $label);
                }

                return $html;
            case 'textarea':
                $html = sprintf('<textarea name="%s" rows="10" cols="40" wrap="virtual">%s </textarea>', $name,
                    htmlspecialchars($currentvalue));

                return $html;
            case 'text':
            default:
                $html = sprintf('<input type="text" name="%s" value="%s" size="45">', $name,
                    htmlspecialchars($currentvalue));

                return $html;
        }
    }

    //###########################################################
    // Main interface hooks

    public function adminmenu()
    {
        return array(
            // page, description
            'main'       => 'Main Page',
            'helloworld' => 'Hello World page',
        );
    }

    //###########################################################
    // Frontend

    /**
     * return snippet for the Subscribe page
     */
    public function displaySubscriptionChoice($pageData, $userID = 0)
    {
        return '';
    }

    public function validateSubscriptionPage($pageData)
    {
        return;
    }

    /**
     * parse the text of the thankyou page
     * parameters:
     * pageid -> id of the subscribe page
     * userid -> id of the user
     * text -> current text of the page
     * returns parsed text
     */
    public function parseThankyou($pageid = 0, $userid = 0, $text = '')
    {
        return $text;
    }

    public function subscriberConfirmation($subscribepageID, $userdata = array())
    {
    }

    //###########################################################
    // Messages

    /**
     * displayMessages
     *  obsolete
     * @return string
     */
    public function displayMessages($msg, &$status)
    {
        return '';
    }

    //###########################################################
    // Message

    /**
     * add a tab to the "Send a Message page" for options to be set in the plugin
     * @param messageid ID of the message being displayed (should always be > 0)
     * @param messagedata associative array of all data from the db for this message
     * @return HTML code to slot into the form to submit to the database
     */
    public function sendMessageTab($messageid = 0, $messagedata = array())
    {
        return '';
    }

    /**
     * If adding a TAB to the Send a Message page, what is the TAB's name
     * parameters: none
     * @return short title (less than about 10 characters)
     */
    public function sendMessageTabTitle($messageid = 0)
    {

        return '';
    }

    /**
     * If adding a TAB to the Send a Message page, try to insert the tab before the one returned here by title
     * parameters: none
     * returns: tab title to insert before
     */
    public function sendMessageTabInsertBefore()
    {
        return false;
    }

    /** sendMessageTabSave
     * called before a campaign is being saved. All data will be saved by phpList,
     * but you can capture it here and save it elsewhere if you need to.
     *
     * @param messageid integer: id of the campaign
     * @param messagedata array: associative array with all data
     */
    public function sendMessageTabSave($messageid = 0, $data = array())
    {
        return '';
    }

    public function sendFormats()
    {
        //# sendFormats();
        // parameters: none
        // returns array of "shorttag" => "description" of possible formats this plugin can provide
        // this will be listed in the "Send As" list of radio buttons, so that an editor can choose the format
        // prefix the shorttag with _ to suppress it from the send page (for internal use)
        return array();
    }

    /**
     * Called when viewing a message
     * The plugin can return a caption and a value that will be displayed as an additional row.
     * Each can include HTML and should be html encoded.
     *
     * @param messageid integer: id of the campaign
     * @param messagedata array: associative array of message data
     *
     * @return array 2-element array, [0] caption, [1] value.
     *               or false if the plugin does not want to display a row
     */
    public function viewMessage($messageid, array $messagedata)
    {
        return false;
    }

    /**
     * HelloWorld
     * just a simple check
     */
    public function HelloWorld($params)
    {
        echo 'Hello to you from '.$this->name;
    }

    //###########################################################
    // Processqueue

    /**
     * canSend
     *
     * can this message be sent to this subscriber
     * if false is returned, the message will be identified as sent to the subscriber
     * and never tried again
     *
     * @param $messagedata array of all message data
     * @param $userdata array of all user data
     * returns bool: true, send it, false don't send it
     */
    public function canSend($messagedata, $subscriberdata)
    {
        return true; //@@@
    }

    /**
     * throttleSend
     *
     * can this message be sent to this subscriber
     * if false is returned, the message will be identified as failed
     * and re-tried in the next queue run
     *
     * @param $messagedata array of all message data
     * @param $userdata array of all user data
     * returns bool: true, do not send it, false send it
     */
    public function throttleSend($messagedata, $subscriberdata)
    {
        return false;
    }

    /**
     * throttleDomainMap
     *
     * Return the mapping of the domain for throttling
     * Only the first plugin that returns a non-false value will be used
     *
     * @param string $domain domain to map
     * @return string mapping or false if not mapped
     */
    public function throttleDomainMap($domain)
    {
        return false;
    }

    /**
     * messageStatusLimitReached.
     *
     * @param $recentlySent integer
     *
     * @return text to display in the status panel of the active message
     */
    public function messageStatusLimitReached($recentlySent)
    {
        return '';
    }

    /**
     * messageStatus
     * @param int    $id     messageid
     * @param string $status message status
     *
     * @return possible additional text to display
     */
    public function messageStatus($id, $status)
    {
        return '';
    }

    /**
     * Allows plugins to modify the fields of the loaded campaign.
     * Those fields will then be customised for each subscriber
     *
     * @param integer $messageid: ID of the message
     * @param array   &$message: associative array of message data
     * @return void
     */
    public function processPrecachedCampaign($messageid, array &$message)
    {
    }

    /**
     * handle the moment that sending a campaign has finished.
     * this is after the campaign has been potentially duplicated for repetition.
     *
     * @param int $messageid ID of the campaign
     * @param array messagedata associative array with the current message data
     */
    public function processSendingCampaignFinished($messageid, array $messagedata)
    {
    }

    /**
     * parseOutgoingTextMessage
     * @param integer messageid: ID of the message
     * @param string  content: entire text content of a message going out
     * @param string  destination: destination email
     * @param array   userdata: associative array with data about user
     * @return string parsed content
     */
    public function parseOutgoingTextMessage($messageid, $content, $destination, $userdata = null)
    {
        return $content;
    }

    /**
     * parseOutgoingHTMLMessage
     * @param integer messageid: ID of the message
     * @param string  content: entire text content of a message going out
     * @param string  destination: destination email
     * @param array   userdata: associative array with data about user
     * @return string parsed content
     */
    public function parseOutgoingHTMLMessage($messageid, $content, $destination, $userdata = null)
    {
        return $content;
    }

    /**
      * getMessageAttachment($messageid,$mail->Body);
      * parameters: $messageid,$messagecontent
      * @return array (
      *  'content' => Content of the attachment
      *  'filename' => name of the attached file
      *  'mimetype' => mimetype of the attachment
      *  );
      */
    public function getMessageAttachment($messageid, $content)
    {
        return array();
    }

    /**
     * mimeWrap
     * purpose: wrap the actual contents of the message in another MIME layer
     * Designed to ENCRYPT the fully expanded message just before sending
     * Designed to be called by phplistmailer
     * parameters:
     *   messageid: message being sent
     *   body: current body of message
     *   header: current header of message, except for the Content-Type
     *   contenttype: Content-Type of message
     *   destination: email that this message is going out to
     * returns array(newheader,newbody,newcontenttype)
     */
    public function mimeWrap($messageid, $body, $header, $contenttype, $destination)
    {
        return array(
            $header,
            $body,
            $contenttype,
        );
    }

    /**
     * setFinalDestinationEmail
     * purpose: change the actual recipient based on user Attribute values:
     * parameters:
     *   messageid: message being sent
     *   uservalues: array of "attributename" => "attributevalue" of all user attributes
     *   email: email that this message is current set to go out to
     * @returN email that it should go out to
     */
    public function setFinalDestinationEmail($messageid, $uservalues, $email)
    {
        return $email;
    }

    /**
     * messageHeaders.
     *
     * return headers for the message to be added, as "key => val"
     *
     * @param object $mail
     *
     * @return array (headeritem => headervalue)
     */
    public function messageHeaders($mail)
    {
        return array();
    }

    /**
     * parseFinalMessage
     * purpose: create the actual message, based on the text and html content as prepared by phplist
     * parameters:
     * sendformat: the send format chosen by the admin
     *    if this is not one of the sendFormats() set up for this plugin, return 0
     * htmlmessage: contents of HTML version of message
     * textmessage: contents of Text version of message
     * mail:  mail object that is going to be send.
     *
     * ### you can alter the outgoing mail by calling the required methods of the mail object
     * returns 1 if the message has been dealt with successfully and 0 if not
     */
    public function parseFinalMessage($sendformat, $htmlmessage, $textmessage, &$mail, $messageid)
    {
        return 0;
    }

    /**
     * process the success or failure of sending an email in $sendformat.
     *
     * @deprecated, no longer used since 3.2.4
     */
    public function processSuccesFailure($messageid, $sendformat, $userdata, $success = true)
    {
    }

    /**
     * processSendSuccess.
     *
     * called when sending of this messageid to this subscriber was successful
     *
     * @param messageid integer
     * @param userdata array
     * @param isTest boolean, true when testmessage
     */
    public function processSendSuccess($messageid, $userdata, $isTest = false)
    {
    }

    /**
     * processSendFailed.
     *
     * called when sending of this messageid to this subscriber failed
     *
     * @param messageid integer
     * @param userdata array
     * @param isTest boolean, true when testmessage
     */
    public function processSendFailed($messageid, $userdata, $isTest = false)
    {
    }

    /*
     * processSendStats
     * called when sending a campaign has finished
     * @param integer $sent - amount sent
     * @param integer $invalid - amount invalid
     * @param integer $failed_sent - amount failed
     * @param integer $unconfirmed - amount unconfirmed
     *
     * receive stats from phpList for further handling
     * @return null
     */
    public function processSendStats($sent = 0, $invalid = 0, $failed_sent = 0, $unconfirmed = 0, $counters = array())
    {
        return;
    }

    /**
     * sendReport
     * @param string $subject
     * @param string $message
     * @return bool -> true if report has been processed and dealt with
     */
    public function sendReport($subject, $message)
    {
        return false;
    }

    /**
     * sendError
     * @param string $subject
     * @param string $to
     * @param string $message
     * @return null
     */
    public function sendError($subject, $to = '', $message = '')
    {
    }

    /**
     * processDBerror
     * @param integer $error number
     * @return null
     */
    public function processDBerror($errorid)
    {
    }

    /**
     * importReport
     * called when a subscriber import has finished
     * @param string $report
     * @return null
     */
    public function importReport($report)
    {
    }

    /**
     * processError
     * @param string msg
     */
    public function processError($msg)
    {
    }

    /**
     * processQueueStart
     * called at the beginning of processQueue, after the process was locked
     * @param none
     * @return null
     */
    public function processQueueStart()
    {
    }

    /**
     * allowProcessQueue
     * called at the beginning of processQueue
     * if this returns anything but "true" processing will be cancelled
     * @param none
     * @return bool
     */
    public function allowProcessQueue()
    {
        return true;
    }

    /**
     * sendtestAllowed
     * called when trying to send a test email
     * return false is sending a test email is not allowed
     * @param array messagedata
     * @return bool;
     */
    public function sendTestAllowed($messagedata)
    {
        return true;
    }

    /**
     * campaignStarted
     * called when sending of a campaign starts
     * @param array messagedata - associative array with all data for campaign
     * @return null
     */
    public function campaignStarted($messagedata = array())
    {
    }

    /**
     * allowMessageToBeQueued
     * called to verify that the message can be added to the queue
     * @param array messagedata - associative array with all data for campaign
     * @return empty string if allowed, or error string containing reason for not allowing
     */
    public function allowMessageToBeQueued($messagedata = array())
    {
        return '';
    }

    /**
     * messageQueued
     * called when a message is placed in the queue
     * @param integer id message id
     * @return null
     */
    public function messageQueued($id)
    {
    }

    /**
     * messageReQueued
     * called when a message is placed back in the queue
     * @param integer id message id
     * @return null
     */
    public function messageReQueued($id)
    {
    }

    /**
     * messageQueueFinished
     * called when a sending of the queue has finished
     * @return null
     */
    public function messageQueueFinished()
    {
    }

    /**
     * logEvent
     * @param string msg message to log
     * @return true when dealt with or false to pass on
     */
    public function logEvent($msg = '')
    {
        return false;
    }

    /**
     * login
     * called on login
     * @param none
     * @return true when user is successfully logged by plugin, false instead
     */
    public function login()
    {
        return false;
    }

    /**
     * logout
     * called on logout
     * @param none
     * @return null
     */
    public function logout()
    {
        return '';
    }

    /**
     * cronJobs.
     *
     * @param null
     *
     * @return array of cronjobs to call for this plugin
     *
     * eg
     * array(
     *    array( // cronJob1
     *     'page' => 'pagetocall',
     *     'frequency' => (int) minutes, // how often to call
     *    ),
     *    ...
     *    ...
     *    array( // cronJobN
     *     'page' => 'anotherpagetocall',
     *     'frequency' => (int) minutes, // how often to call
     *    ),
     * );
     */
    public function cronJobs()
    {
        return array();
    }

    /**
     * displayUsers.
     *
     * add columns for this plugin to WebblerListing
     * Currently used in users.php and members.php
     *
     * @param (array) user - associative array of user data
     * @param string         $rowid - $element of the WebblerListing
     * @param WebblerListing $list  - listing object to add to
     *
     * @note, unclear if this actually works. Better not to use it.
     */
    public function displayUsers($user, $rowid, $list)
    {
    }

    /**
     * deleteUser.
     *
     * allow plugins to delete their data when deleting a user
     *
     * @param int $id the ID of the subscriber
     */
    public function deleteUser($id)
    {
    }

    //###########################################################
    // List

    /**
     * purpose: return html snippet with plugin info for this list
     * Currently used in lists.php
     * 200711 Bas
     */
    public function displayLists($list)
    {
        return;
    }

    /**
     * purpose: return tablerows with list attributes for this list
     * Currently used in list.php
     * 200710 Bas
     */
    public function displayEditList($list)
    {
        return;
    }

    /**
     * purpose: process edit list page (usually save fields)
     * return false if failed
     * 200710 Bas
     */
    public function processEditList($id)
    {
        return true;
    }

    public function processSpamComplaint($email, $date)
    {
    }

    //###########################################################
    // Subscribe page

    /**
     * purpose: return tablerows with subscribepage options for this list
     * Currently used in spageedit.php
     * 200710 Bas
     */
    public function displaySubscribePageEdit($subscribePageData)
    {
        return;
    }

    /**
     * unsubscribePage
     * @param email string - email to unsubscribe
     * @return true when processed, which will then override the standard subscribe page
     */
    public function unsubscribePage($email)
    {
        return false;
    }

    /**
     * purpose: process selected subscribepage options for this list
     * return false if failed
     * Currently used in spageedit.php
     * 200710 Bas
     */
    public function processSubscribePageEdit($subscribePageID)
    {
        return true;
    }

    /**
     * purpose: show content for this plugin on the import page
     */
    public function importContent()
    {
        return '';
    }

    /**
     * validateEmailAddress
     * @param string $emailaddress
     * @return bool true if email address is correct
     */
    public function validateEmailAddress($emailAddress)
    {
        return true;
    }

    /**
      * isBlacklistedEmail
      * @param string $emailaddress
      * @return bool true if email address should is considered blacklisted
     */
    public function isBlackListedEmail($email = '')
    {
        return false;
    }

    /**
     * Allow additional processing of a link click.
     *
     * @param string $msgtype   H or T
     * @param int    $fwdid     id of row in linktrack_forward table
     * @param int    $messageid id of row in message table
     * @param int    $userid    id of row in user table
     * @param string $url       url of row in linktrack_forward table
     */
    public function linkClick($msgtype, $fwdid, $messageid, $userid, $url)
    {
    }

    //#####################################
    // Static functions to manage the collection of plugins

    /**
     * see if a plugin is enabled, static method so it can be called even if existance of plugin is unknown.
     */
    public static function isEnabled($pluginName)
    {
        return array_key_exists($pluginName, $GLOBALS['plugins']) && $GLOBALS['plugins'][$pluginName]->enabled;
    }
}

Filemanager

Name Type Size Permission Actions
PEAR Folder 0755
PHPMailer Folder 0755
PHPMailer6 Folder 0755
actions Folder 0755
css Folder 0755
data Folder 0755
help Folder 0755
images Folder 0755
inc Folder 0755
info Folder 0755
js Folder 0755
locale Folder 0755
onyxrss Folder 0755
plugins Folder 0755
tests Folder 0755
ui Folder 0755
.gitignore File 20 B 0644
.htaccess File 489 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
Updater.php File 193 B 0644
about.php File 7.4 KB 0644
accesscheck.php File 715 B 0644
addprefix.php File 1.01 KB 0644
adduser.php File 46 B 0644
admin.php File 12.77 KB 0644
adminattributes.php File 7.46 KB 0644
admins.php File 5.16 KB 0644
analytics.php File 2.84 KB 0644
attributes.php File 26.2 KB 0644
blacklistemail.php File 1.22 KB 0644
bounce.php File 11.14 KB 0644
bouncemgt.php File 1.44 KB 0644
bouncerule.php File 4.27 KB 0644
bouncerules.php File 6.33 KB 0644
bounces.php File 7.57 KB 0644
catlists.php File 3.34 KB 0644
checkbouncerules.php File 1.43 KB 0644
checki18n.php File 3.13 KB 0644
checkprerequisites.php File 1.62 KB 0644
class.image.inc File 3.9 KB 0644
class.phplistmailer.php File 30.73 KB 0644
class.phplistmailerbase.php File 1.67 KB 0644
community.php File 3.5 KB 0644
communityfeed.php File 2.36 KB 0644
configure.php File 7.85 KB 0644
connect.php File 89.86 KB 0644
convertstats.php File 5.83 KB 0644
converttoutf8.php File 3.78 KB 0644
cron.php File 3.34 KB 0644
date.php File 7.65 KB 0644
dbcheck.php File 3.7 KB 0644
defaultFrontendTexts.php File 9.79 KB 0644
defaultconfig.php File 30.66 KB 0644
defaultplugin.php File 31.59 KB 0644
defaults.php File 3.64 KB 0644
defaultsystemtemplate.php File 15.29 KB 0644
defaulttest.php File 1.23 KB 0644
dlusers.php File 235 B 0644
domainbounces.php File 507 B 0644
domainstats.php File 371 B 0644
editattributes.php File 8.78 KB 0644
editlist.php File 7.4 KB 0644
eventlog.php File 4.68 KB 0644
export.php File 6.86 KB 0644
exportuserdata.php File 8.26 KB 0644
fckphplist.php File 49.84 KB 0644
gchart.php File 903 B 0644
generatebouncerules.php File 5.51 KB 0644
home.php File 6.56 KB 0644
hostedprocessqueuesetup.php File 3.09 KB 0644
htaccess File 311 B 0644
image.php File 2.01 KB 0644
import.php File 2.75 KB 0644
import1.php File 11.09 KB 0644
import2.php File 34.16 KB 0644
import3.php File 22.72 KB 0644
import4.php File 16.86 KB 0644
importadmin.php File 17.08 KB 0644
importsimple.php File 7.32 KB 0644
index.php File 32.82 KB 0644
info.php File 1.07 KB 0644
init.php File 27.36 KB 0644
initialise.php File 12.05 KB 0644
initlanguages.php File 867 B 0644
languages.php File 21.37 KB 0644
lib.php File 86.79 KB 0644
list.php File 11.32 KB 0644
listbounces.php File 4.13 KB 0644
login.php File 6.39 KB 0644
logout.php File 865 B 0644
massremove.php File 2.55 KB 0644
mclicks.php File 7.28 KB 0644
members.php File 19.99 KB 0644
mergeduplicates.php File 4.48 KB 0644
message.php File 9.08 KB 0644
messages.php File 26.27 KB 0644
minify.txt File 201 B 0644
msgbounces.php File 3.4 KB 0644
msgstatus.php File 1.27 KB 0644
mviews.php File 6.27 KB 0644
mysql.inc File 40 B 0644
mysqli.inc File 14.02 KB 0644
pageaction.php File 1.11 KB 0644
phpListAdminAuthentication.php File 6.82 KB 0644
pluginlib.php File 9.43 KB 0644
plugins.php File 17.78 KB 0644
preparesend.php File 669 B 0644
processbounces.php File 35.36 KB 0644
processqueue.php File 3.71 KB 0644
readtestmail.php File 11.59 KB 0644
reconcileusers.php File 27.71 KB 0644
redirecttoupdater.php File 187 B 0644
reindex.php File 1.82 KB 0644
rsslib.php File 3.17 KB 0644
runcommand.php File 583 B 0644
send.php File 6.17 KB 0644
send_core.php File 63.91 KB 0644
sendemaillib.php File 69.84 KB 0644
sendprepared.php File 4.87 KB 0644
sessionlib.php File 2.7 KB 0644
setpermissions.php File 2.08 KB 0644
setup.php File 2.56 KB 0644
spage.php File 4.35 KB 0644
spageedit.php File 19.08 KB 0644
statsmgt.php File 1.23 KB 0644
statsoverview.php File 6.19 KB 0644
stresstest.php File 4.82 KB 0644
structure.php File 29.21 KB 0644
subscribelib2.php File 70.22 KB 0644
subscriberstats.php File 617 B 0644
suppressionlist.php File 1.71 KB 0644
system.php File 795 B 0644
systemstats.php File 5.73 KB 0644
template.php File 16.4 KB 0644
templates.php File 3.01 KB 0644
tests.php File 1.67 KB 0644
uclicks.php File 6.74 KB 0644
update.php File 187 B 0644
updateLib.php File 2.2 KB 0644
updatetlds.php File 358 B 0644
updatetranslation.php File 2.51 KB 0644
upgrade.php File 23.82 KB 0644
user.php File 23.08 KB 0644
usercheck.php File 2.55 KB 0644
userclicks.php File 11.57 KB 0644
userhistory.php File 8.25 KB 0644
usermgt.php File 1.9 KB 0644
users.php File 19.3 KB 0644
vCard.php File 1.9 KB 0644
viewmessage.php File 635 B 0644
viewtemplate.php File 1.86 KB 0644
vote.php File 38 B 0644