Exemplo n.º 1
0
 /**
  * return url to file in demo folder
  * @param $file
  * @return string
  */
 public function get_file_url($file)
 {
     if (!HW_URL::valid_url($file)) {
         $file = HW_File_Directory::generate_url($this->info('base_url'), $file);
     }
     return $file;
 }
 /**
  * @param $file
  */
 public static function get_root_dirs_fromzip($file)
 {
     //valid
     if (!file_exists($file) || HW_File_Directory::getExtension($file) != 'zip') {
         return;
     }
     $zip = new ZipArchive();
     $result = array();
     if ($zip->open($file) == TRUE) {
         for ($i = 0; $i < $zip->numFiles; $i++) {
             $filename = $zip->getNameIndex($i);
             //check file in subfolder
             if (count(explode('/', trim($filename, '\\/'))) || HW_File_Directory::has_extension($filename)) {
                 continue;
             }
             $result[] = $filename;
         }
     }
     return $result;
 }
 /**
  * valid module package by zip
  * @param $file
  * @return bool
  */
 static function check_module_zipfile($file)
 {
     $dirs = HW_Unzipper::get_root_dirs_fromzip($file);
     $files = HW_Unzipper::get_root_files_fromzip($file);
     if (!count($dirs) || count($dirs) > 1 || count($files)) {
         return false;
     }
     return !in_array($dirs[0], array_values(HW_File_Directory::list_folders(HW_HOANGWEB_PLUGINS)));
 }
Exemplo n.º 4
0
 /**
  * @param $xml
  * @param array $namespaces
  * @return array
  */
 public function build_skin_data(SimpleXMLElement $xml, $namespaces = null)
 {
     if (empty($namespaces)) {
         $namespaces = $this->namespaces;
     }
     #$node=dom_import_simplexml($xml);//dom_import_simplexml()
     #$n = $xml->getNameSpaces(false);_print($node->localName.','.$node->textContent);
     #$xml->getDocNamespaces(0);
     #if(empty($n)) return;
     HW_HOANGWEB::load_class('HW_File_Directory');
     if (empty($namespaces)) {
         $namespaces = $this->valid_namespaces($xml);
     }
     $skin_tag = $xml->xpath('params:skin_encoded');
     $data = array();
     if (!empty($skin_tag) || count($xml->xpath('params:skin_instance'))) {
         $params = $xml->children($namespaces['params']);
         $hash_skin = array();
         $skin_config = array();
         $apply_plugin = '';
         $skin_name = '';
         $skin_data = array();
         $screenshot = '';
         $screenshot_ext = 'jpg';
         /*if(isset($skin->apply_plugin)) {    //apply skin
               $apply_plugin = (string) $skin->apply_plugin ;
           }
           else*/
         if (isset($skin_data['apply_plugin'])) {
             $apply_plugin = $skin_data['apply_plugin'];
         } else {
             $apply_plugin = '';
             //leave empty for hw-hoangweb plugin
         }
         //for skin link
         if (!empty($params->skin_file) && HW_XML::count_childs($params->skin_file)) {
             $atts = $params->skin_file->attributes();
             //if(!isset($atts['name'])) $atts['name'] = 'url';  //skin_config
             //get skin data
             if (isset($atts['instance']) && isset($this->skins_data[(string) $atts['instance']])) {
                 $skin_data = $this->skins_data[(string) $atts['instance']];
             }
             $skin = $params->skin_file->children($namespaces['skin']);
             $hash_skin['type'] = '';
             //get source
             if (isset($skin->source)) {
                 $hash_skin['source'] = (string) $skin->source;
             } else {
                 $hash_skin['source'] = 'plugin';
             }
             $file_link = (string) $skin->file;
             $skin_file_name = isset($atts['name']) ? (string) $atts['name'] : 'url';
             //get group
             if (isset($skin->group)) {
                 $group = (string) $skin->group;
             } elseif (isset($skin_config['group'])) {
                 $group = $skin_config['group'];
             } elseif (isset($skin_data['group'])) {
                 $group = $skin_data['group'];
             }
             //$hash_skin = HW_SKIN::valid_holder_path($apply_plugin, $hash_skin);
             /*$file_url = HW_File_Directory::generate_url(HW_HOANGWEB_PLUGINS_URL,$apply_plugin,
                   $skin_config['default_skin_path'], $group, $file_link
               );
               //$hash_skin['screenshot_url'] = $hash_skin['file_url'] = $file_url;
               */
             $hash_skin['file'] = $hash_skin['name'] = $file_link;
             //$data[isset($atts['name'])? (string) $atts['name']: 'url'] = $file_url ;
         }
         //parse hash_skin value
         if (isset($params->skin_encoded) && HW_XML::count_childs($params->skin_encoded)) {
             $atts = $params->skin_encoded->attributes();
             //if(!isset($atts['name'])) $atts['name'] = 'hash_skin';  //default hash_skin field-> not allow to update
             if (isset($atts['instance']) && isset($this->skins_data[(string) $atts['instance']])) {
                 $skin_data = $this->skins_data[(string) $atts['instance']];
             }
             #$params->skin_encoded->xpath('skin:skins_path');
             $skin = $params->skin_encoded->children($namespaces['skin']);
             if (isset($skin->apply_plugin)) {
                 //apply skin
                 $apply_plugin = (string) $skin->apply_plugin;
             } elseif (isset($skin_data['apply_plugin'])) {
                 $apply_plugin = $skin_data['apply_plugin'];
             } else {
                 $apply_plugin = '';
                 //leave empty for hw-hoangweb plugin
             }
             //get source
             if (isset($skin->source)) {
                 $hash_skin['source'] = (string) $skin->source;
             } else {
                 $hash_skin['source'] = 'plugin';
             }
             //skin name
             /*if(isset($skin->skin_name)) {
                   $skin_name = (string) $skin->skin_name;
               }
               else*/
             if (isset($skin_data['skin_name'])) {
                 $skin_name = $skin_data['skin_name'];
             }
             //$hash = array('skins_path', '');
             $hash_skin['holder'] = $apply_plugin;
             if ($apply_plugin) {
                 $hash_skin = HW_SKIN::valid_holder_path($apply_plugin, $hash_skin);
             } else {
                 //refer to hw-hoangweb plugin
                 if (!file_exists($hash_skin['holder'])) {
                     $hash_skin['holder'] = '';
                     #HW_HOANGWEB_PATH. DIRECTORY_SEPARATOR;
                     $hash_skin['holder_url'] = '';
                     //HW_HOANGWEB_URL ;
                 }
             }
             if (isset($skin->screenshot)) {
                 //screenshot
                 $screenshot = (string) $skin->screenshot;
             }
             /*elseif(isset($skin_data['screenshot'])) {
                   $screenshot = $skin_data['screenshot'];
               }*/
             if (isset($skin->skin_type)) {
                 //skin type
                 $hash_skin['type'] = (string) $skin->skin_type;
             } elseif (isset($skin_data['skin_type'])) {
                 $hash_skin['type'] = $skin_data['skin_type'];
             }
             //group
             if (isset($skin->group)) {
                 $hash_skin['group'] = (string) $skin->group;
             } elseif (isset($skin_data['group'])) {
                 $hash_skin['group'] = $skin_data['group'];
             } else {
                 $hash_skin['group'] = '';
             }
             if (isset($skin->default_folder)) {
                 //skins path
                 $hash_skin['default_folder'] = (string) $skin->default_folder;
             } elseif (isset($skin_data['default_skin_path'])) {
                 $hash_skin['default_folder'] = $skin_data['default_skin_path'];
             }
             //skin_folder
             if ($hash_skin['type'] == 'file') {
                 $hash_skin['skin_folder'] = $hash_skin['default_folder'] . '/' . $hash_skin['group'];
             } else {
                 $hash_skin['skin_folder'] = $hash_skin['default_folder'];
             }
             if ($hash_skin['type'] === 'link') {
                 //path
                 $hash_skin['path'] = rtrim($hash_skin['group'], '\\/') . '/';
             } else {
                 if (isset($skin->skin)) {
                     //skin folder
                     $hash_skin['path'] = (string) $skin->skin;
                 } elseif (isset($skin_data['default_skin'])) {
                     $hash_skin['path'] = $skin_data['default_skin'];
                 }
             }
             $hash_skin['path'] = rtrim($hash_skin['path'], '\\/') . '/';
             //valid
             $full_holder = HW_SKIN::get_skin_realpath(array('path' => $hash_skin['holder']), $hash_skin['source'])->path;
             $skin_path = HW_File_Directory::generate_path($full_holder, $hash_skin['default_folder'], $hash_skin['group'], $hash_skin['path']);
             //screenshot mimetype
             /*if(isset($skin->screenshot_mimetype)) {   //no, we auto find screenshot mimetype
                   $screenshot_ext = (string) $skin->screenshot_mimetype;
               }*/
             $screenshot_ext = file_exists($skin_path . '/screenshot.png') ? 'png' : 'jpg';
             //skin name
             if ($hash_skin['type'] == 'file' && $skin_name) {
                 $hash_skin['filename'] = $skin_name;
             }
             #else $hash_skin['file'] = $skin_name; //for skin link, do it above
             if (isset($skin->title) && !isset($hash_skin['name'])) {
                 //title
                 $hash_skin['name'] = (string) $skin->title;
             } else {
                 if (isset($hash_skin['holder']) && isset($hash_skin['default_folder']) && !isset($hash_skin['name'])) {
                     if (isset($skin_data['template_header'])) {
                         $header = $skin_data['template_header'];
                     } else {
                         $header = array('name' => 'HW Template', 'description' => 'Description', 'author' => 'Author', 'uri' => 'Author URI');
                     }
                     if ($hash_skin['type'] == 'file') {
                         $skin_file = HW_File_Directory::generate_path($full_holder, $hash_skin['default_folder'], $hash_skin['group'], $hash_skin['path']) . '/' . $skin_name;
                     } else {
                         $skin_file = HW_File_Directory::generate_path($full_holder, $hash_skin['default_folder'], $hash_skin['path']) . '/' . $skin_name;
                     }
                     $temp_header = HW_SKIN::get_template_data($skin_file, 0, $header);
                     $hash_skin['name'] = $temp_header['name'];
                 }
             }
             $hash_skin['skin_url'] = HW_File_Directory::generate_url($hash_skin['holder_url'], $hash_skin['skin_folder'], $hash_skin['path']);
             if (isset($skin_file_name) && isset($file_link)) {
                 $hash_skin['file_url'] = HW_File_Directory::generate_url($hash_skin['skin_url'], $file_link);
                 $data[$skin_file_name] = $hash_skin['screenshot_url'] = $hash_skin['file_url'];
             }
             /*if($screenshot && !isset($hash_skin['screenshot_url'])) {  //skin screenshot
                   $hash_skin['screenshot_url'] = $screenshot;
                   if(!HW_Validation::hw_valid_url($hash_skin['screenshot_url'])) {
                       $hash_skin['screenshot_url'] = HW_File_Directory::generate_path(HW_HOANGWEB_PLUGINS_URL, $hash_skin['screenshot_url']);
                   }
               }
               else*/
             if (!isset($hash_skin['screenshot_url'])) {
                 $hash_skin['screenshot_url'] = HW_File_Directory::generate_url($hash_skin['skin_url'], 'screenshot.' . ltrim($screenshot_ext, '.'));
                 //default jpg mimetype
             }
             //valid hash skin value
             if (count($hash_skin) < 7) {
                 return;
             }
             //$hash_skin = hwArray::sortArrayByArray($hash_skin, array('skins_path','skin_folder','skin_url','skin_type','title','screenshot','skin_name'));
             if (isset($hash_skin['type']) && $hash_skin['type'] == 'file') {
                 $hash_skin_value = HW_SKIN::generate_skin_path($hash_skin);
             } else {
                 $hash_skin_value = HW_SKIN::generate_skin_file($hash_skin);
             }
             #__print(($hash_skin));exit;
             $data[isset($atts['name']) ? (string) $atts['name'] : 'hash_skin'] = $hash_skin_value;
         }
         //parse skin config
         if (isset($params->skin_instance)) {
             $atts = $params->skin_instance->attributes();
             //if(!isset($atts['name'])) $atts['name'] = 'skin_config';  //skin_config
             if (isset($atts['instance']) && isset($this->skins_data[(string) $atts['instance']])) {
                 $skin_data = $this->skins_data[(string) $atts['instance']];
             }
             $skin = $params->skin_instance->children($namespaces['skin']);
             //get default values
             if (isset($skin->apply_plugin) && !$apply_plugin) {
                 //apply_plugin
                 $apply_plugin = (string) $skin->apply_skin;
             } elseif (isset($skin_data['apply_plugin']) && !$apply_plugin) {
                 $apply_plugin = $skin_data['apply_plugin'];
             }
             if (isset($skin->skin_name) && !$skin_name) {
                 //skin_name
                 $skin_name = (string) $skin->skin_name;
             } elseif (isset($skin_data['skin_name']) && !$skin_name) {
                 $skin_name = $skin_data['skin_name'];
             }
             //grab
             /*if(isset($skin->apply_current_path)) {  //apply_current_path
                   $skin_config['apply_current_path'] = (string) $skin->apply_current_path;
                   if(!file_exists($skin_config['apply_current_path'])) {
                       $skin_config['apply_current_path'] = HW_File_Directory::generate_path(HW_HOANGWEB_PLUGINS, $skin_config['apply_current_path']);
                   }
               }
               if(isset($skin->plugin_url)) {  //plugin_url
                   $skin_config['plugin_url'] = (string) $skin->plugin_url;
                   if(!HW_Validation::hw_valid_url($skin_config['plugin_url'])) {
                       $skin_config['plugin_url'] = HW_File_Directory::generate_path(HW_HOANGWEB_PLUGINS_URL , $skin_config['plugin_url']);
                   }
               }*/
             if (isset($skin->other_folder)) {
                 //other_folder
                 $skin_config['other_folder'] = (string) $skin->other_folder;
             } elseif (isset($skin_data['other_folder'])) {
                 $skin_config['other_folder'] = $skin_data['other_folder'];
             }
             if ($skin_name) {
                 //skin_name
                 $skin_config['skin_name'] = $skin_name;
             }
             if (isset($skin->default_skin_path)) {
                 //default_skin_path
                 $skin_config['default_skin_path'] = (string) $skin->default_skin_path;
             } elseif (isset($skin_data['default_skin_path'])) {
                 $skin_config['default_skin_path'] = $skin_data['default_skin_path'];
             }
             if (isset($skin->group)) {
                 //group
                 $skin_config['group'] = (string) $skin->group;
             } elseif (isset($skin_data['group'])) {
                 $skin_config['group'] = $skin_data['group'];
             }
             if (isset($skin->enable_external_callback)) {
                 //enable_external_callback
                 $skin_config['enable_external_callback'] = (string) $skin->enable_external_callback;
             } elseif (isset($skin_data['enable_external_callback'])) {
                 $skin_config['enable_external_callback'] = $skin_data['enable_external_callback'];
             }
             //allow skin names
             if (isset($skin->allows_skin_names)) {
                 $skin_config['allows_skin_names'] = HW_XML::xml2array($skin->allows_skin_names->children(), 'param', 'params');
             } elseif (isset($skin_data['allows_skin_names'])) {
                 $skin_config['allows_skin_names'] = $skin_data['allows_skin_names'];
             }
             //properties
             if (isset($skin->properties)) {
                 $skin_config['properties'] = HW_XML::xml2array($skin->properties->children(), 'param', 'params');
             } elseif (isset($skin_data['properties'])) {
                 $skin_config['properties'] = $skin_data['properties'];
             }
             //options
             if (isset($skin->options)) {
                 $skin_config['options'] = HW_XML::xml2array($skin->properties->children(), 'param', 'params');
             } elseif (isset($skin_data['options'])) {
                 $skin_config['options'] = $skin_data['options'];
             }
             if ($apply_plugin && !isset($skin_config['apply_current_path'])) {
                 //$skin_config["apply_current_path"] = HW_File_Directory::generate_path(HW_HOANGWEB_PLUGINS,$apply_plugin);
                 $skin_config["apply_current_path"] = $apply_plugin;
             }
             if ($apply_plugin && !isset($skin_config['plugin_url'])) {
                 //$skin_config['plugin_url'] = HW_File_Directory::generate_path(HW_HOANGWEB_PLUGINS_URL, $apply_plugin);
                 $skin_config['plugin_url'] = $apply_plugin;
             }
             //other params
             $other_config_params = HW_XML::xml2array($params->skin_instance->children(), 'param', 'params');
             //fix
             if (!isset($other_config_params['allows_skin_names'])) {
                 $other_config_params['allows_skin_names'] = array();
             } elseif (isset($skin_data['allows_skin_names'])) {
                 $other_config_params['allows_skin_names'] = $skin_data['allows_skin_names'];
             }
             if (isset($skin_config['skin_name']) && !in_array($skin_config['skin_name'], $other_config_params['allows_skin_names'])) {
                 $other_config_params['allows_skin_names'][] = $skin_config['skin_name'];
             }
             if (!empty($other_config_params)) {
                 $skin_config = array_merge($skin_config, $other_config_params);
             }
             $data[isset($atts['name']) ? (string) $atts['name'] : 'skin_config'] = HW_SKIN::generate_skin_config($skin_config);
         }
         //other params
         $data = array_merge($data, HW_XML::xml2array($xml));
         /*$atts = $xml->attributes(); //get attributes
           if(isset($atts['name'])) {
               $data = array((string)$atts['name'] => $data);
           }*/
         return count($data) ? $data : null;
     }
 }
Exemplo n.º 5
0
 /**
  * list all skins with thumbnail
  * @param string $name: skin field name
  * @param string $value: current skin by hash string, default get widget skin field if current context is widget (optional)
  * @param array $skins: skins data (optional)
  * @param array $atts: attributes data for input field
  */
 function get_skins_listview($name, $value = '', $skins = self::SKIN_FILES, $atts = array())
 {
     $skins = $this->get_skins_data($skins);
     //get all skins
     //if(!isset($this->skins_data))
     $this->skins_data = $this->load_skins_data($skins);
     $widget = $this->widget_ref;
     //get current widget
     //valid name
     $holder = 'holder-' . $name;
     if (is_object($widget) && $widget instanceof WP_Widget) {
         //if whether object reference of widget instance
         $fname = $widget->get_field_name($name);
         //get field name if context is widget
         $holder = $widget->get_field_id('holder-' . $name);
         //container id
     } else {
         $fname = $name;
         $holder = $this->uniqueID('holder-' . $name);
     }
     //checkbox attributes
     $atts['onclick'] = "hw_skin_{$this->skin_obj_name()}.skin_change_event(this.value)";
     $w_instance = self::get_widget_instance($widget);
     //get widget instance
     //get current skin
     if ($w_instance && isset($w_instance[$name])) {
         $value = $w_instance[$name];
     }
     //first get skin from widget
     $out = '<div class="' . $holder . ' hw-skin-list-container" >';
     //get active skin info
     $active_skin = $this->get_skin_info($value);
     #__print($active_skin);
     if ($active_skin) {
         $thumb = '<img src="' . $active_skin['thumb'] . '" class="hw-skin-current-thumb"/>';
         //current skin thumb
         $out .= '<div><table><tr><td valign="middle">' . $thumb . '</td><td valign="middle"><strong>' . $active_skin['name'] . '</strong></td></tr></table></div>';
     }
     $out .= '<div class="hwk-skins-list">';
     $out .= '<table class="list-skin-files" width="100%">';
     if (is_array($skins)) {
         foreach ($skins as $skin) {
             $skin_path = HW_SKIN::generate_skin_path($skin);
             $skin = $this->valid_skin_path($skin);
             //valid skin file path
             //populate group
             if (!isset($skin['group'])) {
                 $skin['group'] = self::DEFAULT_GROUP;
             }
             //default skin in default group
             if (!isset($last_group)) {
                 $last_group = null;
             }
             if ($last_group !== $skin['group']) {
                 if ($last_group) {
                     $out .= '</td></tr>';
                     //close group
                     $close_group = 1;
                 }
                 $colspan = apply_filters('HW_SKIN.get_skins_listview.header_colspan', 3, $skin);
                 //modify colspan for table
                 $out .= '<tr ><td colspan="' . $colspan . '"><div class="group" ><strong>' . $skin['group'] . '</strong>';
                 $close_group = 0;
                 $last_group = $skin['group'];
                 //remind new group
             }
             if (!$last_group) {
                 $last_group = $skin['group'];
             }
             //save first group
             $checked = $value == $skin_path ? 'checked="checked"' : '';
             //focus on current skin
             $screenshot = HW_File_Directory::generate_url($skin['skin_url'], $skin['screenshot']);
             //present skin screenshot
             $class = $value == $skin_path ? 'hw-skin-current' : '';
             $out .= '<tr class="' . $class . '"><td valign="middle" class="skin"><label><input ' . self::array2attrs($atts) . ' type="radio" name="' . $fname . '" ' . $checked . ' value="' . $skin_path . '"/></label></td>';
             $out .= '<td class="thumb" ><img class="hw-skin-tooltip" title="" src="' . $screenshot . '"/><div class="hw-skin-hidden"><img src=\'' . $screenshot . '\'/></div></td>';
             //skin thumb
             $out .= '<td>' . $skin['name'] . '</td>';
             //skin name
             $out .= apply_filters('HW_SKIN.get_skins_listview.column', '', $skin);
             //custom column
             $out .= '</tr>';
         }
     } else {
         $out .= __('Không tìm thấy skins');
     }
     $out .= '</table>';
     $out .= '</div>';
     $out .= '</div>';
     echo $out;
 }
Exemplo n.º 6
0
 /**
  * register cli command
  * @param $file
  * @param $command
  * @param $class
  */
 public function register_cli($file, $command = '', $class = '')
 {
     static $commands = array();
     if ($file && !file_exists($file)) {
         $name = rtrim($file, '.php');
         //remove extension
         if (!$command || is_numeric($command)) {
             $command = $name;
         }
         $file = trim(HW_File_Directory::generate_path($this->option('module_path'), 'cli/class-cli-' . $name . '.php'), '\\/');
     } elseif (!is_dir($file) && file_exists($file) && preg_match('#class-cli-*#', basename($file))) {
         $fname = HW_File_Directory::split_filename($file);
         if (!$command) {
             $command = str_replace('class-cli-', '', $fname);
         }
         //extract command name base file name
     }
     if (!is_dir($file) && file_exists($file) && $command && !isset($commands[$command])) {
         //make sure commands is not same
         if (!$class) {
             $class = 'HW_CLI_HW_' . ucwords(HW_Validation::valid_objname($command));
         }
         //desire command class name
         $this->option('cli_files', array($command => array('command' => $command, 'path' => $file, 'class' => $class)), true);
         $commands[$command] = 1;
     }
 }