/** * Process the string, romanizing the characters * @param string Input string with extended chars * @return string String */ public function process($string) { /* Edit the chr(xxx) values to suit The default is a duplication of the default code */ if (IPSText::isUTF8($string)) { $_chr = array(chr(195) . chr(128) => 'Ae', chr(195) . chr(129) => 'A', chr(195) . chr(130) => 'A', chr(195) . chr(131) => 'A', chr(195) . chr(132) => 'A', chr(195) . chr(133) => 'A', chr(195) . chr(135) => 'C', chr(195) . chr(136) => 'E', chr(195) . chr(137) => 'E', chr(195) . chr(138) => 'E', chr(195) . chr(139) => 'E', chr(195) . chr(140) => 'I', chr(195) . chr(141) => 'I', chr(195) . chr(142) => 'I', chr(195) . chr(143) => 'I', chr(195) . chr(145) => 'N', chr(195) . chr(146) => 'O', chr(195) . chr(147) => 'O', chr(195) . chr(148) => 'O', chr(195) . chr(149) => 'O', chr(195) . chr(150) => 'Oe', chr(195) . chr(153) => 'U', chr(195) . chr(154) => 'U', chr(195) . chr(155) => 'U', chr(195) . chr(156) => 'Ue', chr(195) . chr(157) => 'Y', chr(195) . chr(159) => 'ss', chr(195) . chr(160) => 'a', chr(195) . chr(161) => 'a', chr(195) . chr(162) => 'a', chr(195) . chr(163) => 'a', chr(195) . chr(164) => 'ae', chr(195) . chr(165) => 'a', chr(195) . chr(167) => 'c', chr(195) . chr(168) => 'e', chr(195) . chr(169) => 'e', chr(195) . chr(170) => 'e', chr(195) . chr(171) => 'e', chr(195) . chr(172) => 'i', chr(195) . chr(173) => 'i', chr(195) . chr(174) => 'i', chr(195) . chr(175) => 'i', chr(195) . chr(177) => 'n', chr(195) . chr(178) => 'o', chr(195) . chr(179) => 'o', chr(195) . chr(180) => 'o', chr(195) . chr(181) => 'o', chr(195) . chr(182) => 'oe', chr(195) . chr(185) => 'u', chr(195) . chr(186) => 'u', chr(195) . chr(187) => 'u', chr(195) . chr(188) => 'ue', chr(195) . chr(189) => 'y', chr(195) . chr(191) => 'y', chr(196) . chr(128) => 'A', chr(196) . chr(129) => 'a', chr(196) . chr(130) => 'A', chr(196) . chr(131) => 'a', chr(196) . chr(132) => 'A', chr(196) . chr(133) => 'a', chr(196) . chr(134) => 'C', chr(196) . chr(135) => 'c', chr(196) . chr(136) => 'C', chr(196) . chr(137) => 'c', chr(196) . chr(138) => 'C', chr(196) . chr(139) => 'c', chr(196) . chr(140) => 'C', chr(196) . chr(141) => 'c', chr(196) . chr(142) => 'D', chr(196) . chr(143) => 'd', chr(196) . chr(144) => 'D', chr(196) . chr(145) => 'd', chr(196) . chr(146) => 'E', chr(196) . chr(147) => 'e', chr(196) . chr(148) => 'E', chr(196) . chr(149) => 'e', chr(196) . chr(150) => 'E', chr(196) . chr(151) => 'e', chr(196) . chr(152) => 'E', chr(196) . chr(153) => 'e', chr(196) . chr(154) => 'E', chr(196) . chr(155) => 'e', chr(196) . chr(156) => 'G', chr(196) . chr(157) => 'g', chr(196) . chr(158) => 'G', chr(196) . chr(159) => 'g', chr(196) . chr(160) => 'G', chr(196) . chr(161) => 'g', chr(196) . chr(162) => 'G', chr(196) . chr(163) => 'g', chr(196) . chr(164) => 'H', chr(196) . chr(165) => 'h', chr(196) . chr(166) => 'H', chr(196) . chr(167) => 'h', chr(196) . chr(168) => 'I', chr(196) . chr(169) => 'i', chr(196) . chr(170) => 'I', chr(196) . chr(171) => 'i', chr(196) . chr(172) => 'I', chr(196) . chr(173) => 'i', chr(196) . chr(174) => 'I', chr(196) . chr(175) => 'i', chr(196) . chr(176) => 'I', chr(196) . chr(177) => 'i', chr(196) . chr(178) => 'IJ', chr(196) . chr(179) => 'ij', chr(196) . chr(180) => 'J', chr(196) . chr(181) => 'j', chr(196) . chr(182) => 'K', chr(196) . chr(183) => 'k', chr(196) . chr(184) => 'k', chr(196) . chr(185) => 'L', chr(196) . chr(186) => 'l', chr(196) . chr(187) => 'L', chr(196) . chr(188) => 'l', chr(196) . chr(189) => 'L', chr(196) . chr(190) => 'l', chr(196) . chr(191) => 'L', chr(197) . chr(128) => 'l', chr(197) . chr(129) => 'L', chr(197) . chr(130) => 'l', chr(197) . chr(131) => 'N', chr(197) . chr(132) => 'n', chr(197) . chr(133) => 'N', chr(197) . chr(134) => 'n', chr(197) . chr(135) => 'N', chr(197) . chr(136) => 'n', chr(197) . chr(137) => 'N', chr(197) . chr(138) => 'n', chr(197) . chr(139) => 'N', chr(197) . chr(140) => 'O', chr(197) . chr(141) => 'o', chr(197) . chr(142) => 'O', chr(197) . chr(143) => 'o', chr(197) . chr(144) => 'O', chr(197) . chr(145) => 'o', chr(197) . chr(146) => 'OE', chr(197) . chr(147) => 'oe', chr(197) . chr(148) => 'R', chr(197) . chr(149) => 'r', chr(197) . chr(150) => 'R', chr(197) . chr(151) => 'r', chr(197) . chr(152) => 'R', chr(197) . chr(153) => 'r', chr(197) . chr(154) => 'S', chr(197) . chr(155) => 's', chr(197) . chr(156) => 'S', chr(197) . chr(157) => 's', chr(197) . chr(158) => 'S', chr(197) . chr(159) => 's', chr(197) . chr(160) => 'S', chr(197) . chr(161) => 's', chr(197) . chr(162) => 'T', chr(197) . chr(163) => 't', chr(197) . chr(164) => 'T', chr(197) . chr(165) => 't', chr(197) . chr(166) => 'T', chr(197) . chr(167) => 't', chr(197) . chr(168) => 'U', chr(197) . chr(169) => 'u', chr(197) . chr(170) => 'U', chr(197) . chr(171) => 'u', chr(197) . chr(172) => 'U', chr(197) . chr(173) => 'u', chr(197) . chr(174) => 'U', chr(197) . chr(175) => 'u', chr(197) . chr(176) => 'U', chr(197) . chr(177) => 'u', chr(197) . chr(178) => 'U', chr(197) . chr(179) => 'u', chr(197) . chr(180) => 'W', chr(197) . chr(181) => 'w', chr(197) . chr(182) => 'Y', chr(197) . chr(183) => 'y', chr(197) . chr(184) => 'Y', chr(197) . chr(185) => 'Z', chr(197) . chr(186) => 'z', chr(197) . chr(187) => 'Z', chr(197) . chr(188) => 'z', chr(197) . chr(189) => 'Z', chr(197) . chr(190) => 'z', chr(197) . chr(191) => 's', chr(226) . chr(130) . chr(172) => 'E', chr(194) . chr(163) => ''); $string = strtr($string, $_chr); } else { $_chr = array(); $_dblChars = array(); /* We assume ISO-8859-1 if not UTF-8 */ $_chr['in'] = chr(128) . chr(131) . chr(138) . chr(142) . chr(154) . chr(158) . chr(159) . chr(162) . chr(165) . chr(181) . chr(192) . chr(193) . chr(194) . chr(195) . chr(199) . chr(200) . chr(201) . chr(202) . chr(203) . chr(204) . chr(205) . chr(206) . chr(207) . chr(209) . chr(210) . chr(211) . chr(212) . chr(213) . chr(217) . chr(218) . chr(219) . chr(220) . chr(221) . chr(224) . chr(225) . chr(226) . chr(227) . chr(231) . chr(232) . chr(233) . chr(234) . chr(235) . chr(236) . chr(237) . chr(238) . chr(239) . chr(241) . chr(242) . chr(243) . chr(244) . chr(245) . chr(249) . chr(250) . chr(251) . chr(252) . chr(253) . chr(255) . chr(191) . chr(182) . chr(179) . chr(166) . chr(230) . chr(198) . chr(175) . chr(172) . chr(188) . chr(163) . chr(161) . chr(177); $_chr['out'] = "EfSZszYcYuAAAACEEEEIIIINOOOOUUUUYaaaaceeeeiiiinoooouuuuyyzslScCZZzLAa"; $string = strtr($string, $_chr['in'], $_chr['out']); $_dblChars['in'] = array(chr(140), chr(156), chr(196), chr(197), chr(198), chr(208), chr(214), chr(216), chr(222), chr(223), chr(228), chr(229), chr(230), chr(240), chr(246), chr(248), chr(254)); $_dblChars['out'] = array('Oe', 'oe', 'Ae', 'Aa', 'Ae', 'DH', 'Oe', 'Oe', 'TH', 'ss', 'ae', 'aa', 'ae', 'dh', 'oe', 'oe', 'th'); $string = str_replace($_dblChars['in'], $_dblChars['out'], $string); } return $string; }
/** * Encodes meta tag content so its safe for readers, etc * * @param string $content Meta tag content * @return @e string */ public function encodeMetaTagContent($content, $makeUTF8Safe = false) { $content = IPSText::htmlspecialchars($content); # Hebrew chars screw up Facebook sharer if ($makeUTF8Safe === true && IPS_DOC_CHAR_SET == 'UTF-8' && IPSText::isUTF8($content)) { $content = IPSText::utf8ToEntities($content); } return $content; }
/** * Uploads and saves file * * @return mixed void, or the new insert id */ public function processUpload() { //----------------------------------------- // INIT //----------------------------------------- $this->error = ''; $this->getUploadFormSettings(); //----------------------------------------- // Check upload dir //----------------------------------------- if (!$this->checkUploadDirectory()) { if ($this->error) { return; } } //----------------------------------------- // Can upload? //----------------------------------------- if (!$this->attach_stats['allow_uploads']) { $this->error = 'upload_failed'; return; } //----------------------------------------- // Got attachment types? //----------------------------------------- if (!$this->registry->cache()->getCache('attachtypes') or !is_array($this->registry->cache()->getCache('attachtypes'))) { $attachtypes = array(); $this->DB->build(array('select' => 'atype_extension,atype_mimetype,atype_post,atype_img', 'from' => 'attachments_type', 'where' => "atype_post=1")); $this->DB->execute(); while ($r = $this->DB->fetch()) { $attachtypes[$r['atype_extension']] = $r; } $this->registry->cache()->updateCacheWithoutSaving('attachtypes', $attachtypes); } //----------------------------------------- // Set up array //----------------------------------------- $attach_data = array('attach_ext' => "", 'attach_file' => "", 'attach_location' => "", 'attach_thumb_location' => "", 'attach_hits' => 0, 'attach_date' => time(), 'attach_post_key' => $this->attach_post_key, 'attach_member_id' => $this->memberData['member_id'], 'attach_rel_id' => $this->attach_rel_id, 'attach_rel_module' => $this->type, 'attach_filesize' => 0); //----------------------------------------- // Load the library //----------------------------------------- require_once IPS_KERNEL_PATH . 'classUpload.php'; /*noLibHook*/ $upload = new classUpload(); //----------------------------------------- // Set up the variables //----------------------------------------- $upload->out_file_name = $this->type . '-' . $this->memberData['member_id'] . '-' . str_replace(array('.', ' '), '-', microtime()); $upload->out_file_dir = $this->upload_path; $upload->max_file_size = $this->attach_stats['max_single_upload'] ? $this->attach_stats['max_single_upload'] : 1000000000; $upload->make_script_safe = 1; $upload->force_data_ext = 'ipb'; //----------------------------------------- // Populate allowed extensions //----------------------------------------- if (is_array($this->registry->cache()->getCache('attachtypes')) and count($this->registry->cache()->getCache('attachtypes'))) { /* SKINNOTE: I had to add [attachtypes] to this cache to make it work, may need fixing? */ //$tmp = $this->registry->cache()->getCache('attachtypes'); foreach ($this->registry->cache()->getCache('attachtypes') as $idx => $data) { if ($data['atype_post']) { $upload->allowed_file_ext[] = $data['atype_extension']; } } } //----------------------------------------- // Upload... //----------------------------------------- $upload->process(); //----------------------------------------- // Error? //----------------------------------------- if ($upload->error_no) { switch ($upload->error_no) { case 1: // No upload $this->error = 'upload_no_file'; return $attach_data; break; case 2: // Invalid file ext $this->error = 'invalid_mime_type'; return $attach_data; break; case 3: // Too big... $this->error = 'upload_too_big'; return $attach_data; break; case 4: // Cannot move uploaded file $this->error = 'upload_failed'; return $attach_data; break; case 5: // Possible XSS attack (image isn't an image) $this->error = 'upload_failed'; return $attach_data; break; } } //----------------------------------------- // Still here? //----------------------------------------- if ($upload->saved_upload_name and @is_file($upload->saved_upload_name)) { //----------------------------------------- // Strip off { } and [ ] //----------------------------------------- $upload->original_file_name = str_replace(array('[', ']', '{', '}'), "", $upload->original_file_name); $attach_data['attach_filesize'] = @filesize($upload->saved_upload_name); $attach_data['attach_location'] = $this->upload_dir . $upload->parsed_file_name; if (IPSText::isUTF8($upload->original_file_name)) { $attach_data['attach_file'] = IPSText::convertCharsets($upload->original_file_name, "UTF-8", IPS_DOC_CHAR_SET); } else { $attach_data['attach_file'] = $upload->original_file_name; } $attach_data['attach_is_image'] = $upload->is_image; $attach_data['attach_ext'] = $upload->real_file_extension; if ($attach_data['attach_is_image'] == 1) { require_once IPS_KERNEL_PATH . 'classImage.php'; /*noLibHook*/ require_once IPS_KERNEL_PATH . 'classImageGd.php'; /*noLibHook*/ /* Main attachment */ if (!empty($this->settings['attach_img_max_w']) and !empty($this->settings['attach_img_max_h'])) { $image = new classImageGd(); $image->init(array('image_path' => $this->upload_path, 'image_file' => $upload->parsed_file_name)); $image->force_resize = false; if ($imgData = $image->resizeImage($this->settings['attach_img_max_w'], $this->settings['attach_img_max_h'], false, true)) { if (!$imgData['noResize']) { $image->writeImage($this->upload_path . '/' . $upload->parsed_file_name); } if (is_array($imgData)) { $attach_data['attach_img_width'] = $imgData['newWidth']; $attach_data['attach_img_height'] = $imgData['newHeight']; } $attach_data['attach_filesize'] = @filesize($this->upload_path . '/' . $upload->parsed_file_name); } } /* Thumb nail */ $image = new classImageGd(); $image->force_resize = true; $image->init(array('image_path' => $this->upload_path, 'image_file' => $upload->parsed_file_name)); if (TRUE) { if ($this->attach_settings['siu_width'] < $attach_data['attach_img_width'] or $this->attach_settings['siu_height'] < $attach_data['attach_img_height']) { $_thumbName = preg_replace('#^(.*)\\.(\\w+?)$#', "\\1_thumb.\\2", $upload->parsed_file_name); if ($thumb_data = $image->resizeImage($this->attach_settings['siu_width'], $this->attach_settings['siu_height'])) { $image->writeImage($this->upload_path . '/' . $_thumbName); if (is_array($thumb_data)) { $thumb_data['thumb_location'] = $_thumbName; } } } else { /* Instead of building a thumb the same size as the main image, just copy the details */ $thumb_data = array('thumb_location' => $upload->parsed_file_name, 'newWidth' => $attach_data['attach_img_width'], 'newHeight' => $attach_data['attach_img_height']); } } if ($thumb_data['thumb_location']) { $attach_data['attach_img_width'] = $thumb_data['originalWidth']; $attach_data['attach_img_height'] = $thumb_data['originalHeight']; $attach_data['attach_thumb_width'] = $thumb_data['newWidth']; $attach_data['attach_thumb_height'] = $thumb_data['newHeight']; $attach_data['attach_thumb_location'] = $this->upload_dir . $thumb_data['thumb_location']; } } //----------------------------------------- // Make sure we send integers // @link http://community.invisionpower.com/tracker/issue-32511-attachments-mysql-strict-mode //----------------------------------------- $attach_data['attach_img_width'] = intval($attach_data['attach_img_width']); $attach_data['attach_img_height'] = intval($attach_data['attach_img_height']); $attach_data['attach_thumb_width'] = intval($attach_data['attach_thumb_width']); $attach_data['attach_thumb_height'] = intval($attach_data['attach_thumb_height']); //----------------------------------------- // Add into Database //----------------------------------------- $this->DB->insert('attachments', $attach_data); $newid = $this->DB->getInsertId(); return $newid; } }
/** * Expand the acronyms for SEO * @param string $txt */ protected function _seoAcronymExpansion($txt) { if ($txt == '') { return $txt; } $acronyms = $this->cache->getCache('ipseo_acronyms'); if (!is_array($acronyms) or !count($acronyms)) { return $txt; } $temp_text = $txt; $urls = array(); $tags = array(); $txt = str_replace('<#EMO_DIR#>', '-#-#-#EMO_DIR#-#-#-', $txt); /* Grab images */ preg_match_all('#<img([^>]+?)>#i', $txt, $matches); foreach ($matches[0] as $m) { $c = count($urls); $urls[$c] = $m; $txt = str_replace($m, '<!--url{' . $c . '}-->', $txt); } /* Grab <a> */ preg_match_all('#<a([^>]+?)>#i', $txt, $matches); foreach ($matches[0] as $m) { $c = count($urls); $urls[$c] = $m; $txt = str_replace($m, '<!--url{' . $c . '}-->', $txt); } /* Grab all other tags */ preg_match_all('#<(?:[/a-z]{1,})([^>]+?)>#i', $txt, $matches); foreach ($matches[0] as $m) { $c = count($tags); $tags[$c] = $m; $txt = str_replace($m, '<!--tag{' . $c . '}-->', $txt); } /* Grab non linked URLs */ preg_match_all('#((http|https|news|ftp)://(?:[^<>\\)\\[\\"\\s]+|[a-zA-Z0-9/\\._\\-!&\\#;,%\\+\\?:=]+))#is', $txt, $matches); foreach ($matches[0] as $m) { $c = count($urls); $urls[$c] = $m; $txt = str_replace($m, '<!--url{' . $c . '}-->', $txt); } //----------------------------------------- // Convert back entities //----------------------------------------- for ($i = 65; $i <= 90; $i++) { $txt = str_replace("&#" . $i . ";", chr($i), $txt); } for ($i = 97; $i <= 122; $i++) { $txt = str_replace("&#" . $i . ";", chr($i), $txt); } //----------------------------------------- // Go all loopy //----------------------------------------- if (is_array($acronyms) && count($acronyms)) { foreach ($acronyms as $r) { $this->_currentAcronym = $r; /* vv Ticket #835804 */ $wordModifier = IPS_DOC_CHAR_SET == 'UTF-8' && IPSText::isUTF8($txt) ? '[^<>\\p{L}]|\\b' : '[^<>a-zA-Z0-9-_&;]'; $caseModifier = empty($r['a_casesensitive']) ? 'i' : ''; $r['a_short'] = preg_quote($r['a_short'], "/"); $txt = preg_replace_callback('/(^|' . $wordModifier . ')(' . $r['a_short'] . ')(' . $wordModifier . '|$)/' . $caseModifier, array($this, '_replaceAcronym'), $txt); } } /* replace urls */ if (count($urls)) { foreach ($urls as $k => $v) { $txt = str_replace("<!--url{" . $k . "}-->", $v, $txt); } } /* replace tags */ if (count($tags)) { foreach ($tags as $k => $v) { $txt = str_replace("<!--tag{" . $k . "}-->", $v, $txt); } } $txt = str_replace('-#-#-#EMO_DIR#-#-#-', '<#EMO_DIR#>', $txt); return $txt ? $txt : $temp_text; }