Ejemplo n.º 1
0
 public function get($string)
 {
     $key = Text::lowercase($string);
     $key = Text::replace(' ', '-', $key);
     if (isset($this->db[$key])) {
         return $this->db[$key];
     }
     return '';
 }
Ejemplo n.º 2
0
 private function build($slug)
 {
     // Check if directory exists for the slug
     /*$path = glob($this->path.$slug, GLOB_ONLYDIR);
     		if(empty($path))
     			return false;
     		
     
     		// Get the first element from the directories array
     		//$path = $path[0];
     		*/
     $path = $this->path . $slug;
     if (!is_dir($path)) {
         return false;
     }
     // Path
     $this->setField('path', $path);
     // Slug
     $this->setField('slug', $slug);
     // Check if file exists
     $file = $path . '/index.txt';
     if (!file_exists($file)) {
         return false;
     }
     $tmp = 0;
     $lines = file($file);
     foreach ($lines as $lineNumber => $line) {
         $parts = array_map('trim', explode(':', $line, 2));
         // Lowercase variable
         $parts[0] = Text::lowercase($parts[0]);
         if ($parts[0] === 'content') {
             $tmp = $lineNumber;
             break;
         }
         if (!empty($parts[0]) && !empty($parts[1])) {
             $this->vars[$parts[0]] = $parts[1];
         }
     }
     // Content
     if ($tmp != 0) {
         $tmp++;
         // Next line after Content:
         $output = array_slice($lines, $tmp);
         // Lines after Content
         $this->vars['content'] = implode($output);
     }
     //
 }
Ejemplo n.º 3
0
 private function build($path)
 {
     if (!Sanitize::pathFile($path . FILENAME)) {
         return false;
     }
     $tmp = 0;
     $lines = file($path . FILENAME);
     foreach ($lines as $lineNumber => $line) {
         $parts = array_map('trim', explode(':', $line, 2));
         // Lowercase variable
         $parts[0] = Text::lowercase($parts[0]);
         // If variables is content then break the foreach and process the content after.
         if ($parts[0] === 'content') {
             $tmp = $lineNumber;
             break;
         }
         if (!empty($parts[0]) && !empty($parts[1])) {
             // Sanitize all fields, except Content.
             $this->vars[$parts[0]] = Sanitize::html($parts[1]);
         }
     }
     // Process the content.
     if ($tmp !== 0) {
         // Next line after "Content:" variable
         $tmp++;
         // Remove lines after Content
         $output = array_slice($lines, $tmp);
         if (!empty($parts[1])) {
             array_unshift($output, "\n");
             array_unshift($output, $parts[1]);
         }
         $implode = implode($output);
         $this->vars['content'] = $implode;
         // Sanitize content.
         //$this->vars['content'] = Sanitize::html($implode);
     }
 }
Ejemplo n.º 4
0
<?php

defined('BLUDIT') or die('Bludit CMS.');
header('Content-Type: application/json');
// Type
$type = 'other';
if (!empty($_POST['type'])) {
    $type = Sanitize::html($_POST['type']);
}
// Source.
$source = $_FILES['files']['tmp_name'][0];
// Filename and extension.
$filename = Text::lowercase($_FILES['files']['name'][0]);
$fileExtension = pathinfo($filename, PATHINFO_EXTENSION);
$filename = pathinfo($filename, PATHINFO_FILENAME);
$filename = Text::replace(' ', '', $filename);
$filename = Text::replace('_', '', $filename);
// Generate the next filename if the filename already exist.
$tmpName = $filename . '.' . $fileExtension;
if (file_exists(PATH_UPLOADS . $tmpName)) {
    $number = 0;
    $tmpName = $filename . '_' . $number . '.' . $fileExtension;
    while (file_exists(PATH_UPLOADS . $tmpName)) {
        $number++;
        $tmpName = $filename . '_' . $number . '.' . $fileExtension;
    }
}
// Move from temporary PHP folder to temporary Bludit folder.
move_uploaded_file($source, PATH_TMP . 'original' . '.' . $fileExtension);
// --- PROFILE PICTURE ---
if ($type == 'profilePicture') {
 /**
  * Get components
  */
 protected static function getComponents()
 {
     $components = array();
     if (count(Plugin::$components) > 0) {
         foreach (Plugin::$components as $component) {
             if (!in_array($component, Sitemap::$forbidden_components)) {
                 $components[] = Text::lowercase($component);
             }
         }
     }
     return $components;
 }
Ejemplo n.º 6
0
 /**
  * Create safe name. Use to create safe username, filename, pagename.
  *
  *  <code>
  *      $safe_name = Security::safeName('hello world');
  *  </code>
  *
  * @param  string  $str       String
  * @param  mixed   $delimiter String delimiter
  * @param  boolean $lowercase String Lowercase
  * @return string
  */
 public static function safeName($str, $delimiter = '-', $lowercase = false)
 {
     // Redefine vars
     $str = (string) $str;
     $delimiter = $delimiter;
     $lowercase = (bool) $lowercase;
     $delimiter = $delimiter;
     // Remove tags
     $str = filter_var($str, FILTER_SANITIZE_STRING);
     // Decode all entities to their simpler forms
     $str = html_entity_decode($str, ENT_QUOTES, 'UTF-8');
     // Reserved characters (RFC 3986)
     $reserved_characters = array('/', '?', ':', '@', '#', '[', ']', '!', '$', '&', '\'', '(', ')', '*', '+', ',', ';', '=');
     // Remove reserved characters
     $str = str_replace($reserved_characters, ' ', $str);
     // Set locale to en_US.UTF8
     setlocale(LC_ALL, 'en_US.UTF8');
     // Translit ua,ru => latin
     $str = Text::translitIt($str);
     // Convert string
     $str = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
     // Remove characters
     $str = preg_replace("/[^a-zA-Z0-9\\/_|+ -]/", '', $str);
     if ($delimiter != null) {
         $str = preg_replace("/[\\/_|+ -]+/", $delimiter, $str);
         $str = trim($str, $delimiter);
     }
     // Lowercase
     if ($lowercase === true) {
         $str = Text::lowercase($str);
     }
     // Return safe name
     return $str;
 }
Ejemplo n.º 7
0
 /**
  * Get components
  */
 protected static function getComponents()
 {
     $components = array();
     if (count(Plugin::$components) > 0) {
         foreach (Plugin::$components as $component) {
             if ($component !== 'pages' && $component !== 'sitemap') {
                 $components[] = Text::lowercase($component);
             }
         }
     }
     return $components;
 }
Ejemplo n.º 8
0
                        <td>
                            <div class="pull-right">
                            <?php 
    if (File::exists(PLUGINS . DS . basename($plug['plugin'], '.manifest.xml') . DS . 'README.md')) {
        ?>
                            <?php 
        echo Html::anchor(__('Info', 'plugins'), '#', array('class' => 'btn btn-info readme_plugin', 'data-toggle' => 'modal', 'data-target' => '#readme', 'readme_plugin' => basename($plug['plugin'], '.manifest.xml')));
        ?>
                            <?php 
    }
    ?>
                            <?php 
    echo Html::anchor(__('Install', 'plugins'), 'index.php?id=plugins&install=' . $plug['plugin'] . '&token=' . Security::token(), array('class' => 'btn btn-primary'));
    ?>
                            <?php 
    echo Html::anchor(__('Delete', 'plugins'), 'index.php?id=plugins&delete_plugin_from_server=' . Text::lowercase(basename($plug['path'], '.manifest.xml')) . '&token=' . Security::token(), array('class' => 'btn btn-danger', 'onclick' => "return confirmDelete('" . __('Delete plugin :plugin', 'plugins', array(':plugin' => $plugin_xml->plugin_name)) . "')"));
    ?>
                            </div>
                        </td>
                    </tr>
                    <?php 
}
?>
                </tbody>
            </table>
            </div>

		 <?php 
if (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN') {
    ?>
			<div class="row">
 /**
  * Plugins admin
  */
 public static function main()
 {
     // Get siteurl
     $site_url = Option::get('siteurl');
     // Get installed plugin from $plugins array
     $installed_plugins = Plugin::$plugins;
     // Get installed users plugins
     $_users_plugins = array();
     foreach (Plugin::$plugins as $plugin) {
         if ($plugin['privilege'] !== 'box') {
             $_users_plugins[] = $plugin['id'];
         }
     }
     // Get plugins table
     $plugins = new Table('plugins');
     // Delete plugin
     // -------------------------------------
     if (Request::get('delete_plugin')) {
         if (Security::check(Request::get('token'))) {
             // Nobody cant remove box plugins
             if ($installed_plugins[Text::lowercase(str_replace("Plugin", "", Request::get('delete_plugin')))]['privilege'] !== 'box') {
                 // Run plugin uninstaller file
                 $plugin_name = Request::get('delete_plugin');
                 if (File::exists(PLUGINS . DS . $plugin_name . DS . 'install' . DS . $plugin_name . '.uninstall.php')) {
                     include PLUGINS . DS . $plugin_name . DS . 'install' . DS . $plugin_name . '.uninstall.php';
                 }
                 // Clean Monstra TMP folder.
                 Monstra::cleanTmp();
                 // Increment Styles and Javascript version
                 Stylesheet::stylesVersionIncrement();
                 Javascript::javascriptVersionIncrement();
                 // Delete plugin form plugins table
                 $plugins->deleteWhere('[name="' . Request::get('delete_plugin') . '"]');
                 // Redirect
                 Request::redirect('index.php?id=plugins');
             }
         } else {
             die('Request was denied because it contained an invalid security token. Please refresh the page and try again.');
         }
     }
     // Install new plugin
     // -------------------------------------
     if (Request::get('install')) {
         if (Security::check(Request::get('token'))) {
             // Load plugin install xml file
             $plugin_xml = XML::loadFile(PLUGINS . DS . basename(Text::lowercase(Request::get('install')), '.manifest.xml') . DS . 'install' . DS . Request::get('install'));
             // Add plugin to plugins table
             $plugins->insert(array('name' => basename(Request::get('install'), '.manifest.xml'), 'location' => (string) $plugin_xml->plugin_location, 'status' => (string) $plugin_xml->plugin_status, 'priority' => (int) $plugin_xml->plugin_priority));
             // Clean Monstra TMP folder.
             Monstra::cleanTmp();
             Stylesheet::stylesVersionIncrement();
             Javascript::javascriptVersionIncrement();
             // Run plugin installer file
             $plugin_name = str_replace(array("Plugin", ".manifest.xml"), "", Request::get('install'));
             if (File::exists(PLUGINS . DS . basename(Text::lowercase(Request::get('install')), '.manifest.xml') . DS . 'install' . DS . $plugin_name . '.install.php')) {
                 include PLUGINS . DS . basename(Text::lowercase(Request::get('install')), '.manifest.xml') . DS . 'install' . DS . $plugin_name . '.install.php';
             }
             Request::redirect('index.php?id=plugins');
         } else {
             die('Request was denied because it contained an invalid security token. Please refresh the page and try again.');
         }
     }
     // Delete plugin from server
     // -------------------------------------
     if (Request::get('delete_plugin_from_server')) {
         if (Security::check(Request::get('token'))) {
             // Clean Monstra TMP folder.
             Monstra::cleanTmp();
             Stylesheet::stylesVersionIncrement();
             Javascript::javascriptVersionIncrement();
             Dir::delete(PLUGINS . DS . basename(Request::get('delete_plugin_from_server'), '.manifest.xml'));
             Request::redirect('index.php?id=plugins');
         } else {
             die('Request was denied because it contained an invalid security token. Please refresh the page and try again.');
         }
     }
     // Upload & extract plugin archive
     // -------------------------------------
     if (Request::post('upload_file')) {
         if (Security::check(Request::post('csrf'))) {
             if ($_FILES['file']) {
                 if (in_array(File::ext($_FILES['file']['name']), array('zip'))) {
                     $tmp_dir = ROOT . DS . 'tmp' . DS . uniqid('plugin_');
                     $error = 'Plugin was not uploaded';
                     if (Dir::create($tmp_dir)) {
                         $file_locations = Zip::factory()->extract($_FILES['file']['tmp_name'], $tmp_dir);
                         if (!empty($file_locations)) {
                             $manifest = '';
                             foreach ($file_locations as $filepath) {
                                 if (substr($filepath, -strlen('.manifest.xml')) === '.manifest.xml') {
                                     $manifest = $filepath;
                                     break;
                                 }
                             }
                             if (!empty($manifest) && basename(dirname($manifest)) === 'install') {
                                 $manifest_file = pathinfo($manifest, PATHINFO_BASENAME);
                                 $plugin_name = str_replace('.manifest.xml', '', $manifest_file);
                                 if (Dir::create(PLUGINS . DS . $plugin_name)) {
                                     $tmp_plugin_dir = dirname(dirname($manifest));
                                     Dir::copy($tmp_plugin_dir, PLUGINS . DS . $plugin_name);
                                     Notification::set('success', __('Plugin was uploaded', 'plugins'));
                                     $error = false;
                                 }
                             }
                         }
                     } else {
                         $error = 'System error';
                     }
                 } else {
                     $error = 'Forbidden plugin file type';
                 }
             } else {
                 $error = 'Plugin was not uploaded';
             }
             if ($error) {
                 Notification::set('error', __($error, 'plugins'));
             }
             if (Request::post('dragndrop')) {
                 Request::shutdown();
             } else {
                 Request::redirect($site_url . '/admin/index.php?id=plugins#installnew');
             }
         } else {
             die('Request was denied because it contained an invalid security token. Please refresh the page and try again.');
         }
     }
     // Installed plugins
     $plugins_installed = array();
     // New plugins
     $plugins_new = array();
     // Plugins to install
     $plugins_to_intall = array();
     // Scan plugins directory for .manifest.xml
     $plugins_new = File::scan(PLUGINS, '.manifest.xml');
     // Get installed plugins from plugins table
     $plugins_installed = $plugins->select(null, 'all', null, array('location', 'priority'), 'priority', 'ASC');
     // Update $plugins_installed array. extract plugins names
     foreach ($plugins_installed as $plg) {
         $_plg[] = basename($plg['location'], 'plugin.php') . 'manifest.xml';
     }
     // Diff
     $plugins_to_install = array_diff($plugins_new, $_plg);
     // Create array of plugins to install
     $count = 0;
     foreach ($plugins_to_install as $plugin) {
         $plg_path = PLUGINS . DS . Text::lowercase(basename($plugin, '.manifest.xml')) . DS . 'install' . DS . $plugin;
         if (file_exists($plg_path)) {
             $plugins_to_intall[$count]['path'] = $plg_path;
             $plugins_to_intall[$count]['plugin'] = $plugin;
             $count++;
         }
     }
     // Draw template
     View::factory('box/plugins/views/backend/index')->assign('installed_plugins', $installed_plugins)->assign('plugins_to_intall', $plugins_to_intall)->assign('_users_plugins', $_users_plugins)->assign('fileuploader', array('uploadUrl' => $site_url . '/admin/index.php?id=plugins', 'csrf' => Security::token(), 'errorMsg' => __('Upload server error', 'filesmanager')))->display();
 }