Exemplo n.º 1
0
 /**
  * Кэширумеая функция, основной разбор.
  */
 public static function parse($src)
 {
     $args = array($src, $imgmaxwidth, $previewlen);
     $param = infra_cache(array($src), 'docx_parse', function ($src, $imgmaxwidth, $previewlen, $re) {
         $conf = infra_config();
         $imgmaxwidth = $conf['files']['imgmaxwidth'];
         $previewlen = $conf['files']['previewlen'];
         $cachename = md5($src);
         $dirs = infra_dirs();
         $cachefolder = $dirs['cache'] . 'docx/' . $cachename . '/';
         //В винде ингда вылетает о шибка что нет прав удалить какой-то файл в папке и как следствие саму папку
         //Обновление страницы проходит уже нормально
         //Полагаю в линукс такой ошибки не будет хз почему возникает
         @docx_full_del_dir($cachefolder);
         $path = infra_theme($src);
         if (!$path) {
             return array();
         }
         $xmls = docx_getTextFromZippedXML($path, 'word/document.xml', $cachefolder, $re);
         $rIds = array();
         $param = array('folder' => $cachefolder, 'imgmaxwidth' => $imgmaxwidth, 'previewlen' => $previewlen, 'type' => $type, 'rIds' => $rIds);
         if ($xmls[0]) {
             $xmlar = docx_dom_to_array($xmls[0]);
             $xmlar2 = docx_dom_to_array($xmls[1]);
             foreach ($xmlar2['Relationships']['Relationship'] as $v) {
                 $rIds[$v['Id']] = $v['Target'];
             }
             $param['rIds'] = $rIds;
             $html = docx_each($xmlar, '\\itlife\\files\\docx_analyse', $param);
         } else {
             $param['rIds'] = array();
             $html = '';
         }
         $param['html'] = $html;
         return $param;
     }, $args);
     unset($param['rIds']);
     unset($param['type']);
     unset($param['imgmaxwidth']);
     unset($param['previewlen']);
     unset($param['isli']);
     unset($param['isul']);
     unset($param['imgnum']);
     unset($param['folder']);
     return $param;
 }
Exemplo n.º 2
0
 function docx_get($src, $type = 'norm', $re = false)
 {
     $debug = $re;
     $conf = infra_config();
     if (@$conf['files'] && @$conf['files']['imgmaxwidth']) {
         $imgmaxwidth = $conf['files']['imgmaxwidth'];
     }
     if (!$imgmaxwidth) {
         $imgmaxwidth = 1000;
     }
     $imgmaxwidth = (int) $imgmaxwidth;
     $previewlen = 150;
     $args = array($src, $type, $imgmaxwidth, $previewlen);
     $dhtml = infra_cache(array($src), 'docx_parse', function ($src, $type, $imgmaxwidth, $previewlen, $debug) {
         $cachename = md5($src);
         $dirs = infra_dirs();
         $cachefolder = $dirs['cache'] . 'docx/' . $cachename . '/';
         //В винде ингда вылетает о шибка что нет прав удалить какой-то файл в папке и как следствие саму папку
         //Обновление страницы проходит уже нормально
         //Полагаю в линукс такой ошибки не будет хз почему возникает
         @docx_full_del_dir($cachefolder);
         $xmls = docx_getTextFromZippedXML($src, 'word/document.xml', $cachefolder, $debug);
         $rIds = array();
         $param = array('com' => array(), 'folder' => $cachefolder, 'imgmaxwidth' => $imgmaxwidth, 'previewlen' => $previewlen, 'type' => $type, 'rIds' => $rIds);
         if ($xmls[0]) {
             $xmlar = docx_dom_to_array($xmls[0]);
             $xmlar2 = docx_dom_to_array($xmls[1]);
             foreach ($xmlar2['Relationships']['Relationship'] as $v) {
                 $rIds[$v['Id']] = $v['Target'];
             }
             $param['rIds'] = $rIds;
             $html = docx_each($xmlar, 'docx_analyse', $param);
         } else {
             $param['rIds'] = array();
             $html = '';
         }
         /*if($debug){
               echo $html;
               echo '<textarea style="width:600px; height:400px">';
               echo $html;
               echo '</textarea>';
               echo '<pre>';
               print_r($xmlar);
           }*/
         if ($type == 'preview' || $type == 'news') {
             $p = explode('/', $src);
             $fname = array_pop($p);
             $s = infra_toutf($fname);
             $data = infra_nameinfo($s);
             //$p=explode("/",$src);
             //$fname=array_pop($p);
             //preg_match("/^(\d*)/",$fname,$match);
             //$fname=infra_toutf(preg_replace('/^\d*/','',$fname));
             //$fname=preg_replace('/\.\w{0,4}$/','',$fname);
             //$fname=trim($fname);
             //$date=$match[0];
             $patern = '/###cut###/U';
             $d = preg_split($patern, $html);
             if (sizeof($d) > 1) {
                 $html = preg_replace($patern, '', $html);
                 $preview = $d[0];
             } else {
                 $temphtml = strip_tags($html, '<p>');
                 //preg_match('/^(<p.*>.{'.$previewlen.'}.*<\/p>)/U',$temphtml,$match);
                 preg_match('/(<p.*>.{1}.*<\\/p>)/U', $temphtml, $match);
                 if (sizeof($match) > 1) {
                     $preview = $match[1];
                 } else {
                     $preview = $html;
                 }
             }
             $preview = preg_replace('/<h1.*<\\/h1>/U', '', $preview);
             $preview = preg_replace('/<img.*>/U', '', $preview);
             $preview = preg_replace('/<p.*>\\s*<\\/p>/iU', '', $preview);
             $preview = preg_replace("/\\s+/", ' ', $preview);
             $preview = trim($preview);
             preg_match('/<img.*src=["\'](.*)["\'].*>/U', $html, $match);
             if ($match && $match[1]) {
                 $img = $match[1];
             } else {
                 $img = false;
             }
             $filetime = filemtime($src);
             $data['modified'] = $filetime;
             if (@$param['links']) {
                 $data['links'] = $param['links'];
             }
             if (@$param['heading']) {
                 $data['heading'] = $param['heading'];
             }
             //title - depricated
             if (@$data['name']) {
                 $data['title'] = $data['name'];
             }
             if ($img) {
                 $data['img'] = $img;
             }
             if (@$param['images']) {
                 $data['images'] = $param['images'];
             }
             if ($preview) {
                 $data['preview'] = $preview;
             }
             return array($data, $param['com']);
         } else {
             return array($html, $param['com']);
         }
     }, $args, $re);
     //$html=$dhtml[0];
     //кэш этого место в infrajs в getHTML
     return $dhtml;
 }