public function syncTags(Article $article, $tags = array(), $isNew = false) { $tagall = Tag::all()->toArray(); $newTagIds = $updateTagIds = $existingSlug = $existingTag = []; if (!empty($tagall)) { foreach ($tagall as $tag) { $existingSlug[] = $tag['slug']; $existingTag[$tag['slug']] = $tag; } } unset($tagall); if ($tags) { foreach ($tags as $tag) { if (!in_array(mb_strtolower($tag, 'UTF-8'), $existingSlug)) { $name = filter_allowed_words($tag); $slug = preg_replace('/\\s+/', '-', mb_strtolower($name, 'UTF-8')); if (in_array($slug, $existingSlug)) { if ($isNew) { Tag::whereSlug($slug)->increment('count'); } $updateTagIds[] = $existingTag[$slug]['id']; } else { $firstLetter = getFirstLetter($name); $newtag = Tag::create(array('name' => $name, 'slug' => $slug, 'letter' => $firstLetter)); $newId = $newtag->id; $newTagIds[] = $newId; $updateTagIds[] = $newId; } } else { if ($isNew) { Tag::whereSlug($tag)->increment('count'); } $updateTagIds[] = $existingTag[$tag]['id']; } } } $updateTagIds = array_unique($updateTagIds); if (!$isNew) { $oldTagIds = $article->tags->lists('id')->toArray(); $delTagIds = array_diff($oldTagIds, $updateTagIds); $addTagIds = array_diff($updateTagIds, $oldTagIds); if (!empty($delTagIds)) { Tag::whereIn('id', $delTagIds)->decrement('count'); } if (!empty($addTagIds)) { foreach ($addTagIds as $addId) { if (!in_array($addId, $newTagIds)) { Tag::whereId($addId)->increment('count'); } } } } $article->tags()->sync($updateTagIds); unset($newTagIds, $updateTagIds, $existingSlug, $existingTag); }
function baidu_translate($q = '') { if (empty($q)) { return false; } $q = filter_allowed_words($q); $appid = env('BAIDU_TRANSTALE_APPID'); $key = env('BAIDU_TRANSTALE_KEY'); $salt = rand(1, 999); $sign = md5($appid . $q . $salt . $key); $url = 'http://api.fanyi.baidu.com/api/trans/vip/translate?q=' . $q . '&appid=' . $appid . '&salt=' . $salt . '&from=zh&to=en&sign=' . $sign; $result = json_decode(file_get_contents($url), true); $dst = $result['trans_result'][0]['dst']; return $dst ? strtolower($dst) : false; }