private function test_connection() { if (!self::ping($this->wpdb->dbh)) { MainWP_Logger::Instance()->info('Trying to reconnect Wordpress DB Connection'); $this->wpdb->db_connect(); } }
public function mainwp_log_warning($pText) { MainWP_Logger::Instance()->warning($pText); }
function parse_init() { if (isset($_GET['do']) && $_GET['do'] == 'testLog') { MainWP_Logger::Instance()->debug('ruben'); } if (isset($_GET['do']) && $_GET['do'] == 'cronBackups') { $this->mainwp_cronbackups_action(); } else { if (isset($_GET['do']) && $_GET['do'] == 'cronBackupsContinue') { $this->mainwp_cronbackups_continue_action(); } else { if (isset($_GET['do']) && $_GET['do'] == 'cronStats') { $this->mainwp_cronstats_action(); } else { if (isset($_GET['do']) && $_GET['do'] == 'cronUpdatesCheck') { $this->mainwp_cronupdatescheck_action(); } else { if (isset($_GET['mwpdl']) && isset($_GET['sig'])) { $mwpDir = MainWP_Utility::getMainWPDir(); $mwpDir = $mwpDir[0]; $file = trailingslashit($mwpDir) . rawurldecode($_REQUEST['mwpdl']); if (stristr(rawurldecode($_REQUEST['mwpdl']), '..')) { return; } if (file_exists($file) && md5(filesize($file)) == $_GET['sig']) { $this->uploadFile($file); exit; } } else { if (isset($_GET['page'])) { switch ($_GET['page']) { case 'mainwp-setup': new MainWP_Setup_Wizard(); break; } } } } } } } }
public static function renderActionLogs() { self::renderHeader('Action logs'); if (isset($_REQUEST['actionlogs_status'])) { if ($_REQUEST['actionlogs_status'] != MainWP_Logger::DISABLED) { MainWP_Logger::Instance()->setLogPriority($_REQUEST['actionlogs_status']); } MainWP_Logger::Instance()->log('Action logs set to: ' . MainWP_Logger::Instance()->getLogText($_REQUEST['actionlogs_status']), MainWP_Logger::LOG); if ($_REQUEST['actionlogs_status'] == MainWP_Logger::DISABLED) { MainWP_Logger::Instance()->setLogPriority($_REQUEST['actionlogs_status']); } MainWP_Utility::update_option('mainwp_actionlogs', $_REQUEST['actionlogs_status']); } $enabled = get_option('mainwp_actionlogs'); if ($enabled === false) { $enabled = MainWP_Logger::DISABLED; } ?> <div class="postbox" id="mainwp-code-display"> <h3 class="hndle" style="padding: 8px 12px; font-size: 14px;"><span>Action logs</span></h3> <div style="padding: 1em;"> <form method="POST" action=""> Status: <select name="actionlogs_status"> <option value="<?php echo MainWP_Logger::DISABLED; ?> " <?php if (MainWP_Logger::DISABLED == $enabled) { echo 'selected'; } ?> >Disabled </option> <option value="<?php echo MainWP_Logger::WARNING; ?> " <?php if (MainWP_Logger::WARNING == $enabled) { echo 'selected'; } ?> >Warning </option> <option value="<?php echo MainWP_Logger::INFO; ?> " <?php if (MainWP_Logger::INFO == $enabled) { echo 'selected'; } ?> >Info </option> <option value="<?php echo MainWP_Logger::DEBUG; ?> " <?php if (MainWP_Logger::DEBUG == $enabled) { echo 'selected'; } ?> >Debug </option> </select> <input type="submit" class="button button-primary" value="Save"/> </form> </div> <div style="padding: 1em;"><?php MainWP_Logger::showLog(); ?> </div> </div> <?php self::renderFooter('Action logs'); }
static function _fetchUrl(&$website, $url, $postdata, $checkConstraints = false, $pForceFetch = false, $verifyCertificate = null, $http_user = null, $http_pass = null, $sslVersion = 0) { //$agent = 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'; $agent = 'Mozilla/5.0 (compatible; MainWP/' . MainWP_System::$version . '; +http://mainwp.com)'; if (!$pForceFetch) { //todo: RS: //check if offline } $identifier = null; if ($checkConstraints) { $semLock = '103218'; //SNSyncLock //Lock $identifier = MainWP_Utility::getLockIdentifier($semLock); //Check the delays //In MS $minimumDelay = get_option('mainwp_minimumDelay') === false ? 200 : get_option('mainwp_minimumDelay'); if ($minimumDelay > 0) { $minimumDelay = $minimumDelay / 1000; } $minimumIPDelay = get_option('mainwp_minimumIPDelay') === false ? 1000 : get_option('mainwp_minimumIPDelay'); if ($minimumIPDelay > 0) { $minimumIPDelay = $minimumIPDelay / 1000; } MainWP_Utility::endSession(); $delay = true; while ($delay) { MainWP_Utility::lock($identifier); if ($minimumDelay > 0) { //Check last request overall $lastRequest = MainWP_DB::Instance()->getLastRequestTimestamp(); if ($lastRequest > microtime(true) - $minimumDelay) { //Delay! MainWP_Utility::release($identifier); usleep(($minimumDelay - (microtime(true) - $lastRequest)) * 1000 * 1000); continue; } } if ($minimumIPDelay > 0 && $website != null) { //Get ip of this site url $ip = MainWP_DB::Instance()->getWPIp($website->id); if ($ip != null && $ip != '') { //Check last request for this site $lastRequest = MainWP_DB::Instance()->getLastRequestTimestamp($ip); //Check last request for this subnet? if ($lastRequest > microtime(true) - $minimumIPDelay) { //Delay! MainWP_Utility::release($identifier); usleep(($minimumIPDelay - (microtime(true) - $lastRequest)) * 1000 * 1000); continue; } } } $delay = false; } //Check the simultaneous requests $maximumRequests = get_option('mainwp_maximumRequests') === false ? 4 : get_option('mainwp_maximumRequests'); $maximumIPRequests = get_option('mainwp_maximumIPRequests') === false ? 1 : get_option('mainwp_maximumIPRequests'); $first = true; $delay = true; while ($delay) { if (!$first) { MainWP_Utility::lock($identifier); } else { $first = false; } //Clean old open requests (may have timed out or something..) MainWP_DB::Instance()->closeOpenRequests(); if ($maximumRequests > 0) { $nrOfOpenRequests = MainWP_DB::Instance()->getNrOfOpenRequests(); if ($nrOfOpenRequests >= $maximumRequests) { //Delay! MainWP_Utility::release($identifier); //Wait 200ms usleep(200000); continue; } } if ($maximumIPRequests > 0 && $website != null) { //Get ip of this site url $ip = MainWP_DB::Instance()->getWPIp($website->id); if ($ip != null && $ip != '') { $nrOfOpenRequests = MainWP_DB::Instance()->getNrOfOpenRequests($ip); if ($nrOfOpenRequests >= $maximumIPRequests) { //Delay! MainWP_Utility::release($identifier); //Wait 200ms usleep(200000); continue; } } } $delay = false; } } if ($website != null) { //Log the start of this request! MainWP_DB::Instance()->insertOrUpdateRequestLog($website->id, null, microtime(true), null); } if ($identifier != null) { //Unlock MainWP_Utility::release($identifier); } $dirs = self::getMainWPDir(); $cookieDir = $dirs[0] . 'cookies'; if (!@is_dir($cookieDir)) { @mkdir($cookieDir, 0777, true); } if (!file_exists($cookieDir . '/.htaccess')) { $file_htaccess = @fopen($cookieDir . '/.htaccess', 'w+'); @fwrite($file_htaccess, 'deny from all'); @fclose($file_htaccess); } if (!file_exists($cookieDir . '/index.php')) { $file_index = @fopen($cookieDir . '/index.php', 'w+'); @fclose($file_index); } $ch = curl_init(); if ($website != null) { $cookieFile = $cookieDir . '/' . sha1(sha1('mainwp' . LOGGED_IN_SALT . $website->id) . NONCE_SALT . 'WP_Cookie'); if (!file_exists($cookieFile)) { @file_put_contents($cookieFile, ''); } if (file_exists($cookieFile)) { @curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile); @curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile); } } @curl_setopt($ch, CURLOPT_URL, $url); @curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); @curl_setopt($ch, CURLOPT_POST, true); @curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); @curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); @curl_setopt($ch, CURLOPT_USERAGENT, $agent); if (!empty($http_user) && !empty($http_pass)) { @curl_setopt($ch, CURLOPT_USERPWD, "{$http_user}:{$http_pass}"); } $ssl_verifyhost = false; if ($verifyCertificate !== null) { if ($verifyCertificate == 1) { $ssl_verifyhost = true; } else { if ($verifyCertificate == 2) { // use global setting if (get_option('mainwp_sslVerifyCertificate') === false || get_option('mainwp_sslVerifyCertificate') == 1) { $ssl_verifyhost = true; } } } } else { if (get_option('mainwp_sslVerifyCertificate') === false || get_option('mainwp_sslVerifyCertificate') == 1) { $ssl_verifyhost = true; } } if ($ssl_verifyhost) { @curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); @curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); } else { @curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); @curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); } @curl_setopt($ch, CURLOPT_SSLVERSION, $sslVersion); $timeout = 20 * 60 * 60; //20 minutes @curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); if (!ini_get('safe_mode')) { @set_time_limit($timeout); } @ini_set('max_execution_time', $timeout); MainWP_Utility::endSession(); $disabled_functions = ini_get('disable_functions'); if (empty($disabled_functions) || stristr($disabled_functions, 'curl_multi_exec') === false) { $mh = @curl_multi_init(); @curl_multi_add_handle($mh, $ch); $lastRun = 0; do { if (time() - $lastRun > 20) { @set_time_limit($timeout); //reset timer.. $lastRun = time(); } @curl_multi_exec($mh, $running); //Execute handlers //$ready = curl_multi_select($mh); while ($info = @curl_multi_info_read($mh)) { $data = @curl_multi_getcontent($info['handle']); $http_status = @curl_getinfo($info['handle'], CURLINFO_HTTP_CODE); $err = @curl_error($info['handle']); $real_url = @curl_getinfo($info['handle'], CURLINFO_EFFECTIVE_URL); @curl_multi_remove_handle($mh, $info['handle']); } usleep(10000); } while ($running > 0); @curl_multi_close($mh); } else { $data = @curl_exec($ch); $http_status = @curl_getinfo($ch, CURLINFO_HTTP_CODE); $err = @curl_error($ch); $real_url = @curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); } $host = parse_url($real_url, PHP_URL_HOST); $ip = gethostbyname($host); if ($website != null) { MainWP_DB::Instance()->insertOrUpdateRequestLog($website->id, $ip, null, microtime(true)); } if ($data === false && $http_status == 0) { MainWP_Logger::Instance()->debugForWebsite($website, 'fetchUrl', '[' . $url . '] HTTP Error: [status=0][' . $err . ']'); throw new MainWP_Exception('HTTPERROR', $err); } else { if (empty($data) && !empty($err)) { MainWP_Logger::Instance()->debugForWebsite($website, 'fetchUrl', '[' . $url . '] HTTP Error: [status=' . $http_status . '][' . $err . ']'); throw new MainWP_Exception('HTTPERROR', $err); } else { if (preg_match('/<mainwp>(.*)<\\/mainwp>/', $data, $results) > 0) { $result = $results[1]; $information = unserialize(base64_decode($result)); return $information; } else { MainWP_Logger::Instance()->debugForWebsite($website, 'fetchUrl', '[' . $url . '] Result was: [' . $data . ']'); throw new MainWP_Exception('NOMAINWP', $url); } } } }
public static function syncInformationArray(&$pWebsite, &$information, $sync_errors = '', $offline_check_result = 1, $error = false, $pAllowDisconnect = true) { $emptyArray = json_encode(array()); $websiteValues = array('directories' => $emptyArray, 'plugin_upgrades' => $emptyArray, 'theme_upgrades' => $emptyArray, 'translation_upgrades' => $emptyArray, 'securityIssues' => $emptyArray, 'themes' => $emptyArray, 'plugins' => $emptyArray, 'users' => $emptyArray, 'categories' => $emptyArray, 'pluginConflicts' => $emptyArray, 'themeConflicts' => $emptyArray, 'offline_check_result' => $offline_check_result); $websiteSyncValues = array('uptodate' => 0, 'sync_errors' => $sync_errors, 'version' => 0); $done = false; if (isset($information['siteurl'])) { $websiteValues['siteurl'] = $information['siteurl']; $done = true; } if (isset($information['version'])) { $websiteSyncValues['version'] = $information['version']; $done = true; } if (isset($information['directories']) && is_array($information['directories'])) { $websiteValues['directories'] = @json_encode($information['directories']); $done = true; } else { if (isset($information['directories'])) { $websiteValues['directories'] = $information['directories']; $done = true; } } if (isset($information['wp_updates']) && $information['wp_updates'] != null) { MainWP_DB::Instance()->updateWebsiteOption($pWebsite, 'wp_upgrades', @json_encode(array('current' => $information['wpversion'], 'new' => $information['wp_updates']))); $done = true; } else { MainWP_DB::Instance()->updateWebsiteOption($pWebsite, 'wp_upgrades', $emptyArray); } if (isset($information['plugin_updates'])) { $websiteValues['plugin_upgrades'] = @json_encode($information['plugin_updates']); $done = true; } if (isset($information['theme_updates'])) { $websiteValues['theme_upgrades'] = @json_encode($information['theme_updates']); $done = true; } if (isset($information['translation_updates'])) { $websiteValues['translation_upgrades'] = @json_encode($information['translation_updates']); $done = true; } if (isset($information['premium_updates'])) { MainWP_DB::Instance()->updateWebsiteOption($pWebsite, 'premium_upgrades', @json_encode($information['premium_updates'])); $done = true; } else { MainWP_DB::Instance()->updateWebsiteOption($pWebsite, 'premium_upgrades', $emptyArray); } if (isset($information['securityIssues']) && MainWP_Utility::ctype_digit($information['securityIssues']) && $information['securityIssues'] >= 0) { $websiteValues['securityIssues'] = $information['securityIssues']; $done = true; } if (isset($information['recent_comments'])) { MainWP_DB::Instance()->updateWebsiteOption($pWebsite, 'recent_comments', @json_encode($information['recent_comments'])); $done = true; } else { MainWP_DB::Instance()->updateWebsiteOption($pWebsite, 'recent_comments', $emptyArray); } if (isset($information['recent_posts'])) { MainWP_DB::Instance()->updateWebsiteOption($pWebsite, 'recent_posts', @json_encode($information['recent_posts'])); $done = true; } else { MainWP_DB::Instance()->updateWebsiteOption($pWebsite, 'recent_posts', $emptyArray); } if (isset($information['recent_pages'])) { MainWP_DB::Instance()->updateWebsiteOption($pWebsite, 'recent_pages', @json_encode($information['recent_pages'])); $done = true; } else { MainWP_DB::Instance()->updateWebsiteOption($pWebsite, 'recent_pages', $emptyArray); } if (isset($information['themes'])) { $websiteValues['themes'] = @json_encode($information['themes']); $done = true; } $to_fix = false; if (isset($information['plugins'])) { foreach ($information['plugins'] as $info) { if (isset($info['slug']) && in_array($info['slug'], array('ithemes-security-pro/ithemes-security-pro.php', 'monarch/monarch.php'))) { $to_fix = true; } } $websiteValues['plugins'] = @json_encode($information['plugins']); $done = true; } if ($to_fix) { $request = get_option('mainwp_request_plugins_page_site_' . $pWebsite->id); if (empty($request)) { update_option('mainwp_request_plugins_page_site_' . $pWebsite->id, 'yes'); } } else { if ('yes' == get_option('mainwp_request_plugins_page_site_' . $pWebsite->id)) { delete_option('mainwp_request_plugins_page_site_' . $pWebsite->id); } } if (isset($information['users'])) { $websiteValues['users'] = @json_encode($information['users']); $done = true; } if (isset($information['categories'])) { $websiteValues['categories'] = @json_encode($information['categories']); $done = true; } if (isset($information['totalsize'])) { $websiteSyncValues['totalsize'] = $information['totalsize']; $done = true; } if (isset($information['dbsize'])) { $websiteSyncValues['dbsize'] = $information['dbsize']; $done = true; } if (isset($information['extauth'])) { $websiteSyncValues['extauth'] = $information['extauth']; $done = true; } if (isset($information['pluginConflicts'])) { $websiteValues['pluginConflicts'] = @json_encode($information['pluginConflicts']); $done = true; } if (isset($information['themeConflicts'])) { $websiteValues['themeConflicts'] = @json_encode(array_filter($information['themeConflicts'])); $done = true; } if (isset($information['last_post_gmt'])) { $websiteSyncValues['last_post_gmt'] = $information['last_post_gmt']; $done = true; } if (isset($information['mainwpdir'])) { $websiteValues['mainwpdir'] = $information['mainwpdir']; $done = true; } if (isset($information['uniqueId'])) { $websiteValues['uniqueId'] = $information['uniqueId']; $done = true; } if (isset($information['faviIcon'])) { MainWP_DB::Instance()->updateWebsiteOption($pWebsite, 'favi_icon', trim($information['faviIcon'])); $done = true; } else { MainWP_DB::Instance()->updateWebsiteOption($pWebsite, 'favi_icon', ''); } if (isset($information['plugins_outdate_info'])) { MainWP_DB::Instance()->updateWebsiteOption($pWebsite, 'plugins_outdate_info', @json_encode($information['plugins_outdate_info'])); $done = true; } else { MainWP_DB::Instance()->updateWebsiteOption($pWebsite, 'plugins_outdate_info', $emptyArray); } if (isset($information['themes_outdate_info'])) { MainWP_DB::Instance()->updateWebsiteOption($pWebsite, 'themes_outdate_info', @json_encode($information['themes_outdate_info'])); $done = true; } else { MainWP_DB::Instance()->updateWebsiteOption($pWebsite, 'themes_outdate_info', $emptyArray); } if (!$done) { if (isset($information['wpversion'])) { $websiteSyncValues['uptodate'] = 1; $done = true; } else { if (isset($information['error'])) { MainWP_Logger::Instance()->warningForWebsite($pWebsite, 'SYNC ERROR', '[' . $information['error'] . ']'); $error = true; $done = true; $websiteSyncValues['sync_errors'] = __('Error - ', 'mainwp') . $information['error']; } else { if (!empty($sync_errors)) { MainWP_Logger::Instance()->warningForWebsite($pWebsite, 'SYNC ERROR', '[' . $sync_errors . ']'); $error = true; if (!$pAllowDisconnect) { $sync_errors = ''; } $websiteSyncValues['sync_errors'] = $sync_errors; } else { MainWP_Logger::Instance()->warningForWebsite($pWebsite, 'SYNC ERROR', '[Undefined error]'); $error = true; if ($pAllowDisconnect) { $websiteSyncValues['sync_errors'] = __('Undefined error - please reinstall the MainWP Child Plugin on the client site', 'mainwp'); } } } } } if ($done) { $websiteSyncValues['dtsSync'] = time(); } MainWP_DB::Instance()->updateWebsiteSyncValues($pWebsite->id, $websiteSyncValues); MainWP_DB::Instance()->updateWebsiteValues($pWebsite->id, $websiteValues); //Sync action if (!$error) { do_action('mainwp-site-synced', $pWebsite, $information); } return !$error; }
public static function showLog() { $logFile = MainWP_Logger::Instance()->getLogFile(); $fh = @fopen($logFile, 'r'); if ($fh === false) { return; } $previousColor = ''; //self::LOG_COLOR; $fontOpen = false; $firstLinePassedProcessed = false; while (($line = fgets($fh)) !== false) { $currentColor = $previousColor; if (stristr($line, '[DEBUG]')) { $currentColor = self::DEBUG_COLOR; $firstLinePassed = true; } else { if (stristr($line, '[INFO]')) { $currentColor = self::INFO_COLOR; $firstLinePassed = true; } else { if (stristr($line, '[WARNING]')) { $currentColor = self::WARNING_COLOR; $firstLinePassed = true; } else { if (stristr($line, '[LOG]')) { $currentColor = self::LOG_COLOR; $firstLinePassed = true; } else { $firstLinePassed = false; } } } } if ($firstLinePassedProcessed && !$firstLinePassed) { echo ' <strong><font color="green">[multiline, click to read full]</font></strong></div><div style="display: none;">'; } else { echo '<br />'; } $firstLinePassedProcessed = $firstLinePassed; if ($currentColor != $previousColor) { if ($fontOpen) { echo '</div></font>'; } echo '<font color="' . $currentColor . '"><div class="mainwpactionlogsline">'; $fontOpen = true; } // process the line read. echo htmlentities($line); } if ($fontOpen) { echo '</div></font>'; } @fclose($fh); }