From 989048ea0f4587683040c7f4a9e78c0efedc2a1d Mon Sep 17 00:00:00 2001 From: karimkawambwa <4308339+karimkawambwa@users.noreply.github.com> Date: Thu, 30 Jan 2020 14:34:28 +0300 Subject: [PATCH] Introduce wp-multilang plugin --- .gitignore | 2 + .../assets/scripts/add-lang-to-customizer.js | 36 + .../scripts/add-lang-to-customizer.min.js | 1 + .../assets/scripts/additional-settings.js | 81 ++ .../assets/scripts/additional-settings.min.js | 1 + .../wp-multilang/assets/scripts/customizer.js | 10 + .../assets/scripts/customizer.min.js | 1 + .../assets/scripts/language-switcher.js | 10 + .../assets/scripts/language-switcher.min.js | 1 + .../wp-multilang/assets/scripts/languages.js | 83 ++ .../assets/scripts/languages.min.js | 1 + .../wp-multilang/assets/scripts/settings.js | 26 + .../assets/scripts/settings.min.js | 1 + .../wp-multilang/assets/scripts/translator.js | 94 ++ .../assets/scripts/translator.min.js | 1 + .../assets/styles/admin/admin.css | 185 ++++ .../assets/styles/admin/admin.css.map | 17 + .../assets/styles/admin/admin.min.css | 1 + .../assets/styles/admin/admin.scss | 8 + .../styles/admin/common/_variables.scss | 7 + .../admin/components/_lang-switcher.scss | 118 +++ .../admin/components/_language-metabox.scss | 9 + .../admin/components/_languages-list.scss | 50 ++ .../styles/admin/layouts/_customizer.scss | 28 + .../styles/admin/layouts/_gutenberg.scss | 47 + .../styles/admin/layouts/_settings.scss | 39 + .../assets/styles/admin/layouts/_table.scss | 3 + .../assets/styles/common/_variables.scss | 4 + .../styles/components/_lang-switcher.scss | 87 ++ .../assets/styles/components/_menu.scss | 13 + .../wp-multilang/assets/styles/main.css | 52 ++ .../wp-multilang/assets/styles/main.css.map | 12 + .../wp-multilang/assets/styles/main.min.css | 1 + .../wp-multilang/assets/styles/main.scss | 3 + .../wp-multilang/assets/styles/notices.css | 7 + .../assets/styles/notices.css.map | 11 + .../assets/styles/notices.min.css | 1 + .../wp-multilang/assets/styles/notices.scss | 2 + .../assets/styles/notices/_core.scss | 7 + .../configs/plugins/all-in-one-seo-pack.json | 31 + .../configs/plugins/better-search.json | 13 + .../configs/plugins/buddypress.json | 24 + .../configs/plugins/contact-form-7.json | 44 + .../configs/plugins/download-monitor.json | 15 + .../configs/plugins/google-maps-builder.json | 13 + .../configs/plugins/mailchimp-for-wp.json | 23 + .../configs/plugins/megamenu.json | 12 + .../configs/plugins/ml-slider.json | 19 + .../configs/plugins/newsletter.json | 82 ++ .../configs/plugins/nextgen-gallery.json | 12 + .../configs/plugins/seo-by-rank-math.json | 39 + .../configs/plugins/siteorigin-panels.json | 116 +++ .../configs/plugins/tablepress.json | 11 + .../plugins/woocommerce-customizer.json | 25 + .../configs/plugins/woocommerce.json | 120 +++ .../configs/plugins/wordpress-seo.json | 59 ++ .../configs/plugins/wp-pagenavi.json | 18 + .../wp-multilang/configs/themes/.gitkeep | 0 .../plugins/wp-multilang/core-config.json | 56 ++ .../plugins/wp-multilang/flags/ad.alt.png | Bin 0 -> 201 bytes wp-content/plugins/wp-multilang/flags/ad.png | Bin 0 -> 276 bytes wp-content/plugins/wp-multilang/flags/ae.png | Bin 0 -> 146 bytes wp-content/plugins/wp-multilang/flags/af.png | Bin 0 -> 231 bytes wp-content/plugins/wp-multilang/flags/ag.png | Bin 0 -> 313 bytes .../plugins/wp-multilang/flags/ai.alt.png | Bin 0 -> 202 bytes wp-content/plugins/wp-multilang/flags/ai.png | Bin 0 -> 312 bytes wp-content/plugins/wp-multilang/flags/al.png | Bin 0 -> 212 bytes wp-content/plugins/wp-multilang/flags/am.png | Bin 0 -> 133 bytes wp-content/plugins/wp-multilang/flags/an.png | Bin 0 -> 182 bytes wp-content/plugins/wp-multilang/flags/ao.png | Bin 0 -> 197 bytes wp-content/plugins/wp-multilang/flags/aq.png | Bin 0 -> 274 bytes .../plugins/wp-multilang/flags/ar.alt.png | Bin 0 -> 176 bytes wp-content/plugins/wp-multilang/flags/ar.png | Bin 0 -> 198 bytes .../plugins/wp-multilang/flags/arle.png | Bin 0 -> 207 bytes wp-content/plugins/wp-multilang/flags/as.png | Bin 0 -> 301 bytes .../plugins/wp-multilang/flags/at.alt.png | Bin 0 -> 234 bytes wp-content/plugins/wp-multilang/flags/at.png | Bin 0 -> 117 bytes wp-content/plugins/wp-multilang/flags/au.png | Bin 0 -> 332 bytes wp-content/plugins/wp-multilang/flags/aw.png | Bin 0 -> 205 bytes wp-content/plugins/wp-multilang/flags/ax.png | Bin 0 -> 292 bytes wp-content/plugins/wp-multilang/flags/az.png | Bin 0 -> 223 bytes wp-content/plugins/wp-multilang/flags/ba.png | Bin 0 -> 301 bytes wp-content/plugins/wp-multilang/flags/bb.png | Bin 0 -> 218 bytes wp-content/plugins/wp-multilang/flags/bd.png | Bin 0 -> 180 bytes wp-content/plugins/wp-multilang/flags/be.png | Bin 0 -> 118 bytes wp-content/plugins/wp-multilang/flags/bf.png | Bin 0 -> 169 bytes wp-content/plugins/wp-multilang/flags/bg.png | Bin 0 -> 132 bytes wp-content/plugins/wp-multilang/flags/bh.png | Bin 0 -> 206 bytes .../plugins/wp-multilang/flags/bi.alt.png | Bin 0 -> 322 bytes wp-content/plugins/wp-multilang/flags/bi.png | Bin 0 -> 292 bytes wp-content/plugins/wp-multilang/flags/bj.png | Bin 0 -> 163 bytes wp-content/plugins/wp-multilang/flags/bm.png | Bin 0 -> 315 bytes wp-content/plugins/wp-multilang/flags/bn.png | Bin 0 -> 330 bytes wp-content/plugins/wp-multilang/flags/bo.png | Bin 0 -> 127 bytes wp-content/plugins/wp-multilang/flags/br.png | Bin 0 -> 336 bytes wp-content/plugins/wp-multilang/flags/bs.png | Bin 0 -> 207 bytes wp-content/plugins/wp-multilang/flags/bt.png | Bin 0 -> 300 bytes wp-content/plugins/wp-multilang/flags/bv.png | Bin 0 -> 254 bytes wp-content/plugins/wp-multilang/flags/bw.png | Bin 0 -> 159 bytes wp-content/plugins/wp-multilang/flags/by.png | Bin 0 -> 183 bytes wp-content/plugins/wp-multilang/flags/bz.png | Bin 0 -> 322 bytes .../plugins/wp-multilang/flags/ca.alt.png | Bin 0 -> 163 bytes wp-content/plugins/wp-multilang/flags/ca.png | Bin 0 -> 259 bytes .../plugins/wp-multilang/flags/cc.alt.png | Bin 0 -> 286 bytes wp-content/plugins/wp-multilang/flags/cc.png | Bin 0 -> 332 bytes wp-content/plugins/wp-multilang/flags/cd.png | Bin 0 -> 266 bytes wp-content/plugins/wp-multilang/flags/cf.png | Bin 0 -> 221 bytes wp-content/plugins/wp-multilang/flags/cg.png | Bin 0 -> 171 bytes wp-content/plugins/wp-multilang/flags/ch.png | Bin 0 -> 183 bytes wp-content/plugins/wp-multilang/flags/ci.png | Bin 0 -> 168 bytes wp-content/plugins/wp-multilang/flags/ck.png | Bin 0 -> 314 bytes wp-content/plugins/wp-multilang/flags/cl.png | Bin 0 -> 167 bytes wp-content/plugins/wp-multilang/flags/cm.png | Bin 0 -> 181 bytes wp-content/plugins/wp-multilang/flags/cn.png | Bin 0 -> 169 bytes wp-content/plugins/wp-multilang/flags/co.png | Bin 0 -> 136 bytes .../plugins/wp-multilang/flags/cr.alt.png | Bin 0 -> 197 bytes wp-content/plugins/wp-multilang/flags/cr.png | Bin 0 -> 152 bytes wp-content/plugins/wp-multilang/flags/cs.png | Bin 0 -> 146 bytes wp-content/plugins/wp-multilang/flags/cu.png | Bin 0 -> 263 bytes wp-content/plugins/wp-multilang/flags/cv.png | Bin 0 -> 218 bytes wp-content/plugins/wp-multilang/flags/cx.png | Bin 0 -> 318 bytes wp-content/plugins/wp-multilang/flags/cy.png | Bin 0 -> 215 bytes wp-content/plugins/wp-multilang/flags/cz.png | Bin 0 -> 201 bytes wp-content/plugins/wp-multilang/flags/da.png | Bin 0 -> 170 bytes wp-content/plugins/wp-multilang/flags/de.png | Bin 0 -> 126 bytes wp-content/plugins/wp-multilang/flags/dj.png | Bin 0 -> 229 bytes wp-content/plugins/wp-multilang/flags/dk.png | Bin 0 -> 170 bytes wp-content/plugins/wp-multilang/flags/dm.png | Bin 0 -> 333 bytes wp-content/plugins/wp-multilang/flags/do.png | Bin 0 -> 275 bytes wp-content/plugins/wp-multilang/flags/dz.png | Bin 0 -> 203 bytes .../plugins/wp-multilang/flags/ec.alt.png | Bin 0 -> 122 bytes wp-content/plugins/wp-multilang/flags/ec.png | Bin 0 -> 224 bytes wp-content/plugins/wp-multilang/flags/ee.png | Bin 0 -> 154 bytes wp-content/plugins/wp-multilang/flags/eg.png | Bin 0 -> 143 bytes .../plugins/wp-multilang/flags/eh.alt.png | Bin 0 -> 155 bytes wp-content/plugins/wp-multilang/flags/eh.png | Bin 0 -> 176 bytes wp-content/plugins/wp-multilang/flags/el.png | Bin 0 -> 248 bytes wp-content/plugins/wp-multilang/flags/en.png | Bin 0 -> 331 bytes wp-content/plugins/wp-multilang/flags/eo.png | Bin 0 -> 93 bytes wp-content/plugins/wp-multilang/flags/er.png | Bin 0 -> 303 bytes .../plugins/wp-multilang/flags/es.alt.png | Bin 0 -> 113 bytes wp-content/plugins/wp-multilang/flags/es.png | Bin 0 -> 188 bytes .../plugins/wp-multilang/flags/et.alt.png | Bin 0 -> 145 bytes .../plugins/wp-multilang/flags/et.o.png | Bin 0 -> 235 bytes wp-content/plugins/wp-multilang/flags/et.png | Bin 0 -> 152 bytes wp-content/plugins/wp-multilang/flags/eu.png | Bin 0 -> 173 bytes wp-content/plugins/wp-multilang/flags/fa.png | Bin 0 -> 226 bytes wp-content/plugins/wp-multilang/flags/fi.png | Bin 0 -> 197 bytes wp-content/plugins/wp-multilang/flags/fj.png | Bin 0 -> 331 bytes wp-content/plugins/wp-multilang/flags/fk.png | Bin 0 -> 332 bytes wp-content/plugins/wp-multilang/flags/fm.png | Bin 0 -> 203 bytes wp-content/plugins/wp-multilang/flags/fo.png | Bin 0 -> 254 bytes wp-content/plugins/wp-multilang/flags/fr.png | Bin 0 -> 146 bytes wp-content/plugins/wp-multilang/flags/fx.png | Bin 0 -> 311 bytes wp-content/plugins/wp-multilang/flags/ga.png | Bin 0 -> 179 bytes wp-content/plugins/wp-multilang/flags/gb.png | Bin 0 -> 331 bytes wp-content/plugins/wp-multilang/flags/gd.png | Bin 0 -> 320 bytes wp-content/plugins/wp-multilang/flags/ge.png | Bin 0 -> 231 bytes wp-content/plugins/wp-multilang/flags/gf.png | Bin 0 -> 146 bytes wp-content/plugins/wp-multilang/flags/gg.png | Bin 0 -> 233 bytes wp-content/plugins/wp-multilang/flags/gh.png | Bin 0 -> 163 bytes wp-content/plugins/wp-multilang/flags/gi.png | Bin 0 -> 213 bytes wp-content/plugins/wp-multilang/flags/gl.png | Bin 0 -> 186 bytes wp-content/plugins/wp-multilang/flags/gm.png | Bin 0 -> 140 bytes wp-content/plugins/wp-multilang/flags/gn.png | Bin 0 -> 128 bytes wp-content/plugins/wp-multilang/flags/gp.png | Bin 0 -> 146 bytes wp-content/plugins/wp-multilang/flags/gq.png | Bin 0 -> 252 bytes wp-content/plugins/wp-multilang/flags/gr.png | Bin 0 -> 248 bytes wp-content/plugins/wp-multilang/flags/gs.png | Bin 0 -> 330 bytes .../plugins/wp-multilang/flags/gt.alt.png | Bin 0 -> 166 bytes wp-content/plugins/wp-multilang/flags/gt.png | Bin 0 -> 229 bytes wp-content/plugins/wp-multilang/flags/gu.png | Bin 0 -> 285 bytes wp-content/plugins/wp-multilang/flags/gw.png | Bin 0 -> 154 bytes wp-content/plugins/wp-multilang/flags/gy.png | Bin 0 -> 254 bytes wp-content/plugins/wp-multilang/flags/he.png | Bin 0 -> 191 bytes wp-content/plugins/wp-multilang/flags/hi.png | Bin 0 -> 183 bytes wp-content/plugins/wp-multilang/flags/hk.png | Bin 0 -> 214 bytes wp-content/plugins/wp-multilang/flags/hm.png | Bin 0 -> 332 bytes wp-content/plugins/wp-multilang/flags/hn.png | Bin 0 -> 184 bytes wp-content/plugins/wp-multilang/flags/hr.png | Bin 0 -> 247 bytes .../plugins/wp-multilang/flags/ht.alt.png | Bin 0 -> 139 bytes wp-content/plugins/wp-multilang/flags/ht.png | Bin 0 -> 212 bytes wp-content/plugins/wp-multilang/flags/hu.png | Bin 0 -> 151 bytes wp-content/plugins/wp-multilang/flags/hy.png | Bin 0 -> 133 bytes wp-content/plugins/wp-multilang/flags/id.png | Bin 0 -> 121 bytes wp-content/plugins/wp-multilang/flags/ie.png | Bin 0 -> 164 bytes wp-content/plugins/wp-multilang/flags/il.png | Bin 0 -> 191 bytes wp-content/plugins/wp-multilang/flags/im.png | Bin 0 -> 219 bytes wp-content/plugins/wp-multilang/flags/in.png | Bin 0 -> 186 bytes wp-content/plugins/wp-multilang/flags/io.png | Bin 0 -> 342 bytes wp-content/plugins/wp-multilang/flags/iq.png | Bin 0 -> 145 bytes wp-content/plugins/wp-multilang/flags/ir.png | Bin 0 -> 226 bytes wp-content/plugins/wp-multilang/flags/is.png | Bin 0 -> 235 bytes wp-content/plugins/wp-multilang/flags/it.png | Bin 0 -> 142 bytes wp-content/plugins/wp-multilang/flags/ja.png | Bin 0 -> 163 bytes wp-content/plugins/wp-multilang/flags/je.png | Bin 0 -> 270 bytes wp-content/plugins/wp-multilang/flags/jm.png | Bin 0 -> 272 bytes wp-content/plugins/wp-multilang/flags/jo.png | Bin 0 -> 185 bytes wp-content/plugins/wp-multilang/flags/jp.png | Bin 0 -> 163 bytes wp-content/plugins/wp-multilang/flags/ke.png | Bin 0 -> 262 bytes wp-content/plugins/wp-multilang/flags/kg.png | Bin 0 -> 179 bytes wp-content/plugins/wp-multilang/flags/kh.png | Bin 0 -> 247 bytes wp-content/plugins/wp-multilang/flags/ki.png | Bin 0 -> 330 bytes wp-content/plugins/wp-multilang/flags/km.png | Bin 0 -> 281 bytes wp-content/plugins/wp-multilang/flags/kn.png | Bin 0 -> 313 bytes wp-content/plugins/wp-multilang/flags/ko.png | Bin 0 -> 256 bytes wp-content/plugins/wp-multilang/flags/kp.png | Bin 0 -> 220 bytes wp-content/plugins/wp-multilang/flags/kr.png | Bin 0 -> 256 bytes wp-content/plugins/wp-multilang/flags/ku.png | Bin 0 -> 190 bytes wp-content/plugins/wp-multilang/flags/kw.png | Bin 0 -> 181 bytes wp-content/plugins/wp-multilang/flags/ky.png | Bin 0 -> 310 bytes wp-content/plugins/wp-multilang/flags/kz.png | Bin 0 -> 272 bytes wp-content/plugins/wp-multilang/flags/la.png | Bin 0 -> 149 bytes wp-content/plugins/wp-multilang/flags/lb.png | Bin 0 -> 213 bytes wp-content/plugins/wp-multilang/flags/lc.png | Bin 0 -> 242 bytes wp-content/plugins/wp-multilang/flags/li.png | Bin 0 -> 188 bytes wp-content/plugins/wp-multilang/flags/lk.png | Bin 0 -> 305 bytes wp-content/plugins/wp-multilang/flags/lr.png | Bin 0 -> 286 bytes wp-content/plugins/wp-multilang/flags/ls.png | Bin 0 -> 279 bytes wp-content/plugins/wp-multilang/flags/lt.png | Bin 0 -> 125 bytes wp-content/plugins/wp-multilang/flags/lu.png | Bin 0 -> 137 bytes wp-content/plugins/wp-multilang/flags/lv.png | Bin 0 -> 164 bytes wp-content/plugins/wp-multilang/flags/ly.png | Bin 0 -> 128 bytes wp-content/plugins/wp-multilang/flags/ma.png | Bin 0 -> 141 bytes wp-content/plugins/wp-multilang/flags/mc.png | Bin 0 -> 114 bytes wp-content/plugins/wp-multilang/flags/md.png | Bin 0 -> 297 bytes wp-content/plugins/wp-multilang/flags/me.png | Bin 0 -> 338 bytes wp-content/plugins/wp-multilang/flags/mg.png | Bin 0 -> 126 bytes wp-content/plugins/wp-multilang/flags/mh.png | Bin 0 -> 323 bytes wp-content/plugins/wp-multilang/flags/mk.png | Bin 0 -> 269 bytes wp-content/plugins/wp-multilang/flags/ml.png | Bin 0 -> 139 bytes wp-content/plugins/wp-multilang/flags/mm.png | Bin 0 -> 225 bytes wp-content/plugins/wp-multilang/flags/mn.png | Bin 0 -> 186 bytes wp-content/plugins/wp-multilang/flags/mo.png | Bin 0 -> 261 bytes wp-content/plugins/wp-multilang/flags/mp.png | Bin 0 -> 315 bytes wp-content/plugins/wp-multilang/flags/mq.png | Bin 0 -> 146 bytes wp-content/plugins/wp-multilang/flags/mr.png | Bin 0 -> 212 bytes .../plugins/wp-multilang/flags/ms.bak.png | Bin 0 -> 332 bytes wp-content/plugins/wp-multilang/flags/ms.png | Bin 0 -> 295 bytes wp-content/plugins/wp-multilang/flags/mt.png | Bin 0 -> 148 bytes wp-content/plugins/wp-multilang/flags/mu.png | Bin 0 -> 146 bytes wp-content/plugins/wp-multilang/flags/mv.png | Bin 0 -> 179 bytes wp-content/plugins/wp-multilang/flags/mw.png | Bin 0 -> 168 bytes wp-content/plugins/wp-multilang/flags/mx.png | Bin 0 -> 257 bytes wp-content/plugins/wp-multilang/flags/my.png | Bin 0 -> 314 bytes wp-content/plugins/wp-multilang/flags/mz.png | Bin 0 -> 280 bytes wp-content/plugins/wp-multilang/flags/na.png | Bin 0 -> 307 bytes wp-content/plugins/wp-multilang/flags/nb.png | Bin 0 -> 254 bytes wp-content/plugins/wp-multilang/flags/nc.png | Bin 0 -> 146 bytes wp-content/plugins/wp-multilang/flags/ne.png | Bin 0 -> 183 bytes wp-content/plugins/wp-multilang/flags/nf.png | Bin 0 -> 280 bytes wp-content/plugins/wp-multilang/flags/ng.png | Bin 0 -> 157 bytes .../plugins/wp-multilang/flags/ni.alt.png | Bin 0 -> 160 bytes wp-content/plugins/wp-multilang/flags/ni.png | Bin 0 -> 215 bytes wp-content/plugins/wp-multilang/flags/nil.png | Bin 0 -> 70 bytes wp-content/plugins/wp-multilang/flags/nl.png | Bin 0 -> 163 bytes wp-content/plugins/wp-multilang/flags/no.png | Bin 0 -> 254 bytes wp-content/plugins/wp-multilang/flags/np.png | Bin 0 -> 272 bytes wp-content/plugins/wp-multilang/flags/nr.png | Bin 0 -> 190 bytes wp-content/plugins/wp-multilang/flags/nu.png | Bin 0 -> 255 bytes wp-content/plugins/wp-multilang/flags/nz.png | Bin 0 -> 297 bytes wp-content/plugins/wp-multilang/flags/oc.png | Bin 0 -> 241 bytes wp-content/plugins/wp-multilang/flags/om.png | Bin 0 -> 224 bytes wp-content/plugins/wp-multilang/flags/pa.png | Bin 0 -> 194 bytes wp-content/plugins/wp-multilang/flags/pe.png | Bin 0 -> 116 bytes .../plugins/wp-multilang/flags/pf.alt.png | Bin 0 -> 213 bytes wp-content/plugins/wp-multilang/flags/pf.png | Bin 0 -> 146 bytes wp-content/plugins/wp-multilang/flags/pg.png | Bin 0 -> 249 bytes wp-content/plugins/wp-multilang/flags/ph.png | Bin 0 -> 243 bytes wp-content/plugins/wp-multilang/flags/pk.png | Bin 0 -> 238 bytes wp-content/plugins/wp-multilang/flags/pl.png | Bin 0 -> 117 bytes wp-content/plugins/wp-multilang/flags/pm.png | Bin 0 -> 146 bytes wp-content/plugins/wp-multilang/flags/pn.png | Bin 0 -> 330 bytes wp-content/plugins/wp-multilang/flags/pr.png | Bin 0 -> 268 bytes wp-content/plugins/wp-multilang/flags/ps.png | Bin 0 -> 165 bytes .../plugins/wp-multilang/flags/pt-br.png | Bin 0 -> 336 bytes .../plugins/wp-multilang/flags/pt-pt.png | Bin 0 -> 255 bytes wp-content/plugins/wp-multilang/flags/pt.png | Bin 0 -> 255 bytes wp-content/plugins/wp-multilang/flags/pw.png | Bin 0 -> 210 bytes wp-content/plugins/wp-multilang/flags/py.png | Bin 0 -> 174 bytes wp-content/plugins/wp-multilang/flags/qa.png | Bin 0 -> 182 bytes wp-content/plugins/wp-multilang/flags/qu.png | Bin 0 -> 119 bytes wp-content/plugins/wp-multilang/flags/re.png | Bin 0 -> 146 bytes wp-content/plugins/wp-multilang/flags/ro.png | Bin 0 -> 135 bytes wp-content/plugins/wp-multilang/flags/rs.png | Bin 0 -> 273 bytes wp-content/plugins/wp-multilang/flags/ru.png | Bin 0 -> 117 bytes wp-content/plugins/wp-multilang/flags/rw.png | Bin 0 -> 224 bytes wp-content/plugins/wp-multilang/flags/sa.png | Bin 0 -> 232 bytes wp-content/plugins/wp-multilang/flags/sb.png | Bin 0 -> 274 bytes wp-content/plugins/wp-multilang/flags/sc.png | Bin 0 -> 332 bytes wp-content/plugins/wp-multilang/flags/sd.png | Bin 0 -> 150 bytes wp-content/plugins/wp-multilang/flags/se.png | Bin 0 -> 237 bytes wp-content/plugins/wp-multilang/flags/sg.png | Bin 0 -> 201 bytes wp-content/plugins/wp-multilang/flags/sh.png | Bin 0 -> 313 bytes wp-content/plugins/wp-multilang/flags/si.png | Bin 0 -> 191 bytes wp-content/plugins/wp-multilang/flags/sj.png | Bin 0 -> 254 bytes wp-content/plugins/wp-multilang/flags/sk.png | Bin 0 -> 242 bytes .../plugins/wp-multilang/flags/sl-wrong.png | Bin 0 -> 143 bytes wp-content/plugins/wp-multilang/flags/sl.png | Bin 0 -> 189 bytes wp-content/plugins/wp-multilang/flags/sm.png | Bin 0 -> 257 bytes wp-content/plugins/wp-multilang/flags/sn.png | Bin 0 -> 186 bytes wp-content/plugins/wp-multilang/flags/so.png | Bin 0 -> 203 bytes wp-content/plugins/wp-multilang/flags/sq.png | Bin 0 -> 212 bytes wp-content/plugins/wp-multilang/flags/sr.png | Bin 0 -> 222 bytes wp-content/plugins/wp-multilang/flags/st.png | Bin 0 -> 231 bytes wp-content/plugins/wp-multilang/flags/sv.png | Bin 0 -> 165 bytes wp-content/plugins/wp-multilang/flags/sy.png | Bin 0 -> 144 bytes wp-content/plugins/wp-multilang/flags/sz.png | Bin 0 -> 328 bytes wp-content/plugins/wp-multilang/flags/ta.png | Bin 0 -> 150 bytes wp-content/plugins/wp-multilang/flags/tc.png | Bin 0 -> 312 bytes wp-content/plugins/wp-multilang/flags/td.png | Bin 0 -> 145 bytes wp-content/plugins/wp-multilang/flags/tf.png | Bin 0 -> 146 bytes wp-content/plugins/wp-multilang/flags/tg.png | Bin 0 -> 247 bytes wp-content/plugins/wp-multilang/flags/th.png | Bin 0 -> 145 bytes wp-content/plugins/wp-multilang/flags/tj.png | Bin 0 -> 204 bytes wp-content/plugins/wp-multilang/flags/tk.png | Bin 0 -> 297 bytes wp-content/plugins/wp-multilang/flags/tl.png | Bin 0 -> 212 bytes wp-content/plugins/wp-multilang/flags/tm.png | Bin 0 -> 276 bytes wp-content/plugins/wp-multilang/flags/tn.png | Bin 0 -> 150 bytes wp-content/plugins/wp-multilang/flags/to.png | Bin 0 -> 172 bytes wp-content/plugins/wp-multilang/flags/tp.png | Bin 0 -> 332 bytes wp-content/plugins/wp-multilang/flags/tr.png | Bin 0 -> 159 bytes wp-content/plugins/wp-multilang/flags/tt.png | Bin 0 -> 257 bytes wp-content/plugins/wp-multilang/flags/tv.png | Bin 0 -> 330 bytes wp-content/plugins/wp-multilang/flags/tw.png | Bin 0 -> 215 bytes wp-content/plugins/wp-multilang/flags/tz.png | Bin 0 -> 277 bytes wp-content/plugins/wp-multilang/flags/ua.png | Bin 0 -> 147 bytes wp-content/plugins/wp-multilang/flags/ug.png | Bin 0 -> 200 bytes wp-content/plugins/wp-multilang/flags/uk.png | Bin 0 -> 331 bytes wp-content/plugins/wp-multilang/flags/um.png | Bin 0 -> 307 bytes wp-content/plugins/wp-multilang/flags/ur.png | Bin 0 -> 236 bytes wp-content/plugins/wp-multilang/flags/us.png | Bin 0 -> 307 bytes wp-content/plugins/wp-multilang/flags/uy.png | Bin 0 -> 295 bytes wp-content/plugins/wp-multilang/flags/uz.png | Bin 0 -> 256 bytes wp-content/plugins/wp-multilang/flags/va.png | Bin 0 -> 168 bytes wp-content/plugins/wp-multilang/flags/vc.png | Bin 0 -> 252 bytes wp-content/plugins/wp-multilang/flags/ve.png | Bin 0 -> 215 bytes wp-content/plugins/wp-multilang/flags/vg.png | Bin 0 -> 315 bytes wp-content/plugins/wp-multilang/flags/vi.png | Bin 0 -> 349 bytes wp-content/plugins/wp-multilang/flags/vn.png | Bin 0 -> 181 bytes wp-content/plugins/wp-multilang/flags/vu.png | Bin 0 -> 289 bytes .../plugins/wp-multilang/flags/wf.alt.png | Bin 0 -> 258 bytes wp-content/plugins/wp-multilang/flags/wf.png | Bin 0 -> 146 bytes wp-content/plugins/wp-multilang/flags/ws.png | Bin 0 -> 176 bytes wp-content/plugins/wp-multilang/flags/xt.png | Bin 0 -> 345 bytes wp-content/plugins/wp-multilang/flags/ye.png | Bin 0 -> 108 bytes wp-content/plugins/wp-multilang/flags/yi.png | Bin 0 -> 191 bytes wp-content/plugins/wp-multilang/flags/yt.png | Bin 0 -> 146 bytes wp-content/plugins/wp-multilang/flags/yu.png | Bin 0 -> 146 bytes wp-content/plugins/wp-multilang/flags/za.png | Bin 0 -> 286 bytes .../plugins/wp-multilang/flags/zh-hans.png | Bin 0 -> 169 bytes .../plugins/wp-multilang/flags/zh-hant.png | Bin 0 -> 142 bytes wp-content/plugins/wp-multilang/flags/zh.png | Bin 0 -> 169 bytes wp-content/plugins/wp-multilang/flags/zm.png | Bin 0 -> 260 bytes wp-content/plugins/wp-multilang/flags/zu.png | Bin 0 -> 286 bytes wp-content/plugins/wp-multilang/flags/zw.png | Bin 0 -> 304 bytes wp-content/plugins/wp-multilang/flags/zz.png | Bin 0 -> 232 bytes .../abstracts/abstract-wpm-object.php | 440 +++++++++ .../abstracts/abstract-wpm-widget.php | 273 ++++++ .../includes/admin/class-wpm-admin-assets.php | 219 +++++ .../admin/class-wpm-admin-customizer.php | 52 ++ .../admin/class-wpm-admin-edit-menus.php | 123 +++ .../includes/admin/class-wpm-admin-menus.php | 276 ++++++ .../admin/class-wpm-admin-meta-boxes.php | 147 +++ .../admin/class-wpm-admin-notices.php | 191 ++++ .../includes/admin/class-wpm-admin-posts.php | 159 ++++ .../admin/class-wpm-admin-qtranslate.php | 53 ++ .../admin/class-wpm-admin-settings.php | 595 +++++++++++++ .../admin/class-wpm-admin-taxonomies.php | 188 ++++ .../admin/class-wpm-admin-widgets.php | 81 ++ .../includes/admin/class-wpm-admin.php | 106 +++ .../class-wpm-meta-box-comment-languages.php | 78 ++ .../class-wpm-meta-box-post-languages.php | 63 ++ .../class-wpm-settings-additional.php | 156 ++++ .../settings/class-wpm-settings-general.php | 149 ++++ .../settings/class-wpm-settings-languages.php | 149 ++++ .../settings/class-wpm-settings-page.php | 138 +++ .../admin/settings/views/html-languages.php | 210 +++++ .../admin/views/html-admin-settings.php | 56 ++ .../admin/views/html-notice-custom.php | 14 + .../admin/views/html-notice-update.php | 19 + .../admin/views/html-notice-updated.php | 15 + .../admin/views/html-notice-updating.php | 13 + .../includes/class-wp-multilang.php | 247 ++++++ .../wp-multilang/includes/class-wpm-ajax.php | 297 +++++++ .../includes/class-wpm-background-updater.php | 101 +++ .../includes/class-wpm-comments.php | 135 +++ .../includes/class-wpm-config.php | 124 +++ .../includes/class-wpm-frontend-scripts.php | 198 +++++ .../includes/class-wpm-install.php | 425 +++++++++ .../wp-multilang/includes/class-wpm-menus.php | 278 ++++++ .../includes/class-wpm-options.php | 68 ++ .../wp-multilang/includes/class-wpm-posts.php | 225 +++++ .../includes/class-wpm-rest-settings.php | 211 +++++ .../wp-multilang/includes/class-wpm-setup.php | 838 ++++++++++++++++++ .../includes/class-wpm-shortcodes.php | 57 ++ .../includes/class-wpm-site-options.php | 105 +++ .../includes/class-wpm-taxonomies.php | 310 +++++++ .../wp-multilang/includes/class-wpm-users.php | 40 + .../includes/class-wpm-widgets.php | 39 + .../plugins/wp-multilang/includes/index.php | 1 + .../includes/integrations/class-wpm-acf.php | 160 ++++ .../includes/integrations/class-wpm-aiosp.php | 160 ++++ .../integrations/class-wpm-better-search.php | 64 ++ .../integrations/class-wpm-buddypress.php | 210 +++++ .../includes/integrations/class-wpm-cf7.php | 51 ++ .../class-wpm-mailchimp-for-wp.php | 28 + .../integrations/class-wpm-masterslider.php | 197 ++++ .../integrations/class-wpm-megamenu.php | 73 ++ .../integrations/class-wpm-newsletter.php | 96 ++ .../includes/integrations/class-wpm-ngg.php | 233 +++++ .../includes/integrations/class-wpm-pbso.php | 125 +++ .../integrations/class-wpm-rank-math.php | 186 ++++ .../integrations/class-wpm-tablepress.php | 73 ++ .../includes/integrations/class-wpm-vc.php | 105 +++ .../integrations/class-wpm-woocommerce.php | 373 ++++++++ .../integrations/class-wpm-yoast-seo.php | 315 +++++++ .../libraries/abstract-wp-async-request.php | 160 ++++ .../abstract-wp-background-process.php | 502 +++++++++++ .../class-wpm-walker-nav-menu-edit.php | 85 ++ .../class-wpm-widget-language-switcher.php | 79 ++ .../includes/wpm-config-functions.php | 91 ++ .../includes/wpm-core-functions.php | 523 +++++++++++ .../includes/wpm-formatting-functions.php | 192 ++++ .../includes/wpm-language-functions.php | 142 +++ .../includes/wpm-template-functions.php | 463 ++++++++++ .../includes/wpm-translation-functions.php | 535 +++++++++++ .../includes/wpm-update-functions.php | 169 ++++ .../includes/wpm-widget-functions.php | 22 + wp-content/plugins/wp-multilang/index.php | 1 + .../languages/wp-multilang-bg_BG.mo | Bin 0 -> 9245 bytes .../languages/wp-multilang-bg_BG.po | 516 +++++++++++ .../wp-multilang/languages/wp-multilang.pot | 480 ++++++++++ wp-content/plugins/wp-multilang/readme.txt | 271 ++++++ .../admin-language-switcher-customizer.php | 29 + .../templates/admin-language-switcher.php | 12 + .../templates/language-switcher-dropdown.php | 27 + .../templates/language-switcher-list.php | 23 + .../templates/language-switcher-select.php | 7 + wp-content/plugins/wp-multilang/uninstall.php | 237 +++++ .../plugins/wp-multilang/vendor/autoload.php | 7 + .../wp-multilang/vendor/autoload_52.php | 7 + .../vendor/composer/ClassLoader.php | 445 ++++++++++ .../vendor/composer/ClassLoader52.php | 271 ++++++ .../wp-multilang/vendor/composer/LICENSE | 21 + .../vendor/composer/autoload_classmap.php | 66 ++ .../vendor/composer/autoload_namespaces.php | 10 + .../vendor/composer/autoload_psr4.php | 9 + .../vendor/composer/autoload_real.php | 52 ++ .../vendor/composer/autoload_real_52.php | 44 + .../vendor/composer/autoload_static.php | 87 ++ .../vendor/composer/installed.json | 35 + .../plugins/wp-multilang/wp-multilang.php | 37 + 453 files changed, 17561 insertions(+) create mode 100644 wp-content/plugins/wp-multilang/assets/scripts/add-lang-to-customizer.js create mode 100644 wp-content/plugins/wp-multilang/assets/scripts/add-lang-to-customizer.min.js create mode 100644 wp-content/plugins/wp-multilang/assets/scripts/additional-settings.js create mode 100644 wp-content/plugins/wp-multilang/assets/scripts/additional-settings.min.js create mode 100644 wp-content/plugins/wp-multilang/assets/scripts/customizer.js create mode 100644 wp-content/plugins/wp-multilang/assets/scripts/customizer.min.js create mode 100644 wp-content/plugins/wp-multilang/assets/scripts/language-switcher.js create mode 100644 wp-content/plugins/wp-multilang/assets/scripts/language-switcher.min.js create mode 100644 wp-content/plugins/wp-multilang/assets/scripts/languages.js create mode 100644 wp-content/plugins/wp-multilang/assets/scripts/languages.min.js create mode 100644 wp-content/plugins/wp-multilang/assets/scripts/settings.js create mode 100644 wp-content/plugins/wp-multilang/assets/scripts/settings.min.js create mode 100644 wp-content/plugins/wp-multilang/assets/scripts/translator.js create mode 100644 wp-content/plugins/wp-multilang/assets/scripts/translator.min.js create mode 100644 wp-content/plugins/wp-multilang/assets/styles/admin/admin.css create mode 100644 wp-content/plugins/wp-multilang/assets/styles/admin/admin.css.map create mode 100644 wp-content/plugins/wp-multilang/assets/styles/admin/admin.min.css create mode 100644 wp-content/plugins/wp-multilang/assets/styles/admin/admin.scss create mode 100644 wp-content/plugins/wp-multilang/assets/styles/admin/common/_variables.scss create mode 100644 wp-content/plugins/wp-multilang/assets/styles/admin/components/_lang-switcher.scss create mode 100644 wp-content/plugins/wp-multilang/assets/styles/admin/components/_language-metabox.scss create mode 100644 wp-content/plugins/wp-multilang/assets/styles/admin/components/_languages-list.scss create mode 100644 wp-content/plugins/wp-multilang/assets/styles/admin/layouts/_customizer.scss create mode 100644 wp-content/plugins/wp-multilang/assets/styles/admin/layouts/_gutenberg.scss create mode 100644 wp-content/plugins/wp-multilang/assets/styles/admin/layouts/_settings.scss create mode 100644 wp-content/plugins/wp-multilang/assets/styles/admin/layouts/_table.scss create mode 100644 wp-content/plugins/wp-multilang/assets/styles/common/_variables.scss create mode 100644 wp-content/plugins/wp-multilang/assets/styles/components/_lang-switcher.scss create mode 100644 wp-content/plugins/wp-multilang/assets/styles/components/_menu.scss create mode 100644 wp-content/plugins/wp-multilang/assets/styles/main.css create mode 100644 wp-content/plugins/wp-multilang/assets/styles/main.css.map create mode 100644 wp-content/plugins/wp-multilang/assets/styles/main.min.css create mode 100644 wp-content/plugins/wp-multilang/assets/styles/main.scss create mode 100644 wp-content/plugins/wp-multilang/assets/styles/notices.css create mode 100644 wp-content/plugins/wp-multilang/assets/styles/notices.css.map create mode 100644 wp-content/plugins/wp-multilang/assets/styles/notices.min.css create mode 100644 wp-content/plugins/wp-multilang/assets/styles/notices.scss create mode 100644 wp-content/plugins/wp-multilang/assets/styles/notices/_core.scss create mode 100644 wp-content/plugins/wp-multilang/configs/plugins/all-in-one-seo-pack.json create mode 100644 wp-content/plugins/wp-multilang/configs/plugins/better-search.json create mode 100644 wp-content/plugins/wp-multilang/configs/plugins/buddypress.json create mode 100644 wp-content/plugins/wp-multilang/configs/plugins/contact-form-7.json create mode 100644 wp-content/plugins/wp-multilang/configs/plugins/download-monitor.json create mode 100644 wp-content/plugins/wp-multilang/configs/plugins/google-maps-builder.json create mode 100644 wp-content/plugins/wp-multilang/configs/plugins/mailchimp-for-wp.json create mode 100644 wp-content/plugins/wp-multilang/configs/plugins/megamenu.json create mode 100644 wp-content/plugins/wp-multilang/configs/plugins/ml-slider.json create mode 100644 wp-content/plugins/wp-multilang/configs/plugins/newsletter.json create mode 100644 wp-content/plugins/wp-multilang/configs/plugins/nextgen-gallery.json create mode 100644 wp-content/plugins/wp-multilang/configs/plugins/seo-by-rank-math.json create mode 100644 wp-content/plugins/wp-multilang/configs/plugins/siteorigin-panels.json create mode 100644 wp-content/plugins/wp-multilang/configs/plugins/tablepress.json create mode 100644 wp-content/plugins/wp-multilang/configs/plugins/woocommerce-customizer.json create mode 100644 wp-content/plugins/wp-multilang/configs/plugins/woocommerce.json create mode 100644 wp-content/plugins/wp-multilang/configs/plugins/wordpress-seo.json create mode 100644 wp-content/plugins/wp-multilang/configs/plugins/wp-pagenavi.json create mode 100644 wp-content/plugins/wp-multilang/configs/themes/.gitkeep create mode 100644 wp-content/plugins/wp-multilang/core-config.json create mode 100644 wp-content/plugins/wp-multilang/flags/ad.alt.png create mode 100644 wp-content/plugins/wp-multilang/flags/ad.png create mode 100644 wp-content/plugins/wp-multilang/flags/ae.png create mode 100644 wp-content/plugins/wp-multilang/flags/af.png create mode 100644 wp-content/plugins/wp-multilang/flags/ag.png create mode 100644 wp-content/plugins/wp-multilang/flags/ai.alt.png create mode 100644 wp-content/plugins/wp-multilang/flags/ai.png create mode 100644 wp-content/plugins/wp-multilang/flags/al.png create mode 100644 wp-content/plugins/wp-multilang/flags/am.png create mode 100644 wp-content/plugins/wp-multilang/flags/an.png create mode 100644 wp-content/plugins/wp-multilang/flags/ao.png create mode 100644 wp-content/plugins/wp-multilang/flags/aq.png create mode 100644 wp-content/plugins/wp-multilang/flags/ar.alt.png create mode 100644 wp-content/plugins/wp-multilang/flags/ar.png create mode 100644 wp-content/plugins/wp-multilang/flags/arle.png create mode 100644 wp-content/plugins/wp-multilang/flags/as.png create mode 100644 wp-content/plugins/wp-multilang/flags/at.alt.png create mode 100644 wp-content/plugins/wp-multilang/flags/at.png create mode 100644 wp-content/plugins/wp-multilang/flags/au.png create mode 100644 wp-content/plugins/wp-multilang/flags/aw.png create mode 100644 wp-content/plugins/wp-multilang/flags/ax.png create mode 100644 wp-content/plugins/wp-multilang/flags/az.png create mode 100644 wp-content/plugins/wp-multilang/flags/ba.png create mode 100644 wp-content/plugins/wp-multilang/flags/bb.png create mode 100644 wp-content/plugins/wp-multilang/flags/bd.png create mode 100644 wp-content/plugins/wp-multilang/flags/be.png create mode 100644 wp-content/plugins/wp-multilang/flags/bf.png create mode 100644 wp-content/plugins/wp-multilang/flags/bg.png create mode 100644 wp-content/plugins/wp-multilang/flags/bh.png create mode 100644 wp-content/plugins/wp-multilang/flags/bi.alt.png create mode 100644 wp-content/plugins/wp-multilang/flags/bi.png create mode 100644 wp-content/plugins/wp-multilang/flags/bj.png create mode 100644 wp-content/plugins/wp-multilang/flags/bm.png create mode 100644 wp-content/plugins/wp-multilang/flags/bn.png create mode 100644 wp-content/plugins/wp-multilang/flags/bo.png create mode 100644 wp-content/plugins/wp-multilang/flags/br.png create mode 100644 wp-content/plugins/wp-multilang/flags/bs.png create mode 100644 wp-content/plugins/wp-multilang/flags/bt.png create mode 100644 wp-content/plugins/wp-multilang/flags/bv.png create mode 100644 wp-content/plugins/wp-multilang/flags/bw.png create mode 100644 wp-content/plugins/wp-multilang/flags/by.png create mode 100644 wp-content/plugins/wp-multilang/flags/bz.png create mode 100644 wp-content/plugins/wp-multilang/flags/ca.alt.png create mode 100644 wp-content/plugins/wp-multilang/flags/ca.png create mode 100644 wp-content/plugins/wp-multilang/flags/cc.alt.png create mode 100644 wp-content/plugins/wp-multilang/flags/cc.png create mode 100644 wp-content/plugins/wp-multilang/flags/cd.png create mode 100644 wp-content/plugins/wp-multilang/flags/cf.png create mode 100644 wp-content/plugins/wp-multilang/flags/cg.png create mode 100644 wp-content/plugins/wp-multilang/flags/ch.png create mode 100644 wp-content/plugins/wp-multilang/flags/ci.png create mode 100644 wp-content/plugins/wp-multilang/flags/ck.png create mode 100644 wp-content/plugins/wp-multilang/flags/cl.png create mode 100644 wp-content/plugins/wp-multilang/flags/cm.png create mode 100644 wp-content/plugins/wp-multilang/flags/cn.png create mode 100644 wp-content/plugins/wp-multilang/flags/co.png create mode 100644 wp-content/plugins/wp-multilang/flags/cr.alt.png create mode 100644 wp-content/plugins/wp-multilang/flags/cr.png create mode 100644 wp-content/plugins/wp-multilang/flags/cs.png create mode 100644 wp-content/plugins/wp-multilang/flags/cu.png create mode 100644 wp-content/plugins/wp-multilang/flags/cv.png create mode 100644 wp-content/plugins/wp-multilang/flags/cx.png create mode 100644 wp-content/plugins/wp-multilang/flags/cy.png create mode 100644 wp-content/plugins/wp-multilang/flags/cz.png create mode 100644 wp-content/plugins/wp-multilang/flags/da.png create mode 100644 wp-content/plugins/wp-multilang/flags/de.png create mode 100644 wp-content/plugins/wp-multilang/flags/dj.png create mode 100644 wp-content/plugins/wp-multilang/flags/dk.png create mode 100644 wp-content/plugins/wp-multilang/flags/dm.png create mode 100644 wp-content/plugins/wp-multilang/flags/do.png create mode 100644 wp-content/plugins/wp-multilang/flags/dz.png create mode 100644 wp-content/plugins/wp-multilang/flags/ec.alt.png create mode 100644 wp-content/plugins/wp-multilang/flags/ec.png create mode 100644 wp-content/plugins/wp-multilang/flags/ee.png create mode 100644 wp-content/plugins/wp-multilang/flags/eg.png create mode 100644 wp-content/plugins/wp-multilang/flags/eh.alt.png create mode 100644 wp-content/plugins/wp-multilang/flags/eh.png create mode 100644 wp-content/plugins/wp-multilang/flags/el.png create mode 100644 wp-content/plugins/wp-multilang/flags/en.png create mode 100644 wp-content/plugins/wp-multilang/flags/eo.png create mode 100644 wp-content/plugins/wp-multilang/flags/er.png create mode 100644 wp-content/plugins/wp-multilang/flags/es.alt.png create mode 100644 wp-content/plugins/wp-multilang/flags/es.png create mode 100644 wp-content/plugins/wp-multilang/flags/et.alt.png create mode 100644 wp-content/plugins/wp-multilang/flags/et.o.png create mode 100644 wp-content/plugins/wp-multilang/flags/et.png create mode 100644 wp-content/plugins/wp-multilang/flags/eu.png create mode 100644 wp-content/plugins/wp-multilang/flags/fa.png create mode 100644 wp-content/plugins/wp-multilang/flags/fi.png create mode 100644 wp-content/plugins/wp-multilang/flags/fj.png create mode 100644 wp-content/plugins/wp-multilang/flags/fk.png create mode 100644 wp-content/plugins/wp-multilang/flags/fm.png create mode 100644 wp-content/plugins/wp-multilang/flags/fo.png create mode 100644 wp-content/plugins/wp-multilang/flags/fr.png create mode 100644 wp-content/plugins/wp-multilang/flags/fx.png create mode 100644 wp-content/plugins/wp-multilang/flags/ga.png create mode 100644 wp-content/plugins/wp-multilang/flags/gb.png create mode 100644 wp-content/plugins/wp-multilang/flags/gd.png create mode 100644 wp-content/plugins/wp-multilang/flags/ge.png create mode 100644 wp-content/plugins/wp-multilang/flags/gf.png create mode 100644 wp-content/plugins/wp-multilang/flags/gg.png create mode 100644 wp-content/plugins/wp-multilang/flags/gh.png create mode 100644 wp-content/plugins/wp-multilang/flags/gi.png create mode 100644 wp-content/plugins/wp-multilang/flags/gl.png create mode 100644 wp-content/plugins/wp-multilang/flags/gm.png create mode 100644 wp-content/plugins/wp-multilang/flags/gn.png create mode 100644 wp-content/plugins/wp-multilang/flags/gp.png create mode 100644 wp-content/plugins/wp-multilang/flags/gq.png create mode 100644 wp-content/plugins/wp-multilang/flags/gr.png create mode 100644 wp-content/plugins/wp-multilang/flags/gs.png create mode 100644 wp-content/plugins/wp-multilang/flags/gt.alt.png create mode 100644 wp-content/plugins/wp-multilang/flags/gt.png create mode 100644 wp-content/plugins/wp-multilang/flags/gu.png create mode 100644 wp-content/plugins/wp-multilang/flags/gw.png create mode 100644 wp-content/plugins/wp-multilang/flags/gy.png create mode 100644 wp-content/plugins/wp-multilang/flags/he.png create mode 100644 wp-content/plugins/wp-multilang/flags/hi.png create mode 100644 wp-content/plugins/wp-multilang/flags/hk.png create mode 100644 wp-content/plugins/wp-multilang/flags/hm.png create mode 100644 wp-content/plugins/wp-multilang/flags/hn.png create mode 100644 wp-content/plugins/wp-multilang/flags/hr.png create mode 100644 wp-content/plugins/wp-multilang/flags/ht.alt.png create mode 100644 wp-content/plugins/wp-multilang/flags/ht.png create mode 100644 wp-content/plugins/wp-multilang/flags/hu.png create mode 100644 wp-content/plugins/wp-multilang/flags/hy.png create mode 100644 wp-content/plugins/wp-multilang/flags/id.png create mode 100644 wp-content/plugins/wp-multilang/flags/ie.png create mode 100644 wp-content/plugins/wp-multilang/flags/il.png create mode 100644 wp-content/plugins/wp-multilang/flags/im.png create mode 100644 wp-content/plugins/wp-multilang/flags/in.png create mode 100644 wp-content/plugins/wp-multilang/flags/io.png create mode 100644 wp-content/plugins/wp-multilang/flags/iq.png create mode 100644 wp-content/plugins/wp-multilang/flags/ir.png create mode 100644 wp-content/plugins/wp-multilang/flags/is.png create mode 100644 wp-content/plugins/wp-multilang/flags/it.png create mode 100644 wp-content/plugins/wp-multilang/flags/ja.png create mode 100644 wp-content/plugins/wp-multilang/flags/je.png create mode 100644 wp-content/plugins/wp-multilang/flags/jm.png create mode 100644 wp-content/plugins/wp-multilang/flags/jo.png create mode 100644 wp-content/plugins/wp-multilang/flags/jp.png create mode 100644 wp-content/plugins/wp-multilang/flags/ke.png create mode 100644 wp-content/plugins/wp-multilang/flags/kg.png create mode 100644 wp-content/plugins/wp-multilang/flags/kh.png create mode 100644 wp-content/plugins/wp-multilang/flags/ki.png create mode 100644 wp-content/plugins/wp-multilang/flags/km.png create mode 100644 wp-content/plugins/wp-multilang/flags/kn.png create mode 100644 wp-content/plugins/wp-multilang/flags/ko.png create mode 100644 wp-content/plugins/wp-multilang/flags/kp.png create mode 100644 wp-content/plugins/wp-multilang/flags/kr.png create mode 100644 wp-content/plugins/wp-multilang/flags/ku.png create mode 100644 wp-content/plugins/wp-multilang/flags/kw.png create mode 100644 wp-content/plugins/wp-multilang/flags/ky.png create mode 100644 wp-content/plugins/wp-multilang/flags/kz.png create mode 100644 wp-content/plugins/wp-multilang/flags/la.png create mode 100644 wp-content/plugins/wp-multilang/flags/lb.png create mode 100644 wp-content/plugins/wp-multilang/flags/lc.png create mode 100644 wp-content/plugins/wp-multilang/flags/li.png create mode 100644 wp-content/plugins/wp-multilang/flags/lk.png create mode 100644 wp-content/plugins/wp-multilang/flags/lr.png create mode 100644 wp-content/plugins/wp-multilang/flags/ls.png create mode 100644 wp-content/plugins/wp-multilang/flags/lt.png create mode 100644 wp-content/plugins/wp-multilang/flags/lu.png create mode 100644 wp-content/plugins/wp-multilang/flags/lv.png create mode 100644 wp-content/plugins/wp-multilang/flags/ly.png create mode 100644 wp-content/plugins/wp-multilang/flags/ma.png create mode 100644 wp-content/plugins/wp-multilang/flags/mc.png create mode 100644 wp-content/plugins/wp-multilang/flags/md.png create mode 100644 wp-content/plugins/wp-multilang/flags/me.png create mode 100644 wp-content/plugins/wp-multilang/flags/mg.png create mode 100644 wp-content/plugins/wp-multilang/flags/mh.png create mode 100644 wp-content/plugins/wp-multilang/flags/mk.png create mode 100644 wp-content/plugins/wp-multilang/flags/ml.png create mode 100644 wp-content/plugins/wp-multilang/flags/mm.png create mode 100644 wp-content/plugins/wp-multilang/flags/mn.png create mode 100644 wp-content/plugins/wp-multilang/flags/mo.png create mode 100644 wp-content/plugins/wp-multilang/flags/mp.png create mode 100644 wp-content/plugins/wp-multilang/flags/mq.png create mode 100644 wp-content/plugins/wp-multilang/flags/mr.png create mode 100644 wp-content/plugins/wp-multilang/flags/ms.bak.png create mode 100644 wp-content/plugins/wp-multilang/flags/ms.png create mode 100644 wp-content/plugins/wp-multilang/flags/mt.png create mode 100644 wp-content/plugins/wp-multilang/flags/mu.png create mode 100644 wp-content/plugins/wp-multilang/flags/mv.png create mode 100644 wp-content/plugins/wp-multilang/flags/mw.png create mode 100644 wp-content/plugins/wp-multilang/flags/mx.png create mode 100644 wp-content/plugins/wp-multilang/flags/my.png create mode 100644 wp-content/plugins/wp-multilang/flags/mz.png create mode 100644 wp-content/plugins/wp-multilang/flags/na.png create mode 100644 wp-content/plugins/wp-multilang/flags/nb.png create mode 100644 wp-content/plugins/wp-multilang/flags/nc.png create mode 100644 wp-content/plugins/wp-multilang/flags/ne.png create mode 100644 wp-content/plugins/wp-multilang/flags/nf.png create mode 100644 wp-content/plugins/wp-multilang/flags/ng.png create mode 100644 wp-content/plugins/wp-multilang/flags/ni.alt.png create mode 100644 wp-content/plugins/wp-multilang/flags/ni.png create mode 100644 wp-content/plugins/wp-multilang/flags/nil.png create mode 100644 wp-content/plugins/wp-multilang/flags/nl.png create mode 100644 wp-content/plugins/wp-multilang/flags/no.png create mode 100644 wp-content/plugins/wp-multilang/flags/np.png create mode 100644 wp-content/plugins/wp-multilang/flags/nr.png create mode 100644 wp-content/plugins/wp-multilang/flags/nu.png create mode 100644 wp-content/plugins/wp-multilang/flags/nz.png create mode 100644 wp-content/plugins/wp-multilang/flags/oc.png create mode 100644 wp-content/plugins/wp-multilang/flags/om.png create mode 100644 wp-content/plugins/wp-multilang/flags/pa.png create mode 100644 wp-content/plugins/wp-multilang/flags/pe.png create mode 100644 wp-content/plugins/wp-multilang/flags/pf.alt.png create mode 100644 wp-content/plugins/wp-multilang/flags/pf.png create mode 100644 wp-content/plugins/wp-multilang/flags/pg.png create mode 100644 wp-content/plugins/wp-multilang/flags/ph.png create mode 100644 wp-content/plugins/wp-multilang/flags/pk.png create mode 100644 wp-content/plugins/wp-multilang/flags/pl.png create mode 100644 wp-content/plugins/wp-multilang/flags/pm.png create mode 100644 wp-content/plugins/wp-multilang/flags/pn.png create mode 100644 wp-content/plugins/wp-multilang/flags/pr.png create mode 100644 wp-content/plugins/wp-multilang/flags/ps.png create mode 100644 wp-content/plugins/wp-multilang/flags/pt-br.png create mode 100644 wp-content/plugins/wp-multilang/flags/pt-pt.png create mode 100644 wp-content/plugins/wp-multilang/flags/pt.png create mode 100644 wp-content/plugins/wp-multilang/flags/pw.png create mode 100644 wp-content/plugins/wp-multilang/flags/py.png create mode 100644 wp-content/plugins/wp-multilang/flags/qa.png create mode 100644 wp-content/plugins/wp-multilang/flags/qu.png create mode 100644 wp-content/plugins/wp-multilang/flags/re.png create mode 100644 wp-content/plugins/wp-multilang/flags/ro.png create mode 100644 wp-content/plugins/wp-multilang/flags/rs.png create mode 100644 wp-content/plugins/wp-multilang/flags/ru.png create mode 100644 wp-content/plugins/wp-multilang/flags/rw.png create mode 100644 wp-content/plugins/wp-multilang/flags/sa.png create mode 100644 wp-content/plugins/wp-multilang/flags/sb.png create mode 100644 wp-content/plugins/wp-multilang/flags/sc.png create mode 100644 wp-content/plugins/wp-multilang/flags/sd.png create mode 100644 wp-content/plugins/wp-multilang/flags/se.png create mode 100644 wp-content/plugins/wp-multilang/flags/sg.png create mode 100644 wp-content/plugins/wp-multilang/flags/sh.png create mode 100644 wp-content/plugins/wp-multilang/flags/si.png create mode 100644 wp-content/plugins/wp-multilang/flags/sj.png create mode 100644 wp-content/plugins/wp-multilang/flags/sk.png create mode 100644 wp-content/plugins/wp-multilang/flags/sl-wrong.png create mode 100644 wp-content/plugins/wp-multilang/flags/sl.png create mode 100644 wp-content/plugins/wp-multilang/flags/sm.png create mode 100644 wp-content/plugins/wp-multilang/flags/sn.png create mode 100644 wp-content/plugins/wp-multilang/flags/so.png create mode 100644 wp-content/plugins/wp-multilang/flags/sq.png create mode 100644 wp-content/plugins/wp-multilang/flags/sr.png create mode 100644 wp-content/plugins/wp-multilang/flags/st.png create mode 100644 wp-content/plugins/wp-multilang/flags/sv.png create mode 100644 wp-content/plugins/wp-multilang/flags/sy.png create mode 100644 wp-content/plugins/wp-multilang/flags/sz.png create mode 100644 wp-content/plugins/wp-multilang/flags/ta.png create mode 100644 wp-content/plugins/wp-multilang/flags/tc.png create mode 100644 wp-content/plugins/wp-multilang/flags/td.png create mode 100644 wp-content/plugins/wp-multilang/flags/tf.png create mode 100644 wp-content/plugins/wp-multilang/flags/tg.png create mode 100644 wp-content/plugins/wp-multilang/flags/th.png create mode 100644 wp-content/plugins/wp-multilang/flags/tj.png create mode 100644 wp-content/plugins/wp-multilang/flags/tk.png create mode 100644 wp-content/plugins/wp-multilang/flags/tl.png create mode 100644 wp-content/plugins/wp-multilang/flags/tm.png create mode 100644 wp-content/plugins/wp-multilang/flags/tn.png create mode 100644 wp-content/plugins/wp-multilang/flags/to.png create mode 100644 wp-content/plugins/wp-multilang/flags/tp.png create mode 100644 wp-content/plugins/wp-multilang/flags/tr.png create mode 100644 wp-content/plugins/wp-multilang/flags/tt.png create mode 100644 wp-content/plugins/wp-multilang/flags/tv.png create mode 100644 wp-content/plugins/wp-multilang/flags/tw.png create mode 100644 wp-content/plugins/wp-multilang/flags/tz.png create mode 100644 wp-content/plugins/wp-multilang/flags/ua.png create mode 100644 wp-content/plugins/wp-multilang/flags/ug.png create mode 100644 wp-content/plugins/wp-multilang/flags/uk.png create mode 100644 wp-content/plugins/wp-multilang/flags/um.png create mode 100644 wp-content/plugins/wp-multilang/flags/ur.png create mode 100644 wp-content/plugins/wp-multilang/flags/us.png create mode 100644 wp-content/plugins/wp-multilang/flags/uy.png create mode 100644 wp-content/plugins/wp-multilang/flags/uz.png create mode 100644 wp-content/plugins/wp-multilang/flags/va.png create mode 100644 wp-content/plugins/wp-multilang/flags/vc.png create mode 100644 wp-content/plugins/wp-multilang/flags/ve.png create mode 100644 wp-content/plugins/wp-multilang/flags/vg.png create mode 100644 wp-content/plugins/wp-multilang/flags/vi.png create mode 100644 wp-content/plugins/wp-multilang/flags/vn.png create mode 100644 wp-content/plugins/wp-multilang/flags/vu.png create mode 100644 wp-content/plugins/wp-multilang/flags/wf.alt.png create mode 100644 wp-content/plugins/wp-multilang/flags/wf.png create mode 100644 wp-content/plugins/wp-multilang/flags/ws.png create mode 100644 wp-content/plugins/wp-multilang/flags/xt.png create mode 100644 wp-content/plugins/wp-multilang/flags/ye.png create mode 100644 wp-content/plugins/wp-multilang/flags/yi.png create mode 100644 wp-content/plugins/wp-multilang/flags/yt.png create mode 100644 wp-content/plugins/wp-multilang/flags/yu.png create mode 100644 wp-content/plugins/wp-multilang/flags/za.png create mode 100644 wp-content/plugins/wp-multilang/flags/zh-hans.png create mode 100644 wp-content/plugins/wp-multilang/flags/zh-hant.png create mode 100644 wp-content/plugins/wp-multilang/flags/zh.png create mode 100644 wp-content/plugins/wp-multilang/flags/zm.png create mode 100644 wp-content/plugins/wp-multilang/flags/zu.png create mode 100644 wp-content/plugins/wp-multilang/flags/zw.png create mode 100644 wp-content/plugins/wp-multilang/flags/zz.png create mode 100644 wp-content/plugins/wp-multilang/includes/abstracts/abstract-wpm-object.php create mode 100644 wp-content/plugins/wp-multilang/includes/abstracts/abstract-wpm-widget.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-assets.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-customizer.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-edit-menus.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-menus.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-meta-boxes.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-notices.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-posts.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-qtranslate.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-settings.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-taxonomies.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-widgets.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/meta-boxes/class-wpm-meta-box-comment-languages.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/meta-boxes/class-wpm-meta-box-post-languages.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/settings/class-wpm-settings-additional.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/settings/class-wpm-settings-general.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/settings/class-wpm-settings-languages.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/settings/class-wpm-settings-page.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/settings/views/html-languages.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/views/html-admin-settings.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/views/html-notice-custom.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/views/html-notice-update.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/views/html-notice-updated.php create mode 100644 wp-content/plugins/wp-multilang/includes/admin/views/html-notice-updating.php create mode 100644 wp-content/plugins/wp-multilang/includes/class-wp-multilang.php create mode 100644 wp-content/plugins/wp-multilang/includes/class-wpm-ajax.php create mode 100644 wp-content/plugins/wp-multilang/includes/class-wpm-background-updater.php create mode 100644 wp-content/plugins/wp-multilang/includes/class-wpm-comments.php create mode 100644 wp-content/plugins/wp-multilang/includes/class-wpm-config.php create mode 100644 wp-content/plugins/wp-multilang/includes/class-wpm-frontend-scripts.php create mode 100644 wp-content/plugins/wp-multilang/includes/class-wpm-install.php create mode 100644 wp-content/plugins/wp-multilang/includes/class-wpm-menus.php create mode 100644 wp-content/plugins/wp-multilang/includes/class-wpm-options.php create mode 100644 wp-content/plugins/wp-multilang/includes/class-wpm-posts.php create mode 100644 wp-content/plugins/wp-multilang/includes/class-wpm-rest-settings.php create mode 100644 wp-content/plugins/wp-multilang/includes/class-wpm-setup.php create mode 100644 wp-content/plugins/wp-multilang/includes/class-wpm-shortcodes.php create mode 100644 wp-content/plugins/wp-multilang/includes/class-wpm-site-options.php create mode 100644 wp-content/plugins/wp-multilang/includes/class-wpm-taxonomies.php create mode 100644 wp-content/plugins/wp-multilang/includes/class-wpm-users.php create mode 100644 wp-content/plugins/wp-multilang/includes/class-wpm-widgets.php create mode 100644 wp-content/plugins/wp-multilang/includes/index.php create mode 100644 wp-content/plugins/wp-multilang/includes/integrations/class-wpm-acf.php create mode 100644 wp-content/plugins/wp-multilang/includes/integrations/class-wpm-aiosp.php create mode 100644 wp-content/plugins/wp-multilang/includes/integrations/class-wpm-better-search.php create mode 100644 wp-content/plugins/wp-multilang/includes/integrations/class-wpm-buddypress.php create mode 100644 wp-content/plugins/wp-multilang/includes/integrations/class-wpm-cf7.php create mode 100644 wp-content/plugins/wp-multilang/includes/integrations/class-wpm-mailchimp-for-wp.php create mode 100644 wp-content/plugins/wp-multilang/includes/integrations/class-wpm-masterslider.php create mode 100644 wp-content/plugins/wp-multilang/includes/integrations/class-wpm-megamenu.php create mode 100644 wp-content/plugins/wp-multilang/includes/integrations/class-wpm-newsletter.php create mode 100644 wp-content/plugins/wp-multilang/includes/integrations/class-wpm-ngg.php create mode 100644 wp-content/plugins/wp-multilang/includes/integrations/class-wpm-pbso.php create mode 100644 wp-content/plugins/wp-multilang/includes/integrations/class-wpm-rank-math.php create mode 100644 wp-content/plugins/wp-multilang/includes/integrations/class-wpm-tablepress.php create mode 100644 wp-content/plugins/wp-multilang/includes/integrations/class-wpm-vc.php create mode 100644 wp-content/plugins/wp-multilang/includes/integrations/class-wpm-woocommerce.php create mode 100644 wp-content/plugins/wp-multilang/includes/integrations/class-wpm-yoast-seo.php create mode 100644 wp-content/plugins/wp-multilang/includes/libraries/abstract-wp-async-request.php create mode 100644 wp-content/plugins/wp-multilang/includes/libraries/abstract-wp-background-process.php create mode 100644 wp-content/plugins/wp-multilang/includes/libraries/class-wpm-walker-nav-menu-edit.php create mode 100644 wp-content/plugins/wp-multilang/includes/widgets/class-wpm-widget-language-switcher.php create mode 100644 wp-content/plugins/wp-multilang/includes/wpm-config-functions.php create mode 100644 wp-content/plugins/wp-multilang/includes/wpm-core-functions.php create mode 100644 wp-content/plugins/wp-multilang/includes/wpm-formatting-functions.php create mode 100644 wp-content/plugins/wp-multilang/includes/wpm-language-functions.php create mode 100644 wp-content/plugins/wp-multilang/includes/wpm-template-functions.php create mode 100644 wp-content/plugins/wp-multilang/includes/wpm-translation-functions.php create mode 100644 wp-content/plugins/wp-multilang/includes/wpm-update-functions.php create mode 100644 wp-content/plugins/wp-multilang/includes/wpm-widget-functions.php create mode 100644 wp-content/plugins/wp-multilang/index.php create mode 100644 wp-content/plugins/wp-multilang/languages/wp-multilang-bg_BG.mo create mode 100644 wp-content/plugins/wp-multilang/languages/wp-multilang-bg_BG.po create mode 100644 wp-content/plugins/wp-multilang/languages/wp-multilang.pot create mode 100644 wp-content/plugins/wp-multilang/readme.txt create mode 100644 wp-content/plugins/wp-multilang/templates/admin-language-switcher-customizer.php create mode 100644 wp-content/plugins/wp-multilang/templates/admin-language-switcher.php create mode 100644 wp-content/plugins/wp-multilang/templates/language-switcher-dropdown.php create mode 100644 wp-content/plugins/wp-multilang/templates/language-switcher-list.php create mode 100644 wp-content/plugins/wp-multilang/templates/language-switcher-select.php create mode 100644 wp-content/plugins/wp-multilang/uninstall.php create mode 100644 wp-content/plugins/wp-multilang/vendor/autoload.php create mode 100644 wp-content/plugins/wp-multilang/vendor/autoload_52.php create mode 100644 wp-content/plugins/wp-multilang/vendor/composer/ClassLoader.php create mode 100644 wp-content/plugins/wp-multilang/vendor/composer/ClassLoader52.php create mode 100644 wp-content/plugins/wp-multilang/vendor/composer/LICENSE create mode 100644 wp-content/plugins/wp-multilang/vendor/composer/autoload_classmap.php create mode 100644 wp-content/plugins/wp-multilang/vendor/composer/autoload_namespaces.php create mode 100644 wp-content/plugins/wp-multilang/vendor/composer/autoload_psr4.php create mode 100644 wp-content/plugins/wp-multilang/vendor/composer/autoload_real.php create mode 100644 wp-content/plugins/wp-multilang/vendor/composer/autoload_real_52.php create mode 100644 wp-content/plugins/wp-multilang/vendor/composer/autoload_static.php create mode 100644 wp-content/plugins/wp-multilang/vendor/composer/installed.json create mode 100644 wp-content/plugins/wp-multilang/wp-multilang.php diff --git a/.gitignore b/.gitignore index 6f82afd0..f8000452 100755 --- a/.gitignore +++ b/.gitignore @@ -291,5 +291,7 @@ wp-content/plugins/*/ !wp-content/plugins/elasticpress # post type helper (always update posttypes.php after any addition) !wp-content/plugins/custom-post-type-ui +# multi language plugin +!wp-content/plugins/wp-multilang # End of custom ignore diff --git a/wp-content/plugins/wp-multilang/assets/scripts/add-lang-to-customizer.js b/wp-content/plugins/wp-multilang/assets/scripts/add-lang-to-customizer.js new file mode 100644 index 00000000..34face28 --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/scripts/add-lang-to-customizer.js @@ -0,0 +1,36 @@ +/** + * Code from https://github.com/xwp/wp-customizer-blank-slate + * + * Learn more at: https://make.xwp.co/2016/09/11/resetting-the-customizer-to-a-blank-slate/ + * Copyright (c) 2016 XWP (https://make.xwp.co/) + */ +/* global wp, jQuery */ +/* exported PluginCustomizer */ +var WPMLang = (function (api, $) { + 'use strict'; + + var component = { + data: { + url: null + } + }; + + /** + * Initialize functionality. + * + * @param {object} home Args. + * @param {string} home.url Preview URL. + * @returns {void} + */ + component.init = function init(home) { + _.extend(component.data, home); + if (!home || !home.url) { + throw new Error('Missing args'); + } + + api.bind('ready', function () { + api.previewer.previewUrl.set(home.url); + }); + }; + return component; +}(wp.customize, jQuery) ); diff --git a/wp-content/plugins/wp-multilang/assets/scripts/add-lang-to-customizer.min.js b/wp-content/plugins/wp-multilang/assets/scripts/add-lang-to-customizer.min.js new file mode 100644 index 00000000..9b74824a --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/scripts/add-lang-to-customizer.min.js @@ -0,0 +1 @@ +var WPMLang=(function(b,c){var a={data:{url:null}};a.init=function d(e){_.extend(a.data,e);if(!e||!e.url){throw new Error("Missing args")}b.bind("ready",function(){b.previewer.previewUrl.set(e.url)})};return a}(wp.customize,jQuery)); \ No newline at end of file diff --git a/wp-content/plugins/wp-multilang/assets/scripts/additional-settings.js b/wp-content/plugins/wp-multilang/assets/scripts/additional-settings.js new file mode 100644 index 00000000..d2eef30f --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/scripts/additional-settings.js @@ -0,0 +1,81 @@ +( function( $ ) { + "use strict"; + + $( function() { + + $('#wpm_installed_localizations').on('init_localizations', function(){ + if ($(this).val()) { + $('#delete_localization').prop('disabled', false); + } else { + $('#delete_localization').prop('disabled', true); + } + }); + + $('#delete_localization').click(function(){ + + if (confirm(wpm_additional_settings_params.confirm_question)) { + + var locale = $('#wpm_installed_localizations').val(); + var button = $(this); + + var data = { + action: 'wpm_delete_localization', + locale: locale, + security: wpm_additional_settings_params.delete_localization_nonce + }; + + $.ajax({ + url: wpm_additional_settings_params.ajax_url, + type: 'post', + data: data, + dataType: 'json', + beforeSend: function() { + button.prop('disabled', true).after(''); + }, + success: function (json) { + button.next().remove(); + if (json.success) { + button.after('' + json.data + ''); + $('#wpm_installed_localizations option[value="' + locale + '"]').remove(); + } else { + button.after('' + json.data + ''); + } + }, + complete: function() { + $('#wpm_installed_localizations').trigger('init_localizations'); + }, + error: function (xhr, ajaxOptions, thrownError) { + alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); + } + }); + } + }); + + $('#qtx_import').click(function(){ + var button = $(this); + + var data = { + action: 'wpm_qtx_import', + security: wpm_additional_settings_params.qtx_import_nonce + }; + + $.ajax({ + url: wpm_additional_settings_params.ajax_url, + type: 'post', + data: data, + dataType: 'json', + beforeSend: function() { + button.prop('disabled', true).after(''); + }, + success: function (json) { + button.next().remove(); + button.after('' + json + ''); + }, + error: function (xhr, ajaxOptions, thrownError) { + alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); + } + }); + }); + + }); +})( jQuery ); diff --git a/wp-content/plugins/wp-multilang/assets/scripts/additional-settings.min.js b/wp-content/plugins/wp-multilang/assets/scripts/additional-settings.min.js new file mode 100644 index 00000000..ee0049ee --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/scripts/additional-settings.min.js @@ -0,0 +1 @@ +(function(a){a(function(){a("#wpm_installed_localizations").on("init_localizations",function(){if(a(this).val()){a("#delete_localization").prop("disabled",false)}else{a("#delete_localization").prop("disabled",true)}});a("#delete_localization").click(function(){if(confirm(wpm_additional_settings_params.confirm_question)){var b=a("#wpm_installed_localizations").val();var c=a(this);var d={action:"wpm_delete_localization",locale:b,security:wpm_additional_settings_params.delete_localization_nonce};a.ajax({url:wpm_additional_settings_params.ajax_url,type:"post",data:d,dataType:"json",beforeSend:function(){c.prop("disabled",true).after('')},success:function(e){c.next().remove();if(e.success){c.after(''+e.data+"");a('#wpm_installed_localizations option[value="'+b+'"]').remove()}else{c.after(''+e.data+"")}},complete:function(){a("#wpm_installed_localizations").trigger("init_localizations")},error:function(g,e,f){alert(f+"\r\n"+g.statusText+"\r\n"+g.responseText)}})}});a("#qtx_import").click(function(){var b=a(this);var c={action:"wpm_qtx_import",security:wpm_additional_settings_params.qtx_import_nonce};a.ajax({url:wpm_additional_settings_params.ajax_url,type:"post",data:c,dataType:"json",beforeSend:function(){b.prop("disabled",true).after('')},success:function(d){b.next().remove();b.after(''+d+"")},error:function(f,d,e){alert(e+"\r\n"+f.statusText+"\r\n"+f.responseText)}})})})})(jQuery); \ No newline at end of file diff --git a/wp-content/plugins/wp-multilang/assets/scripts/customizer.js b/wp-content/plugins/wp-multilang/assets/scripts/customizer.js new file mode 100644 index 00000000..c787d6bb --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/scripts/customizer.js @@ -0,0 +1,10 @@ +(function ($) { + "use strict"; + + $(function () { + if ($('#wpm-language-switcher').length === 0) { + var language_switcher = wp.template('wpm-ls-customizer'); + $('#customize-header-actions').append(language_switcher); + } + }); +})(jQuery, wp); diff --git a/wp-content/plugins/wp-multilang/assets/scripts/customizer.min.js b/wp-content/plugins/wp-multilang/assets/scripts/customizer.min.js new file mode 100644 index 00000000..b2befc51 --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/scripts/customizer.min.js @@ -0,0 +1 @@ +(function(a){a(function(){if(a("#wpm-language-switcher").length===0){var b=wp.template("wpm-ls-customizer");a("#customize-header-actions").append(b)}})})(jQuery,wp); \ No newline at end of file diff --git a/wp-content/plugins/wp-multilang/assets/scripts/language-switcher.js b/wp-content/plugins/wp-multilang/assets/scripts/language-switcher.js new file mode 100644 index 00000000..59ae317d --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/scripts/language-switcher.js @@ -0,0 +1,10 @@ +(function ($) { + "use strict"; + + $(function () { + if ($('#wpm-language-switcher').length === 0) { + var language_switcher = wp.template('wpm-ls'); + $('#wpbody-content > .wrap').prepend(language_switcher); + } + }); +})(jQuery, wp); diff --git a/wp-content/plugins/wp-multilang/assets/scripts/language-switcher.min.js b/wp-content/plugins/wp-multilang/assets/scripts/language-switcher.min.js new file mode 100644 index 00000000..54a1747b --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/scripts/language-switcher.min.js @@ -0,0 +1 @@ +(function(a){a(function(){if(a("#wpm-language-switcher").length===0){var b=wp.template("wpm-ls");a("#wpbody-content > .wrap").prepend(b)}})})(jQuery,wp); \ No newline at end of file diff --git a/wp-content/plugins/wp-multilang/assets/scripts/languages.js b/wp-content/plugins/wp-multilang/assets/scripts/languages.js new file mode 100644 index 00000000..8470a8bc --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/scripts/languages.js @@ -0,0 +1,83 @@ +(function ($) { + "use strict"; + + function formatState (item) { + if (!item.id) { + return item.text; + } + return $(' ' + item.text + ''); + } + + $(function () { + + $(document).on('click', '.delete-language', function () { + + var button = $(this); + + if (confirm(wpm_languages_params.confirm_question)) { + + var data = { + action: 'wpm_delete_lang', + language: button.data('language'), + security: wpm_languages_params.delete_lang_nonce + }; + + $.ajax({ + url: wpm_languages_params.ajax_url, + type: 'post', + data: data, + complete: function () { + button.parent().parents('.postbox').fadeOut('slow', function () { + $(this).remove(); + $('.language-order').each(function(i){ + $(this).text(i+1); + }); + wpm_lang_count--; + }); + }, + error: function (xhr, ajaxOptions, thrownError) { + alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); + } + }); + } + }); + + $("#wpm-languages").sortable({ + update: function(){ + $('.language-order').each(function(i){ + $(this).text(i+1); + }); + } + }); + + $('#add_lang').click(function () { + var t_language = wp.template('wpm-add-lang'); + var data = { + count: wpm_lang_count + }; + $('#wpm-languages').append(t_language(data)); + $(".wpm-flags").trigger('init_select2'); + wpm_lang_count++; + }); + + + $(document).on('click', '.handlediv', function(){ + $(this).parent().toggleClass('closed'); + }); + + $(document).on('keypress, keyup', '.postbox input[name$="[name]"]', function(){ + var text = $(this).val(); + $(this).parents('.postbox').find('h2 .language-order+span').text(text); + }); + + $(document).on('init_select2', '.wpm-flags', function(){ + $(this).select2({ + templateResult: formatState, + templateSelection: formatState + }); + }); + + $(".wpm-flags").trigger('init_select2'); + + }); +}(jQuery)); diff --git a/wp-content/plugins/wp-multilang/assets/scripts/languages.min.js b/wp-content/plugins/wp-multilang/assets/scripts/languages.min.js new file mode 100644 index 00000000..749e3168 --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/scripts/languages.min.js @@ -0,0 +1 @@ +(function(b){function a(c){if(!c.id){return c.text}return b(' '+c.text+"")}b(function(){b(document).on("click",".delete-language",function(){var c=b(this);if(confirm(wpm_languages_params.confirm_question)){var d={action:"wpm_delete_lang",language:c.data("language"),security:wpm_languages_params.delete_lang_nonce};b.ajax({url:wpm_languages_params.ajax_url,type:"post",data:d,complete:function(){c.parent().parents(".postbox").fadeOut("slow",function(){b(this).remove();b(".language-order").each(function(e){b(this).text(e+1)});wpm_lang_count--})},error:function(g,e,f){alert(f+"\r\n"+g.statusText+"\r\n"+g.responseText)}})}});b("#wpm-languages").sortable({update:function(){b(".language-order").each(function(c){b(this).text(c+1)})}});b("#add_lang").click(function(){var c=wp.template("wpm-add-lang");var d={count:wpm_lang_count};b("#wpm-languages").append(c(d));b(".wpm-flags").trigger("init_select2");wpm_lang_count++});b(document).on("click",".handlediv",function(){b(this).parent().toggleClass("closed")});b(document).on("keypress, keyup",'.postbox input[name$="[name]"]',function(){var c=b(this).val();b(this).parents(".postbox").find("h2 .language-order+span").text(c)});b(document).on("init_select2",".wpm-flags",function(){b(this).select2({templateResult:a,templateSelection:a})});b(".wpm-flags").trigger("init_select2")})}(jQuery)); \ No newline at end of file diff --git a/wp-content/plugins/wp-multilang/assets/scripts/settings.js b/wp-content/plugins/wp-multilang/assets/scripts/settings.js new file mode 100644 index 00000000..68e9bf50 --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/scripts/settings.js @@ -0,0 +1,26 @@ +( function( $ ) { + "use strict"; + + $( function() { + var changed = false; + + $( 'input, textarea, select, checkbox' ).change( function() { + changed = true; + }); + + $( '.wpm-nav-tab-wrapper a' ).click( function() { + if ( changed ) { + window.onbeforeunload = function() { + return wpm_settings_params.nav_warning; + }; + } else { + window.onbeforeunload = ''; + } + }); + + $( '.submit input' ).click( function() { + window.onbeforeunload = ''; + }); + + }); +})( jQuery ); diff --git a/wp-content/plugins/wp-multilang/assets/scripts/settings.min.js b/wp-content/plugins/wp-multilang/assets/scripts/settings.min.js new file mode 100644 index 00000000..ba04d4e2 --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/scripts/settings.min.js @@ -0,0 +1 @@ +(function(a){a(function(){var b=false;a("input, textarea, select, checkbox").change(function(){b=true});a(".wpm-nav-tab-wrapper a").click(function(){if(b){window.onbeforeunload=function(){return wpm_settings_params.nav_warning}}else{window.onbeforeunload=""}});a(".submit input").click(function(){window.onbeforeunload=""})})})(jQuery); \ No newline at end of file diff --git a/wp-content/plugins/wp-multilang/assets/scripts/translator.js b/wp-content/plugins/wp-multilang/assets/scripts/translator.js new file mode 100644 index 00000000..70253fe6 --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/scripts/translator.js @@ -0,0 +1,94 @@ +String.prototype.xsplit = function (_regEx) { + // Most browsers can do this properly, so let them work, they'll do it faster + if ('a~b'.split(/(~)/).length === 3) { + return this.split(_regEx); + } + + if (!_regEx.global) { + _regEx = new RegExp(_regEx.source, 'g' + (_regEx.ignoreCase ? 'i' : '')); + } + + // IE (and any other browser that can't capture the delimiter) + // will, unfortunately, have to be slowed down + var start = 0, arr = []; + var result; + while ((result = _regEx.exec(this)) !== null) { + arr.push(this.slice(start, result.index)); + if (result.length > 1) arr.push(result[1]); + start = _regEx.lastIndex; + } + if (start < this.length) arr.push(this.slice(start)); + if (start === this.length) arr.push(''); //delim at the end + return arr; +}; + +var wpm_translator = { + + string_to_ml_array: function (text) { + + if (Object.prototype.toString.call(text) !== '[object String]') { + return text; + } + + var split_regex = /(\[:[a-z-]+\]|\[:\])/gi; + var blocks = text.xsplit(split_regex); + + if (typeof blocks !== 'object' || !Object.keys(blocks).length) + return text; + + if (Object.keys(blocks).length === 1) { + return blocks[0]; + } + + var results = {}, + languages = wpm_translator_params.languages; + + languages.forEach(function(item){ + results[item] = ''; + }); + + var lang = blocks.length === 1 ? wpm_translator_params.default_language : ''; + + blocks.forEach(function(block, index) { + if (index % 2 === 1) { + lang = block; + } else if (!!results[lang]) { + results[lang] += block.trim(); + } + }); + + return results; + }, + + + translate_string: function (string, language) { + + var strings = wpm_translator.string_to_ml_array(string); + + if (typeof strings !== 'object' || !Object.keys(strings).length) { + return string; + } + + var languages = wpm_translator_params.languages; + + if (language) { + if (!!languages[language]) { + return strings[language]; + } + + return ''; + } + + language = wpm_translator_params.language; + + if (!strings[language].length && wpm_translator_params.show_untranslated_strings === "yes") { + return strings[wpm_translator_params.default_language]; + } + + if (!!strings[language]) { + return strings[language]; + } + + return ''; + } +}; diff --git a/wp-content/plugins/wp-multilang/assets/scripts/translator.min.js b/wp-content/plugins/wp-multilang/assets/scripts/translator.min.js new file mode 100644 index 00000000..e5b9a1e1 --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/scripts/translator.min.js @@ -0,0 +1 @@ +String.prototype.xsplit=function(c){if("a~b".split(/(~)/).length===3){return this.split(c)}if(!c.global){c=new RegExp(c.source,"g"+(c.ignoreCase?"i":""))}var d=0,b=[];var a;while((a=c.exec(this))!==null){b.push(this.slice(d,a.index));if(a.length>1){b.push(a[1])}d=c.lastIndex}if(d ul > #wp-admin-bar-wpm-language-switcher { + display: block; } + #wp-admin-bar-wpm-language-switcher-default .ab-item { + min-width: 20px !important; + padding: 0 !important; } + #wp-admin-bar-wpm-language-switcher-default .ab-icon { + line-height: 20px !important; } + #wp-admin-bar-wpm-language-switcher .ab-icon { + line-height: 20px !important; } + .language-switcher { + padding-top: 0; } + .language-switcher a { + margin-top: 0 !important; } } + +.language-switcher { + left: 0; + position: absolute; + top: 0; } + +.screen-meta-toggle { + z-index: 1; } + +.wpm-languages .language-status { + position: absolute; + top: 5px; + right: 40px; + font-size: 13px; + line-height: 26px; + height: 28px; + display: inline-block; } + +.wpm-languages .language-order { + font-weight: 400; + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #ccc; + border-radius: 50px; + margin-right: 10px; + text-align: center; } + +.wpm-languages .prefix { + font-weight: 400; + margin-left: 5px; } + +.wp-core-ui .button-link.delete-language { + color: #dc3232; } + +.wpm-languages { + max-width: 600px; } + +.wpm-flags { + width: 160px; } + +.select2-results__option img, +.select2-selection__rendered img { + margin-right: 5px; + margin-left: 5px; } + +.languagechecklist li { + margin: 0; + padding: 0; + line-height: 22px; + word-wrap: break-word; } + +#customize-controls .wpm-language-switcher { + display: block; + position: absolute; + top: 0; + width: 45px; + height: 41px; + padding: 0 2px 0 0; + background-color: #eee; + border: none; + border-top: 4px solid #eee; + border-right: 1px solid #ddd; + color: #444; + cursor: pointer; + transition: color 0.15s ease-in-out, border-color 0.15s ease-in-out, background 0.15s ease-in-out; + box-sizing: content-box; } + #customize-controls .wpm-language-switcher:hover, #customize-controls .wpm-language-switcher:focus { + background-color: #fff; + color: #0073aa; + border-top-color: #0073aa; + outline: none; + box-shadow: none; } + +.edit-post-header-toolbar .wpm-language-switcher { + position: relative; + left: 0 !important; } + .edit-post-header-toolbar .wpm-language-switcher .lang-main { + padding-left: 10px; + padding-right: 10px; + line-height: 36px; } + .edit-post-header-toolbar .wpm-language-switcher .lang-main img { + top: 2px; } + +.edit-post-header-toolbar .lang-dropdown { + position: absolute; + top: 100%; + left: 0; + background-color: #fff; + border: 1px solid #ccc; + z-index: 1; } + .edit-post-header-toolbar .lang-dropdown ul { + list-style: none; } + .edit-post-header-toolbar .lang-dropdown ul a { + padding: 10px; + display: block; } + .edit-post-header-toolbar .lang-dropdown ul a:hover, .edit-post-header-toolbar .lang-dropdown ul a:focus { + background-color: #ccc; } + +.gutenberg .languagechecklist { + list-style: none !important; } + +.js-wpm-action + .spinner { + float: none; } + +.js-wpm-action + .success { + color: #46b450; + font-style: italic; + display: inline-block; + margin-left: 10px; + line-height: 26px; + font-weight: 700; } + +.js-wpm-action + .error { + color: #dc3232; + font-style: italic; + display: inline-block; + margin-left: 10px; + line-height: 26px; + font-weight: 700; } + +#delete_localization + .spinner, +#qts_import + .spinner { + vertical-align: top; } + +.wrap.wpm .hidden_option { + display: none; } + +.column-languages { + width: 100px; } + +/*# sourceMappingURL=admin.css.map */ \ No newline at end of file diff --git a/wp-content/plugins/wp-multilang/assets/styles/admin/admin.css.map b/wp-content/plugins/wp-multilang/assets/styles/admin/admin.css.map new file mode 100644 index 00000000..51867ba4 --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/admin/admin.css.map @@ -0,0 +1,17 @@ +{ + "version": 3, + "file": "admin.css", + "sources": [ + "admin.scss", + "common/_variables.scss", + "components/_lang-switcher.scss", + "components/_languages-list.scss", + "components/_language-metabox.scss", + "layouts/_customizer.scss", + "layouts/_gutenberg.scss", + "layouts/_settings.scss", + "layouts/_table.scss" + ], + "names": [], + "mappings": "AEAA,AAAA,sBAAsB,CAAC;EACtB,IAAI,EAAE,IAAI;EACV,aAAa,EAAE,CAAC;EAChB,UAAU,EAAE,MAAM,GA6BlB;EAhCD,AAKC,sBALqB,AAKrB,OAAQ,CAAC;IACR,OAAO,EAAE,IAAI,GACb;EAPF,AASC,sBATqB,CASrB,CAAC,CAAC;IACD,UAAU,EAAE,UAAU,GACtB;EAXF,AAeE,sBAfoB,AAarB,MAAO,CAEN,cAAc,CAAC;IACd,OAAO,EAAE,KAAK,GACd;EAjBH,AAoBC,sBApBqB,CAoBrB,cAAc,CAAC;IACd,OAAO,EAAE,IAAI,GACb;EAtBF,AAwBC,sBAxBqB,CAwBrB,UAAU,CAAC;IACV,WAAW,EAAE,IAAI,GAMjB;IA/BF,AA2BE,sBA3BoB,CAwBrB,UAAU,CAGT,GAAG,CAAC;MACH,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAAE,IAAI,GACT;;AAIH,AAAA,cAAc,CAAC;EACd,gBAAgB,ED9BT,IAAI,GCgDX;EAnBD,AAGC,cAHa,CAGb,EAAE,CAAC;IACF,aAAa,EAAE,CAAC;IAChB,UAAU,EAAE,CAAC,GACb;EANF,AAQC,cARa,CAQb,EAAE,CAAC;IACF,aAAa,EAAE,CAAC,GAShB;IAlBF,AAWE,cAXY,CAQb,EAAE,CAGD,CAAC,CAAC;MACD,OAAO,EAAE,KAAK,GAKd;MAjBH,AAWE,cAXY,CAQb,EAAE,CAGD,CAAC,AAGA,MAAO,CAAC;QACP,gBAAgB,ED9CN,OAAO,GC+CjB;;AAKJ,AAEC,2CAF0C,CAE1C,QAAQ,CAAC;EACR,MAAM,EAAE,eAAe;EACvB,WAAW,EAAE,eAAe,GAa5B;EAjBF,AAME,2CANyC,CAE1C,QAAQ,CAIP,SAAS,CAAC;IACT,KAAK,EAAE,eAAe,GACtB;EARH,AAaG,2CAbwC,CAE1C,QAAQ,AAQP,MAAO,CAGN,SAAS,EAbZ,AAaG,2CAbwC,CAE1C,QAAQ,AASP,MAAO,CAEN,SAAS,CAAC;IACT,KAAK,EAAE,kBAAkB,GACzB;;AAKJ,MAAM,CAAC,MAAM,MAAM,SAAS,EAAE,KAAK;EAElC,AAAmB,WAAR,GAAG,EAAE,GAAG,mCAAmC,CAAC;IACtD,OAAO,EAAE,KAAK,GACd;EAED,AAEC,2CAF0C,CAE1C,QAAQ,CAAC;IACR,SAAS,EAAE,eAAe;IAC1B,OAAO,EAAE,YAAY,GACrB;EALF,AAOC,2CAP0C,CAO1C,QAAQ,CAAC;IACR,WAAW,EAAE,eAAe,GAC5B;EAGF,AAEC,mCAFkC,CAElC,QAAQ,CAAC;IACR,WAAW,EAAE,eAAe,GAC5B;EAGF,AAAA,kBAAkB,CAAC;IAClB,WAAW,EAAE,CAAC,GAKd;IAND,AAGC,kBAHiB,CAGjB,CAAC,CAAC;MACD,UAAU,EAAE,YAAY,GACxB;;AAIH,AAAA,kBAAkB,CAAC;EAClB,IAAI,EAAE,CAAC;EACP,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC,GACN;;AAED,AAAA,mBAAmB,CAAC;EACnB,OAAO,EAAE,CAAC,GACV;;ACrHD,AAEC,cAFa,CAEb,gBAAgB,CAAC;EAChB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,GAAG;EACR,KAAK,EAAE,IAAI;EACX,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,IAAI;EACjB,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,YAAY,GACrB;;AAVF,AAYC,cAZa,CAYb,eAAe,CAAC;EACf,WAAW,EAAE,GAAG;EAChB,OAAO,EAAE,YAAY;EACrB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,WAAW,EAAE,IAAI;EACjB,MAAM,EAAE,cAAc;EACtB,aAAa,EAAE,IAAI;EACnB,YAAY,EAAE,IAAI;EAClB,UAAU,EAAE,MAAM,GAClB;;AAtBF,AAwBC,cAxBa,CAwBb,OAAO,CAAC;EACP,WAAW,EAAE,GAAG;EAChB,WAAW,EAAE,GAAG,GAChB;;AAGF,AAAY,WAAD,CAAC,YAAY,AAAA,gBAAgB,CAAC;EACxC,KAAK,EF3BA,OAAO,GE4BZ;;AAED,AAAA,cAAc,CAAC;EACd,SAAS,EAAE,KAAK,GAChB;;AAED,AAAA,UAAU,CAAC;EACV,KAAK,EAAE,KAAK,GACZ;;AAED,AAGC,wBAHuB,CAGvB,GAAG;AAFJ,AAEC,4BAF2B,CAE3B,GAAG,CAAC;EACH,YAAY,EAAE,GAAG;EACjB,WAAW,EAAE,GAAG,GAChB;;AChDF,AAEC,kBAFiB,CAEjB,EAAE,CAAC;EACF,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;EACV,WAAW,EAAE,IAAI;EACjB,SAAS,EAAE,UAAU,GACrB;;ACPF,AAEC,mBAFkB,CAElB,sBAAsB,CAAC;EACtB,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,SAAS;EAClB,gBAAgB,EAAE,IAAI;EACtB,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,cAAc;EAC1B,YAAY,EAAE,cAAc;EAC5B,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,OAAO;EACf,UAAU,EAAE,qFAAqF;EACjG,UAAU,EAAE,WAAW,GAUvB;EA1BF,AAEC,mBAFkB,CAElB,sBAAsB,AAgBrB,MAAO,EAlBT,AAEC,mBAFkB,CAElB,sBAAsB,AAiBrB,MAAO,CAAC;IACP,gBAAgB,EAAE,IAAI;IACtB,KAAK,EAAE,OAAO;IACd,gBAAgB,EAAE,OAAO;IACzB,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI,GAChB;;ACzBH,AAEC,yBAFwB,CAExB,sBAAsB,CAAC;EACtB,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,YAAY,GAWlB;EAfF,AAME,yBANuB,CAExB,sBAAsB,CAIrB,UAAU,CAAC;IACV,YAAY,EAAE,IAAI;IAClB,aAAa,EAAE,IAAI;IACnB,WAAW,EAAE,IAAI,GAKjB;IAdH,AAWG,yBAXsB,CAExB,sBAAsB,CAIrB,UAAU,CAKT,GAAG,CAAC;MACH,GAAG,EAAE,GAAG,GACR;;AAbJ,AAiBC,yBAjBwB,CAiBxB,cAAc,CAAC;EACd,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,IAAI;EACT,IAAI,EAAE,CAAC;EACP,gBAAgB,EAAE,IAAI;EACtB,MAAM,EAAE,cAAc;EACtB,OAAO,EAAE,CAAC,GAeV;EAtCF,AAyBE,yBAzBuB,CAiBxB,cAAc,CAQb,EAAE,CAAC;IACF,UAAU,EAAE,IAAI,GAWhB;IArCH,AA4BG,yBA5BsB,CAiBxB,cAAc,CAQb,EAAE,CAGD,CAAC,CAAC;MACD,OAAO,EAAE,IAAI;MACb,OAAO,EAAE,KAAK,GAMd;MApCJ,AA4BG,yBA5BsB,CAiBxB,cAAc,CAQb,EAAE,CAGD,CAAC,AAIA,MAAO,EAhCX,AA4BG,yBA5BsB,CAiBxB,cAAc,CAQb,EAAE,CAGD,CAAC,AAKA,MAAO,CAAC;QACP,gBAAgB,EAAE,IAAI,GACtB;;AAML,AAEC,UAFS,CAET,kBAAkB,CAAC;EAClB,UAAU,EAAE,eAAe,GAC3B;;AC7CF,AAEG,cAFW,GAEX,QAAQ,CAAC;EACV,KAAK,EAAE,IAAI,GACX;;AAJF,AAMG,cANW,GAMX,QAAQ,CAAC;EACV,KAAK,ENDC,OAAO;EMEb,UAAU,EAAE,MAAM;EAClB,OAAO,EAAE,YAAY;EACrB,WAAW,EAAE,IAAI;EACjB,WAAW,EAAE,IAAI;EACjB,WAAW,EAAE,GAAG,GAChB;;AAbF,AAeG,cAfW,GAeX,MAAM,CAAC;EACR,KAAK,ENZD,OAAO;EMaX,UAAU,EAAE,MAAM;EAClB,OAAO,EAAE,YAAY;EACrB,WAAW,EAAE,IAAI;EACjB,WAAW,EAAE,IAAI;EACjB,WAAW,EAAE,GAAG,GAChB;;AAGF,AAGG,oBAHiB,GAGjB,QAAQ;AAFX,AAEG,WAFQ,GAER,QAAQ,CAAC;EACV,cAAc,EAAE,GAAG,GACnB;;AAGF,AAEC,KAFI,AAAA,IAAI,CAER,cAAc,CAAC;EACd,OAAO,EAAE,IAAI,GACb;;ACrCF,AAAA,iBAAiB,CAAC;EACjB,KAAK,EAAE,KAAK,GACZ" +} \ No newline at end of file diff --git a/wp-content/plugins/wp-multilang/assets/styles/admin/admin.min.css b/wp-content/plugins/wp-multilang/assets/styles/admin/admin.min.css new file mode 100644 index 00000000..42ce93e6 --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/admin/admin.min.css @@ -0,0 +1 @@ +.wpm-language-switcher{left:48px;padding-right:0;text-align:center}.wpm-language-switcher:before{display:none}.wpm-language-switcher *{box-sizing:border-box}.wpm-language-switcher:hover .lang-dropdown{display:block}.wpm-language-switcher .lang-dropdown{display:none}.wpm-language-switcher .lang-main{line-height:41px}.wpm-language-switcher .lang-main img{position:relative;top:-1px}.lang-dropdown{background-color:#fff}.lang-dropdown ul{margin-bottom:0;margin-top:0}.lang-dropdown li{margin-bottom:0}.lang-dropdown li a{display:block}.lang-dropdown li a:hover{background-color:#f3f3f5}#wp-admin-bar-wpm-language-switcher-default .ab-item{height:32px !important;line-height:32px !important}#wp-admin-bar-wpm-language-switcher-default .ab-item .ab-label{color:#eee !important}#wp-admin-bar-wpm-language-switcher-default .ab-item:hover .ab-label,#wp-admin-bar-wpm-language-switcher-default .ab-item:focus .ab-label{color:#00b9eb !important}@media screen and (max-width:782px){#wp-toolbar>ul>#wp-admin-bar-wpm-language-switcher{display:block}#wp-admin-bar-wpm-language-switcher-default .ab-item{min-width:20px !important;padding:0 !important}#wp-admin-bar-wpm-language-switcher-default .ab-icon{line-height:20px !important}#wp-admin-bar-wpm-language-switcher .ab-icon{line-height:20px !important}.language-switcher{padding-top:0}.language-switcher a{margin-top:0 !important}}.language-switcher{left:0;position:absolute;top:0}.screen-meta-toggle{z-index:1}.wpm-languages .language-status{position:absolute;top:5px;right:40px;font-size:13px;line-height:26px;height:28px;display:inline-block}.wpm-languages .language-order{font-weight:400;display:inline-block;width:20px;height:20px;line-height:20px;border:1px solid #ccc;border-radius:50px;margin-right:10px;text-align:center}.wpm-languages .prefix{font-weight:400;margin-left:5px}.wp-core-ui .button-link.delete-language{color:#dc3232}.wpm-languages{max-width:600px}.wpm-flags{width:160px}.select2-results__option img,.select2-selection__rendered img{margin-right:5px;margin-left:5px}.languagechecklist li{margin:0;padding:0;line-height:22px;word-wrap:break-word}#customize-controls .wpm-language-switcher{display:block;position:absolute;top:0;width:45px;height:41px;padding:0 2px 0 0;background-color:#eee;border:0;border-top:4px solid #eee;border-right:1px solid #ddd;color:#444;cursor:pointer;transition:color .15s ease-in-out,border-color .15s ease-in-out,background .15s ease-in-out;box-sizing:content-box}#customize-controls .wpm-language-switcher:hover,#customize-controls .wpm-language-switcher:focus{background-color:#fff;color:#0073aa;border-top-color:#0073aa;outline:0;box-shadow:none}.edit-post-header-toolbar .wpm-language-switcher{position:relative;left:0 !important}.edit-post-header-toolbar .wpm-language-switcher .lang-main{padding-left:10px;padding-right:10px;line-height:36px}.edit-post-header-toolbar .wpm-language-switcher .lang-main img{top:2px}.edit-post-header-toolbar .lang-dropdown{position:absolute;top:100%;left:0;background-color:#fff;border:1px solid #ccc;z-index:1}.edit-post-header-toolbar .lang-dropdown ul{list-style:none}.edit-post-header-toolbar .lang-dropdown ul a{padding:10px;display:block}.edit-post-header-toolbar .lang-dropdown ul a:hover,.edit-post-header-toolbar .lang-dropdown ul a:focus{background-color:#ccc}.gutenberg .languagechecklist{list-style:none !important}.js-wpm-action+.spinner{float:none}.js-wpm-action+.success{color:#46b450;font-style:italic;display:inline-block;margin-left:10px;line-height:26px;font-weight:700}.js-wpm-action+.error{color:#dc3232;font-style:italic;display:inline-block;margin-left:10px;line-height:26px;font-weight:700}#delete_localization+.spinner,#qts_import+.spinner{vertical-align:top}.wrap.wpm .hidden_option{display:none}.column-languages{width:100px} \ No newline at end of file diff --git a/wp-content/plugins/wp-multilang/assets/styles/admin/admin.scss b/wp-content/plugins/wp-multilang/assets/styles/admin/admin.scss new file mode 100644 index 00000000..835b218f --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/admin/admin.scss @@ -0,0 +1,8 @@ +@import "common/variables"; +@import "components/lang-switcher"; +@import "components/languages-list"; +@import "components/language-metabox"; +@import "layouts/customizer"; +@import "layouts/gutenberg"; +@import "layouts/settings"; +@import "layouts/table"; diff --git a/wp-content/plugins/wp-multilang/assets/styles/admin/common/_variables.scss b/wp-content/plugins/wp-multilang/assets/styles/admin/common/_variables.scss new file mode 100644 index 00000000..ac55136a --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/admin/common/_variables.scss @@ -0,0 +1,7 @@ +// Colors +$brand-primary: #0073aa; +$bg-color: #eee; +$hover-color: #f3f3f5; +$red: #dc3232; +$white: #fff; +$green: #46b450; diff --git a/wp-content/plugins/wp-multilang/assets/styles/admin/components/_lang-switcher.scss b/wp-content/plugins/wp-multilang/assets/styles/admin/components/_lang-switcher.scss new file mode 100644 index 00000000..5267cb6d --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/admin/components/_lang-switcher.scss @@ -0,0 +1,118 @@ +.wpm-language-switcher { + left: 48px; + padding-right: 0; + text-align: center; + + &:before { + display: none; + } + + * { + box-sizing: border-box; + } + + &:hover { + + .lang-dropdown { + display: block; + } + } + + .lang-dropdown { + display: none; + } + + .lang-main { + line-height: 41px; + + img { + position: relative; + top: -1px; + } + } +} + +.lang-dropdown { + background-color: $white; + + ul { + margin-bottom: 0; + margin-top: 0; + } + + li { + margin-bottom: 0; + + a { + display: block; + + &:hover { + background-color: $hover-color; + } + } + } +} + +#wp-admin-bar-wpm-language-switcher-default { + + .ab-item { + height: 32px !important; + line-height: 32px !important; + + .ab-label { + color: #eee !important; + } + + &:hover, + &:focus { + + .ab-label { + color: #00b9eb !important; + } + } + } +} + +@media screen and (max-width: 782px) { + + #wp-toolbar > ul > #wp-admin-bar-wpm-language-switcher { + display: block; + } + + #wp-admin-bar-wpm-language-switcher-default { + + .ab-item { + min-width: 20px !important; + padding: 0 !important; + } + + .ab-icon { + line-height: 20px !important; + } + } + + #wp-admin-bar-wpm-language-switcher { + + .ab-icon { + line-height: 20px !important; + } + } + + .language-switcher { + padding-top: 0; + + a { + margin-top: 0 !important; + } + } +} + +.language-switcher { + left: 0; + position: absolute; + top: 0; +} + +.screen-meta-toggle { + z-index: 1; +} diff --git a/wp-content/plugins/wp-multilang/assets/styles/admin/components/_language-metabox.scss b/wp-content/plugins/wp-multilang/assets/styles/admin/components/_language-metabox.scss new file mode 100644 index 00000000..54206696 --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/admin/components/_language-metabox.scss @@ -0,0 +1,9 @@ +.languagechecklist { + + li { + margin: 0; + padding: 0; + line-height: 22px; + word-wrap: break-word; + } +} diff --git a/wp-content/plugins/wp-multilang/assets/styles/admin/components/_languages-list.scss b/wp-content/plugins/wp-multilang/assets/styles/admin/components/_languages-list.scss new file mode 100644 index 00000000..722b2d8b --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/admin/components/_languages-list.scss @@ -0,0 +1,50 @@ +.wpm-languages { + + .language-status { + position: absolute; + top: 5px; + right: 40px; + font-size: 13px; + line-height: 26px; + height: 28px; + display: inline-block; + } + + .language-order { + font-weight: 400; + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #ccc; + border-radius: 50px; + margin-right: 10px; + text-align: center; + } + + .prefix { + font-weight: 400; + margin-left: 5px; + } +} + +.wp-core-ui .button-link.delete-language { + color: $red; +} + +.wpm-languages { + max-width: 600px; +} + +.wpm-flags { + width: 160px; +} + +.select2-results__option, +.select2-selection__rendered { + + img { + margin-right: 5px; + margin-left: 5px; + } +} diff --git a/wp-content/plugins/wp-multilang/assets/styles/admin/layouts/_customizer.scss b/wp-content/plugins/wp-multilang/assets/styles/admin/layouts/_customizer.scss new file mode 100644 index 00000000..981d0c95 --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/admin/layouts/_customizer.scss @@ -0,0 +1,28 @@ +#customize-controls { + + .wpm-language-switcher { + display: block; + position: absolute; + top: 0; + width: 45px; + height: 41px; + padding: 0 2px 0 0; + background-color: #eee; + border: none; + border-top: 4px solid #eee; + border-right: 1px solid #ddd; + color: #444; + cursor: pointer; + transition: color 0.15s ease-in-out, border-color 0.15s ease-in-out, background 0.15s ease-in-out; + box-sizing: content-box; + + &:hover, + &:focus { + background-color: #fff; + color: #0073aa; + border-top-color: #0073aa; + outline: none; + box-shadow: none; + } + } +} diff --git a/wp-content/plugins/wp-multilang/assets/styles/admin/layouts/_gutenberg.scss b/wp-content/plugins/wp-multilang/assets/styles/admin/layouts/_gutenberg.scss new file mode 100644 index 00000000..0cbd8b71 --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/admin/layouts/_gutenberg.scss @@ -0,0 +1,47 @@ +.edit-post-header-toolbar { + + .wpm-language-switcher { + position: relative; + left: 0 !important; + + .lang-main { + padding-left: 10px; + padding-right: 10px; + line-height: 36px; + + img { + top: 2px; + } + } + } + + .lang-dropdown { + position: absolute; + top: 100%; + left: 0; + background-color: #fff; + border: 1px solid #ccc; + z-index: 1; + + ul { + list-style: none; + + a { + padding: 10px; + display: block; + + &:hover, + &:focus { + background-color: #ccc; + } + } + } + } +} + +.gutenberg { + + .languagechecklist { + list-style: none !important; + } +} diff --git a/wp-content/plugins/wp-multilang/assets/styles/admin/layouts/_settings.scss b/wp-content/plugins/wp-multilang/assets/styles/admin/layouts/_settings.scss new file mode 100644 index 00000000..292284d3 --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/admin/layouts/_settings.scss @@ -0,0 +1,39 @@ +.js-wpm-action { + + + .spinner { + float: none; + } + + + .success { + color: $green; + font-style: italic; + display: inline-block; + margin-left: 10px; + line-height: 26px; + font-weight: 700; + } + + + .error { + color: $red; + font-style: italic; + display: inline-block; + margin-left: 10px; + line-height: 26px; + font-weight: 700; + } +} + +#delete_localization, +#qts_import { + + + .spinner { + vertical-align: top; + } +} + +.wrap.wpm { + + .hidden_option { + display: none; + } +} diff --git a/wp-content/plugins/wp-multilang/assets/styles/admin/layouts/_table.scss b/wp-content/plugins/wp-multilang/assets/styles/admin/layouts/_table.scss new file mode 100644 index 00000000..9f45b0d2 --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/admin/layouts/_table.scss @@ -0,0 +1,3 @@ +.column-languages { + width: 100px; +} diff --git a/wp-content/plugins/wp-multilang/assets/styles/common/_variables.scss b/wp-content/plugins/wp-multilang/assets/styles/common/_variables.scss new file mode 100644 index 00000000..84d06b4a --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/common/_variables.scss @@ -0,0 +1,4 @@ +// Colors +$brand-primary: #0073aa; +$white: #fff; +$black: #000; diff --git a/wp-content/plugins/wp-multilang/assets/styles/components/_lang-switcher.scss b/wp-content/plugins/wp-multilang/assets/styles/components/_lang-switcher.scss new file mode 100644 index 00000000..ced7e520 --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/components/_lang-switcher.scss @@ -0,0 +1,87 @@ +.switcher-list { + list-style: none; + margin-bottom: 0; + padding-left: 0; + + li { + + a, + > span { + color: lighten($black, 20%); + + &:hover { + color: $black; + } + + img { + display: inline-block; + margin-right: 3px; + } + } + + &.active { + + a, + > span { + color: $black; + } + } + } +} + +.switcher-dropdown { + list-style: none; + margin-bottom: 0; + padding-left: 0; + position: relative; + + a, + span { + + img { + display: inline-block; + margin-right: 3px; + } + } + + a { + color: lighten($black, 20%); + + &:hover { + color: $black; + } + } + + .language-dropdown { + display: none; + left: 0; + list-style: none; + margin-bottom: 0; + margin-left: 0; + padding-left: 0; + position: absolute; + top: 100%; + } + + > li { + position: relative; + + &:hover { + + .language-dropdown { + display: block; + } + } + } + + .item-language-main { + + > span { + + &:hover { + cursor: pointer; + } + } + } +} + diff --git a/wp-content/plugins/wp-multilang/assets/styles/components/_menu.scss b/wp-content/plugins/wp-multilang/assets/styles/components/_menu.scss new file mode 100644 index 00000000..a62e674b --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/components/_menu.scss @@ -0,0 +1,13 @@ +.wpm-languages { + + &.menu-item { + + > a { + + img { + display: inline-block; + margin-right: 5px; + } + } + } +} diff --git a/wp-content/plugins/wp-multilang/assets/styles/main.css b/wp-content/plugins/wp-multilang/assets/styles/main.css new file mode 100644 index 00000000..20d39d33 --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/main.css @@ -0,0 +1,52 @@ +.switcher-list { + list-style: none; + margin-bottom: 0; + padding-left: 0; } + .switcher-list li a, + .switcher-list li > span { + color: #333333; } + .switcher-list li a:hover, + .switcher-list li > span:hover { + color: #000; } + .switcher-list li a img, + .switcher-list li > span img { + display: inline-block; + margin-right: 3px; } + .switcher-list li.active a, + .switcher-list li.active > span { + color: #000; } + +.switcher-dropdown { + list-style: none; + margin-bottom: 0; + padding-left: 0; + position: relative; } + .switcher-dropdown a img, + .switcher-dropdown span img { + display: inline-block; + margin-right: 3px; } + .switcher-dropdown a { + color: #333333; } + .switcher-dropdown a:hover { + color: #000; } + .switcher-dropdown .language-dropdown { + display: none; + left: 0; + list-style: none; + margin-bottom: 0; + margin-left: 0; + padding-left: 0; + position: absolute; + top: 100%; } + .switcher-dropdown > li { + position: relative; } + .switcher-dropdown > li:hover .language-dropdown { + display: block; } + .switcher-dropdown .item-language-main > span:hover { + cursor: pointer; } + +.wpm-languages.menu-item > a img { + display: inline-block; + margin-right: 5px; } + +/*# sourceMappingURL=main.css.map */ \ No newline at end of file diff --git a/wp-content/plugins/wp-multilang/assets/styles/main.css.map b/wp-content/plugins/wp-multilang/assets/styles/main.css.map new file mode 100644 index 00000000..1c5896ca --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/main.css.map @@ -0,0 +1,12 @@ +{ + "version": 3, + "file": "main.css", + "sources": [ + "main.scss", + "common/_variables.scss", + "components/_lang-switcher.scss", + "components/_menu.scss" + ], + "names": [], + "mappings": "AEAA,AAAA,cAAc,CAAC;EACd,UAAU,EAAE,IAAI;EAChB,aAAa,EAAE,CAAC;EAChB,YAAY,EAAE,CAAC,GA0Bf;EA7BD,AAOE,cAPY,CAKb,EAAE,CAED,CAAC;EAPH,cAAc,CAKb,EAAE,GAGC,IAAI,CAAC;IACN,KAAK,EAAE,OAAoB,GAU3B;IAnBH,AAWG,cAXW,CAKb,EAAE,CAED,CAAC,AAIC,MAAM;IAXV,cAAc,CAKb,EAAE,GAGC,IAAI,AAGJ,MAAM,CAAC;MACP,KAAK,EDTD,IAAI,GCUR;IAbJ,AAeG,cAfW,CAKb,EAAE,CAED,CAAC,CAQA,GAAG;IAfN,cAAc,CAKb,EAAE,GAGC,IAAI,CAOL,GAAG,CAAC;MACH,OAAO,EAAE,YAAY;MACrB,YAAY,EAAE,GAAG,GACjB;EAlBJ,AAuBG,cAvBW,CAKb,EAAE,AAgBA,OAAO,CAEP,CAAC;EAvBJ,cAAc,CAKb,EAAE,AAgBA,OAAO,GAGL,IAAI,CAAC;IACN,KAAK,EDtBD,IAAI,GCuBR;;AAKJ,AAAA,kBAAkB,CAAC;EAClB,UAAU,EAAE,IAAI;EAChB,aAAa,EAAE,CAAC;EAChB,YAAY,EAAE,CAAC;EACf,QAAQ,EAAE,QAAQ,GAkDlB;EAtDD,AASE,kBATgB,CAMjB,CAAC,CAGA,GAAG;EATL,kBAAkB,CAOjB,IAAI,CAEH,GAAG,CAAC;IACH,OAAO,EAAE,YAAY;IACrB,YAAY,EAAE,GAAG,GACjB;EAZH,AAeC,kBAfiB,CAejB,CAAC,CAAC;IACD,KAAK,EAAE,OAAoB,GAK3B;IArBF,AAkBE,kBAlBgB,CAejB,CAAC,AAGC,MAAM,CAAC;MACP,KAAK,ED/CA,IAAI,GCgDT;EApBH,AAuBC,kBAvBiB,CAuBjB,kBAAkB,CAAC;IAClB,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,CAAC;IACP,UAAU,EAAE,IAAI;IAChB,aAAa,EAAE,CAAC;IAChB,WAAW,EAAE,CAAC;IACd,YAAY,EAAE,CAAC;IACf,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,IAAI,GACT;EAhCF,AAkCC,kBAlCiB,GAkCf,EAAE,CAAC;IACJ,QAAQ,EAAE,QAAQ,GAQlB;IA3CF,AAuCG,kBAvCe,GAkCf,EAAE,AAGF,MAAM,CAEN,kBAAkB,CAAC;MAClB,OAAO,EAAE,KAAK,GACd;EAzCJ,AAiDG,kBAjDe,CA6CjB,mBAAmB,GAEhB,IAAI,AAEJ,MAAM,CAAC;IACP,MAAM,EAAE,OAAO,GACf;;AClFJ,AAMG,cANW,AAEZ,UAAU,GAER,CAAC,CAEF,GAAG,CAAC;EACH,OAAO,EAAE,YAAY;EACrB,YAAY,EAAE,GAAG,GACjB" +} \ No newline at end of file diff --git a/wp-content/plugins/wp-multilang/assets/styles/main.min.css b/wp-content/plugins/wp-multilang/assets/styles/main.min.css new file mode 100644 index 00000000..ee901540 --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/main.min.css @@ -0,0 +1 @@ +.switcher-list{list-style:none;margin-bottom:0;padding-left:0}.switcher-list li a,.switcher-list li>span{color:#333}.switcher-list li a:hover,.switcher-list li>span:hover{color:#000}.switcher-list li a img,.switcher-list li>span img{display:inline-block;margin-right:3px}.switcher-list li.active a,.switcher-list li.active>span{color:#000}.switcher-dropdown{list-style:none;margin-bottom:0;padding-left:0;position:relative}.switcher-dropdown a img,.switcher-dropdown span img{display:inline-block;margin-right:3px}.switcher-dropdown a{color:#333}.switcher-dropdown a:hover{color:#000}.switcher-dropdown .language-dropdown{display:none;left:0;list-style:none;margin-bottom:0;margin-left:0;padding-left:0;position:absolute;top:100%}.switcher-dropdown>li{position:relative}.switcher-dropdown>li:hover .language-dropdown{display:block}.switcher-dropdown .item-language-main>span:hover{cursor:pointer}.wpm-languages.menu-item>a img{display:inline-block;margin-right:5px} \ No newline at end of file diff --git a/wp-content/plugins/wp-multilang/assets/styles/main.scss b/wp-content/plugins/wp-multilang/assets/styles/main.scss new file mode 100644 index 00000000..72ad9469 --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/main.scss @@ -0,0 +1,3 @@ +@import "common/variables"; +@import "components/lang-switcher"; +@import "components/menu"; diff --git a/wp-content/plugins/wp-multilang/assets/styles/notices.css b/wp-content/plugins/wp-multilang/assets/styles/notices.css new file mode 100644 index 00000000..b4d963a7 --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/notices.css @@ -0,0 +1,7 @@ +.wpm-message { + position: relative; } + +.wpm-message-close { + text-decoration: none; } + +/*# sourceMappingURL=notices.css.map */ \ No newline at end of file diff --git a/wp-content/plugins/wp-multilang/assets/styles/notices.css.map b/wp-content/plugins/wp-multilang/assets/styles/notices.css.map new file mode 100644 index 00000000..68341524 --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/notices.css.map @@ -0,0 +1,11 @@ +{ + "version": 3, + "file": "notices.css", + "sources": [ + "notices.scss", + "common/_variables.scss", + "notices/_core.scss" + ], + "names": [], + "mappings": "AEAA,AAAA,YAAY,CAAC;EACZ,QAAQ,EAAE,QAAQ,GAClB;;AAED,AAAA,kBAAkB,CAAC;EAClB,eAAe,EAAE,IAAI,GACrB" +} \ No newline at end of file diff --git a/wp-content/plugins/wp-multilang/assets/styles/notices.min.css b/wp-content/plugins/wp-multilang/assets/styles/notices.min.css new file mode 100644 index 00000000..347289aa --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/notices.min.css @@ -0,0 +1 @@ +.wpm-message{position:relative}.wpm-message-close{text-decoration:none} \ No newline at end of file diff --git a/wp-content/plugins/wp-multilang/assets/styles/notices.scss b/wp-content/plugins/wp-multilang/assets/styles/notices.scss new file mode 100644 index 00000000..445ae260 --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/notices.scss @@ -0,0 +1,2 @@ +@import "common/variables"; +@import "notices/core"; diff --git a/wp-content/plugins/wp-multilang/assets/styles/notices/_core.scss b/wp-content/plugins/wp-multilang/assets/styles/notices/_core.scss new file mode 100644 index 00000000..1fd3ee5e --- /dev/null +++ b/wp-content/plugins/wp-multilang/assets/styles/notices/_core.scss @@ -0,0 +1,7 @@ +.wpm-message { + position: relative; +} + +.wpm-message-close { + text-decoration: none; +} diff --git a/wp-content/plugins/wp-multilang/configs/plugins/all-in-one-seo-pack.json b/wp-content/plugins/wp-multilang/configs/plugins/all-in-one-seo-pack.json new file mode 100644 index 00000000..b5f002a1 --- /dev/null +++ b/wp-content/plugins/wp-multilang/configs/plugins/all-in-one-seo-pack.json @@ -0,0 +1,31 @@ +{ + "post_fields": { + "_aioseop_title": {}, + "_aioseop_description": {}, + "_aioseop_keywords": {} + }, + "admin_pages": [ + "toplevel_page_all-in-one-seo-pack/aioseop_class" + ], + "options": { + "aioseop_options": { + "aiosp_home_title" : {}, + "aiosp_home_description" : {}, + "aiosp_home_keywords" : {}, + "aiosp_home_page_title_format" : {}, + "aiosp_category_title_format" : {}, + "aiosp_archive_title_format" : {}, + "aiosp_date_title_format" : {}, + "aiosp_author_title_format" : {}, + "aiosp_tag_title_format" : {}, + "aiosp_search_title_format" : {}, + "aiosp_description_format" : {}, + "aiosp_404_title_format" : {}, + "aiosp_paged_format" : {}, + "aiosp_post_meta_tags" : {}, + "aiosp_page_meta_tags" : {}, + "aiosp_front_meta_tags" : {}, + "aiosp_home_meta_tags" : {} + } + } +} diff --git a/wp-content/plugins/wp-multilang/configs/plugins/better-search.json b/wp-content/plugins/wp-multilang/configs/plugins/better-search.json new file mode 100644 index 00000000..2ff164fe --- /dev/null +++ b/wp-content/plugins/wp-multilang/configs/plugins/better-search.json @@ -0,0 +1,13 @@ +{ + "admin_pages": [ + "settings_page_bsearch_options" + ], + "options": { + "ald_bsearch_settings": { + "title": {}, + "title_daily": {}, + "heatmap_before": {}, + "heatmap_after": {} + } + } +} diff --git a/wp-content/plugins/wp-multilang/configs/plugins/buddypress.json b/wp-content/plugins/wp-multilang/configs/plugins/buddypress.json new file mode 100644 index 00000000..df4a53f8 --- /dev/null +++ b/wp-content/plugins/wp-multilang/configs/plugins/buddypress.json @@ -0,0 +1,24 @@ +{ + "post_types": { + "bp-email": {} + }, + "options": { + "bp_email_options": { + "footer_text": {} + } + }, + "admin_pages": [ + "users_page_bp-profile-setup" + ], + "admin_html_tags": { + "users_page_bp-profile-setup": { + "text": [ + ".field-wrapper .description", + "#description" + ], + "value": [ + "#title" + ] + } + } +} diff --git a/wp-content/plugins/wp-multilang/configs/plugins/contact-form-7.json b/wp-content/plugins/wp-multilang/configs/plugins/contact-form-7.json new file mode 100644 index 00000000..dd4483a9 --- /dev/null +++ b/wp-content/plugins/wp-multilang/configs/plugins/contact-form-7.json @@ -0,0 +1,44 @@ +{ + "post_types": { + "wpcf7_contact_form": {} + }, + "post_fields": { + "_form": {}, + "_mail": { + "body" : {}, + "subject" : {} + }, + "_mail_2": { + "body" : {}, + "subject" : {} + }, + "_messages": { + "mail_sent_ok" : {}, + "mail_sent_ng" : {}, + "validation_error" : {}, + "spam" : {}, + "accept_terms" : {}, + "invalid_required" : {}, + "invalid_too_long" : {}, + "invalid_too_short" : {}, + "invalid_date" : {}, + "date_too_early" : {}, + "date_too_late" : {}, + "upload_failed" : {}, + "upload_file_type_invalid" : {}, + "upload_file_too_large" : {}, + "upload_failed_php_error" : {}, + "invalid_number" : {}, + "number_too_small" : {}, + "number_too_large" : {}, + "quiz_answer_not_correct" : {}, + "captcha_not_match" : {}, + "invalid_email" : {}, + "invalid_url" : {}, + "invalid_tel" : {} + } + }, + "admin_pages": [ + "toplevel_page_wpcf7" + ] +} diff --git a/wp-content/plugins/wp-multilang/configs/plugins/download-monitor.json b/wp-content/plugins/wp-multilang/configs/plugins/download-monitor.json new file mode 100644 index 00000000..86326c52 --- /dev/null +++ b/wp-content/plugins/wp-multilang/configs/plugins/download-monitor.json @@ -0,0 +1,15 @@ +{ + "post_types": { + "dlm_download":{} + }, + "taxonomies": { + "dlm_download_category": {}, + "dlm_download_tag": {} + }, + "options": { + "dlm_no_access_error": {} + }, + "admin_pages": [ + "dlm_download_page_download-monitor-settings" + ] +} diff --git a/wp-content/plugins/wp-multilang/configs/plugins/google-maps-builder.json b/wp-content/plugins/wp-multilang/configs/plugins/google-maps-builder.json new file mode 100644 index 00000000..a4702982 --- /dev/null +++ b/wp-content/plugins/wp-multilang/configs/plugins/google-maps-builder.json @@ -0,0 +1,13 @@ +{ + "post_fields": { + "gmb_markers_group": { + "wpm_each": { + "title": {}, + "description": {} + } + } + }, + "admin_pages": [ + "google_maps" + ] +} diff --git a/wp-content/plugins/wp-multilang/configs/plugins/mailchimp-for-wp.json b/wp-content/plugins/wp-multilang/configs/plugins/mailchimp-for-wp.json new file mode 100644 index 00000000..9fed7f1f --- /dev/null +++ b/wp-content/plugins/wp-multilang/configs/plugins/mailchimp-for-wp.json @@ -0,0 +1,23 @@ +{ + "post_fields": { + "text_subscribed": {}, + "text_invalid_email": {}, + "text_required_field_missing": {}, + "text_already_subscribed": {}, + "text_error": {}, + "text_unsubscribed": {}, + "text_not_subscribed": {}, + "text_no_lists_selected": {} + }, + "admin_pages": [ + "mailchimp-for-wp_page_mailchimp-for-wp-integrations", + "mailchimp-for-wp_page_mailchimp-for-wp-forms" + ], + "options": { + "mc4wp_integrations": { + "wpm_each": { + "label": {} + } + } + } +} diff --git a/wp-content/plugins/wp-multilang/configs/plugins/megamenu.json b/wp-content/plugins/wp-multilang/configs/plugins/megamenu.json new file mode 100644 index 00000000..59ce26cf --- /dev/null +++ b/wp-content/plugins/wp-multilang/configs/plugins/megamenu.json @@ -0,0 +1,12 @@ +{ + "options": { + "megamenu_toggle_blocks": { + "wpm_each": { + "wpm_each": { + "closed_text": {}, + "open_text": {} + } + } + } + } +} diff --git a/wp-content/plugins/wp-multilang/configs/plugins/ml-slider.json b/wp-content/plugins/wp-multilang/configs/plugins/ml-slider.json new file mode 100644 index 00000000..ffcf3cf2 --- /dev/null +++ b/wp-content/plugins/wp-multilang/configs/plugins/ml-slider.json @@ -0,0 +1,19 @@ +{ + "post_types": { + "ml-slide": { + "post_title": null, + "post_content": null + }, + "ml-slider": { + "post_content": null, + "post_excerpt": null + } + }, + "post_fields": { + "ml-slider_title": {}, + "ml-slider_url": {} + }, + "admin_pages": [ + "toplevel_page_metaslider" + ] +} diff --git a/wp-content/plugins/wp-multilang/configs/plugins/newsletter.json b/wp-content/plugins/wp-multilang/configs/plugins/newsletter.json new file mode 100644 index 00000000..f5891d9f --- /dev/null +++ b/wp-content/plugins/wp-multilang/configs/plugins/newsletter.json @@ -0,0 +1,82 @@ +{ + "options": { + "newsletter": { + "profile_text": {}, + "profile_email_changed": {}, + "profile_error": {}, + "error_text": {}, + "subscription_text": {}, + "confirmation_text": {}, + "confirmation_subject": {}, + "confirmation_message": {}, + "confirmed_text": {}, + "confirmed_subject": {}, + "confirmed_message": {}, + "unsubscription_text": {}, + "unsubscription_error_text": {}, + "unsubscribed_text": {}, + "unsubscribed_subject": {}, + "unsubscribed_message": {}, + "profile_saved": {} + }, + "newsletter_profile": { + "email": {}, + "email_error": {}, + "name": {}, + "name_error": {}, + "surname": {}, + "surname_error": {}, + "sex": {}, + "privacy": {}, + "privacy_error": {}, + "subscribe": {}, + "save": {}, + "title_female": {}, + "title_male": {}, + "title_none": {}, + "sex_male": {}, + "sex_female": {}, + "sex_none": {}, + "profile_error": {} + }, + "newsletter_wp": { + "subscribe_label": {} + }, + "newsletter_subscription_template": { + "template": {} + }, + "newsletter_lock": { + "message": {} + }, + "newsletter_main": { + "sender_name": {}, + "header_title": {}, + "header_sub": {}, + "footer_title": {}, + "footer_contact": {}, + "footer_legal": {} + }, + "newsletter_forms": { + "wpm_each": {} + } + }, + "widgets": { + "newsletterwidgetminimal": { + "button": {} + } + }, + "admin_pages": [ + "newsletter_page_newsletter_subscription_options", + "admin_page_newsletter_wp_index", + "admin_page_newsletter_subscription_profile", + "admin_page_newsletter_subscription_unsubscription", + "admin_page_newsletter_subscription_lists", + "admin_page_newsletter_lock_index", + "admin_page_newsletter_subscription_forms", + "admin_page_newsletter_subscription_template", + "newsletter_page_newsletter_main_main", + "admin_page_newsletter_main_info", + "newsletter_page_newsletter_wpusers_index", + "newsletter_page_newsletter_lock_index" + ] +} diff --git a/wp-content/plugins/wp-multilang/configs/plugins/nextgen-gallery.json b/wp-content/plugins/wp-multilang/configs/plugins/nextgen-gallery.json new file mode 100644 index 00000000..2d603940 --- /dev/null +++ b/wp-content/plugins/wp-multilang/configs/plugins/nextgen-gallery.json @@ -0,0 +1,12 @@ +{ + "post_types": { + "displayed_gallery": {} + }, + "options": { + "ngg_options": { + "relatedHeading": {}, + "galTextSlide": {}, + "galTextGallery": {} + } + } +} diff --git a/wp-content/plugins/wp-multilang/configs/plugins/seo-by-rank-math.json b/wp-content/plugins/wp-multilang/configs/plugins/seo-by-rank-math.json new file mode 100644 index 00000000..9b22a1f9 --- /dev/null +++ b/wp-content/plugins/wp-multilang/configs/plugins/seo-by-rank-math.json @@ -0,0 +1,39 @@ +{ + "post_fields": { + "rank_math_seo_score": {}, + "rank_math_title": {}, + "rank_math_description": {}, + "rank_math_focus_keyword": {}, + "rank_math_permalink": {}, + "rank_math_primary_category": {}, + "rank_math_robots": {}, + "rank_math_rich_snippet": {}, + "rank_math_facebook_title": {}, + "rank_math_facebook_description": {}, + "rank_math_twitter_title": {}, + "rank_math_twitter_description": {} + }, + "admin_pages": [ + "toplevel_page_rank-math" + ], + "options": { + "rank-math-options-titles": { + "homepage_title" : {}, + "homepage_description" : {}, + "homepage_custom_robots" : {}, + "author_archive_title" : {}, + "author_archive_description" : {}, + "author_robots" : {}, + "date_archive_title" : {}, + "date_archive_description" : {}, + "search_title" : {}, + "404_title" : {}, + }, + "rank-math-options-general": { + "breadcrumbs_home_label" : {}, + "breadcrumbs_archive_format" : {}, + "breadcrumbs_search_format" : {}, + "breadcrumbs_404_label" : {} + } + } +} diff --git a/wp-content/plugins/wp-multilang/configs/plugins/siteorigin-panels.json b/wp-content/plugins/wp-multilang/configs/plugins/siteorigin-panels.json new file mode 100644 index 00000000..952511c2 --- /dev/null +++ b/wp-content/plugins/wp-multilang/configs/plugins/siteorigin-panels.json @@ -0,0 +1,116 @@ +{ + "post_fields": { + "panels_data": { + "widgets": { + "wpm_each": { + "title": {}, + "widget_title": {}, + "sub_title": {}, + "alt": {}, + "text": {}, + "label": {}, + "markers": { + "marker_positions": { + "wpm_each": { + "info": {} + } + } + }, + "attributes": { + "title": {} + }, + "button": { + "text": {}, + "attributes": { + "title": {} + } + }, + "settings": { + "default_subject": {}, + "subject_prefix": {}, + "success_message": {}, + "submit_text": {}, + "required_field_indicator_message": {} + }, + "fields": { + "wpm_each": { + "label": {}, + "description": {}, + "required": { + "missing_message": {} + } + } + }, + "features": { + "wpm_each": { + "icon_title": {}, + "title": {}, + "text": {}, + "more_text": {} + } + }, + "frames": { + "wpm_each": { + "content": {} + } + }, + "images": { + "wpm_each": { + "title": {} + } + }, + "networks": { + "wpm_each": { + "icon_title": {} + } + }, + "testimonials": { + "wpm_each": { + "name": {}, + "location": {}, + "text": {} + } + }, + "headline": { + "text": {} + }, + "sub_headline": { + "text": {} + }, + "columns": { + "wpm_each": { + "title": {}, + "subtitle": {}, + "image_title": {}, + "image_alt": {}, + "button": {}, + "features": { + "wpm_each": { + "text": {}, + "hover": {} + } + } + } + }, + "panels": { + "wpm_each": { + "title": {}, + "content_text": {} + } + }, + "tabs": { + "wpm_each": { + "title": {}, + "content_text": {} + } + }, + "items": { + "wpm_each": { + "title": {} + } + } + } + } + } + } +} diff --git a/wp-content/plugins/wp-multilang/configs/plugins/tablepress.json b/wp-content/plugins/wp-multilang/configs/plugins/tablepress.json new file mode 100644 index 00000000..f44e2634 --- /dev/null +++ b/wp-content/plugins/wp-multilang/configs/plugins/tablepress.json @@ -0,0 +1,11 @@ +{ + "post_types": { + "tablepress_table": { + "post_content": null + } + }, + "admin_pages": [ + "tablepress_list", + "tablepress_edit" + ] +} diff --git a/wp-content/plugins/wp-multilang/configs/plugins/woocommerce-customizer.json b/wp-content/plugins/wp-multilang/configs/plugins/woocommerce-customizer.json new file mode 100644 index 00000000..63da5d5f --- /dev/null +++ b/wp-content/plugins/wp-multilang/configs/plugins/woocommerce-customizer.json @@ -0,0 +1,25 @@ +{ + "options": { + "wc_customizer_active_customizations": { + "add_to_cart_text": {}, + "variable_add_to_cart_text": {}, + "grouped_add_to_cart_text": {}, + "out_of_stock_add_to_cart_text": {}, + "loop_sale_flash_text": {}, + "woocommerce_product_description_tab_title": {}, + "woocommerce_product_additional_information_tab_title": {}, + "woocommerce_product_description_heading": {}, + "woocommerce_product_additional_information_heading": {}, + "single_add_to_cart_text": {}, + "single_sale_flash_text": {}, + "woocommerce_checkout_must_be_logged_in_message": {}, + "woocommerce_checkout_coupon_message": {}, + "woocommerce_checkout_login_message": {}, + "woocommerce_create_account_default_checked": {}, + "woocommerce_order_button_text": {}, + "woocommerce_countries_tax_or_vat": {}, + "woocommerce_countries_inc_tax_or_vat": {}, + "woocommerce_countries_ex_tax_or_vat": {} + } + } +} diff --git a/wp-content/plugins/wp-multilang/configs/plugins/woocommerce.json b/wp-content/plugins/wp-multilang/configs/plugins/woocommerce.json new file mode 100644 index 00000000..8d80956c --- /dev/null +++ b/wp-content/plugins/wp-multilang/configs/plugins/woocommerce.json @@ -0,0 +1,120 @@ +{ + "post_types": { + "product": {}, + "product_variation": {}, + "shop_coupon": { + "post_title": null, + "post_content": null + } + }, + "post_fields": { + "_button_text": {}, + "_purchase_note": {}, + "_variation_description": {} + }, + "taxonomies": { + "product_cat" : {}, + "product_tag" : {}, + "product_shipping_class" : {} + }, + "admin_pages": [ + "woocommerce_page_wc-settings", + "product_page_product_attributes" + ], + "options": { + "woocommerce_registration_privacy_policy_text": {}, + "woocommerce_checkout_privacy_policy_text": {}, + "woocommerce_store_address": {}, + "woocommerce_store_address_2": {}, + "woocommerce_store_city": {}, + "woocommerce_email_footer_text": {}, + "woocommerce_demo_store_notice": {}, + "woocommerce_price_thousand_sep": {}, + "woocommerce_price_decimal_sep": {}, + "woocommerce_price_display_suffix": {}, + "woocommerce_email_from_name": {}, + "woocommerce_new_order_settings": { + "subject" : {}, + "heading" : {} + }, + "woocommerce_customer_completed_order_settings": { + "subject" : {}, + "heading" : {}, + "subject_downloadable" : {}, + "heading_downloadable" : {} + }, + "woocommerce_customer_invoice_settings": { + "subject" : {}, + "heading" : {}, + "subject_paid" : {}, + "heading_paid" : {} + }, + "woocommerce_customer_new_account_settings": { + "subject" : {}, + "heading" : {} + }, + "woocommerce_customer_note_settings": { + "subject" : {}, + "heading" : {} + }, + "woocommerce_customer_reset_password_settings": { + "subject" : {}, + "heading" : {} + }, + "woocommerce_customer_processing_order_settings": { + "subject" : {}, + "heading" : {} + }, + "woocommerce_cancelled_order_settings": { + "subject" : {}, + "heading" : {} + }, + "woocommerce_failed_order_settings": { + "subject" : {}, + "heading" : {} + }, + "woocommerce_customer_on_hold_order_settings": { + "subject" : {}, + "heading" : {} + }, + "woocommerce_customer_refunded_order_settings": { + "subject_full" : {}, + "heading_full" : {}, + "subject_partial" : {}, + "heading_partial" : {} + }, + "woocommerce_paypal_settings": { + "title" : {}, + "description" : {}, + "instructions" : {} + }, + "woocommerce_cheque_settings": { + "title" : {}, + "description" : {}, + "instructions" : {} + }, + "woocommerce_bacs_settings": { + "title" : {}, + "description" : {}, + "instructions" : {} + }, + "woocommerce_cod_settings": { + "title" : {}, + "description" : {}, + "instructions" : {} + }, + "woocommerce_bacs_accounts": { + "wpm_each": { + "account_name": {}, + "bank_name": {} + } + } + }, + "admin_html_tags": { + "product_page_product_attributes": { + "value": [ + "#attribute_label" + ] + } + } +} diff --git a/wp-content/plugins/wp-multilang/configs/plugins/wordpress-seo.json b/wp-content/plugins/wp-multilang/configs/plugins/wordpress-seo.json new file mode 100644 index 00000000..33ebbd33 --- /dev/null +++ b/wp-content/plugins/wp-multilang/configs/plugins/wordpress-seo.json @@ -0,0 +1,59 @@ +{ + "post_fields": { + "_yoast_wpseo_content_score": {}, + "_yoast_wpseo_title": {}, + "_yoast_wpseo_bctitle": {}, + "_yoast_wpseo_metadesc": {}, + "_yoast_wpseo_metakeywords": {}, + "_yoast_wpseo_focuskw": {}, + "_yoast_wpseo_opengraph-title": {}, + "_yoast_wpseo_opengraph-description": {}, + "_yoast_wpseo_google-plus-description": {} + }, + "admin_pages": [ + "seo_page_wpseo_titles", + "seo_page_wpseo_advanced" + ], + "options": { + "wpseo_titles": { + "title-home-wpseo" : {}, + "metadesc-home-wpseo" : {}, + "metakey-home-wpseo" : {}, + "title-author-wpseo" : {}, + "metadesc-author-wpseo" : {}, + "metakey-author-wpseo" : {}, + "title-archive-wpseo" : {}, + "metadesc-archive-wpseo" : {}, + "title-search-wpseo" : {}, + "title-404-wpseo" : {}, + "breadcrumbs-home" : {}, + "breadcrumbs-prefix" : {}, + "breadcrumbs-archiveprefix" : {}, + "breadcrumbs-searchprefix" : {}, + "breadcrumbs-404crumb" : {}, + "rssbefore" : {}, + "rssafter" : {} + }, + "wpseo_internallinks": { + "breadcrumbs-home" : {}, + "breadcrumbs-prefix" : {}, + "breadcrumbs-archiveprefix" : {}, + "breadcrumbs-searchprefix" : {}, + "breadcrumbs-404crumb" : {} + }, + "wpseo_rss": { + "rssbefore" : {}, + "rssafter" : {} + }, + "wpseo_taxonomy_meta" : { + "wpm_each" : { + "wpm_each" : { + "wpseo_title" : {}, + "wpseo_desc" : {}, + "wpseo_focuskw" : {}, + "wpseo_content_score" : {} + } + } + } + } +} diff --git a/wp-content/plugins/wp-multilang/configs/plugins/wp-pagenavi.json b/wp-content/plugins/wp-multilang/configs/plugins/wp-pagenavi.json new file mode 100644 index 00000000..79833946 --- /dev/null +++ b/wp-content/plugins/wp-multilang/configs/plugins/wp-pagenavi.json @@ -0,0 +1,18 @@ +{ + "admin_pages": [ + "settings_page_pagenavi" + ], + "options": { + "pagenavi_options": { + "pages_text": {}, + "current_text": {}, + "page_text": {}, + "first_text": {}, + "last_text": {}, + "prev_text": {}, + "next_text": {}, + "dotleft_text": {}, + "dotright_text": {} + } + } +} diff --git a/wp-content/plugins/wp-multilang/configs/themes/.gitkeep b/wp-content/plugins/wp-multilang/configs/themes/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/wp-content/plugins/wp-multilang/core-config.json b/wp-content/plugins/wp-multilang/core-config.json new file mode 100644 index 00000000..16969a14 --- /dev/null +++ b/wp-content/plugins/wp-multilang/core-config.json @@ -0,0 +1,56 @@ +{ + "post_types": { + "page": {}, + "post": {}, + "wp_block": {}, + "attachment": {}, + "nav_menu_item": { + "attr_title": {}, + "title": {} + }, + "any": {}, + "customize_changeset": null, + "revision": null + }, + "post_fields": { + "_wp_attachment_image_alt": {} + }, + "taxonomies": { + "category" : {}, + "post_tag" : {} + }, + "term_fields": {}, + "user_fields": {}, + "comment_fields": {}, + "admin_pages": [ + "upload", + "nav-menus", + "options-general", + "widgets", + "settings-network", + "site-settings-network" + ], + "options": { + "blogname": {}, + "blogdescription": {} + }, + "site_options": { + "site_name": {}, + "welcome_email": {}, + "first_post": {}, + "welcome_user_email": {}, + "first_page": {}, + "first_comment": {} + }, + "widgets": { + "media_image": { + "caption": {}, + "alt": {}, + "image_title": {} + }, + "custom_html": { + "content": {} + } + }, + "admin_html_tags": {} +} diff --git a/wp-content/plugins/wp-multilang/flags/ad.alt.png b/wp-content/plugins/wp-multilang/flags/ad.alt.png new file mode 100644 index 0000000000000000000000000000000000000000..fb2ed2501ab5eec08f3f4c2dbec557eac7d9e31a GIT binary patch literal 201 zcmV;)05<=LP)*#LCPM)r~SF{kGVwNa(6Z3f;V7U#`EC{y7;z;!8 zE&ul<|Nj&J{{Zal0Myg~@3}nkoiF^Q7XMB#|3N6vH6Zc=H2VNG{{TDW05H@5EWZFK zumB~S03n9~9l_^U00000T1iAfR0tgfz(EdzKoA7L>SZwK|G(G*7zXEBC}Z0~6{!w(nO%fcx}21;{e>v_la}CR+j7nuk`*e3QI>hQCw$0vdV`YYk zW#c-uwP9K4YGY*=my8VZ_=3m7$Pg#zlu_lAJzY#s6OC|v!{2|=CqG*Y;I>Kto-+B& hdRsk!-!ci68V7PQKeIfZuh#$o002ovPDHLkV1mcLTYUfk literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ag.png b/wp-content/plugins/wp-multilang/flags/ag.png new file mode 100644 index 0000000000000000000000000000000000000000..8da44d7852441773846cf159c89c417d73511a17 GIT binary patch literal 313 zcmV-90mlA`P)ZTrG8oG;$Z2s1M0Twlh*m^Eb1@nhW5Y};PO^xs>b`Sw&lybmTq=k#er z$fN=Wd<_y}e)8j^&=4rUgLbF32$y^w@qa1JXQ~aML8~XKHG$o!9YZxZ^Wq`p#TWw^ z^9T)Eb#z8G2Q+%Lc}Tzdn0N8_zQ^Yj$6KvlwCbpr3iH9**qICOb1jt2heR(GLTJKq z>&?ad(O^eMz2+gbChY%ntaC;HI_eck6Gn5h;S;So25JYe=dUeYzHF?oI~5IDeZS36 z3v9wP^nk;Mj(6`i78ivE-@BZ8r~oFQ3+&M7k1aV_1RQHYjtNcxFgd|N(S=6F00000 LNkvXXu0mjf>ad6a literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ai.alt.png b/wp-content/plugins/wp-multilang/flags/ai.alt.png new file mode 100644 index 0000000000000000000000000000000000000000..06e10af256b0a9701181ae80123c857f5da9f79e GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQWHI0978G?lYjV&9a#L(uP!sTzDzx;3Ct6+P-pZVsDs&%ou+k9`IKI*_5@Yi}v=T){X zTulvnELqHxTr!y>ORbn%{@rJr#FBHEMWEW_S{uWRTWjq8vMYUNKccku>h-J7WYQX5 z7+QUf&p$8S#IeYIWwk7G$oY5S4vK#`*14}MVq@riWqMcVlDj+5aSWcWelF{r5}E+1 CGg43h literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ai.png b/wp-content/plugins/wp-multilang/flags/ai.png new file mode 100644 index 0000000000000000000000000000000000000000..38b98174c185cdf2ed77bf86a9fb38b671a453bd GIT binary patch literal 312 zcmV-80muG{P);K!n;+(4ShlnavrW-(m2rhdFDsBfQV+JBy1s_s0n%e~$MsbL=-$X=9W}g3} zq}bE!15==qs%Xv_Zc$VG#)`sT8HNI>GVLP|eRo(f;gc{9}j0000< KMNUMnLSTZT8jSz| literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/al.png b/wp-content/plugins/wp-multilang/flags/al.png new file mode 100644 index 0000000000000000000000000000000000000000..6ae9992f1ee5889f58d72f56d63af474b3f9330d GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dBxwDYF2d5ZC_(V*j;-|EmgoQ4x5g z$bVLj@3buM9%{ZhZ5GYqWhyKmbrc<`qD`)>A_2bEX&w|EM7w3=0_vN}w*zyDWBTBmP|CeRWFPgg&e IbxsLQ0D84T3jhEB literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/am.png b/wp-content/plugins/wp-multilang/flags/am.png new file mode 100644 index 0000000000000000000000000000000000000000..3f1df44f1d68bba77089538ee4a81f5edccef816 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQa+w8jv*DduAVmJYfuniIC$~L z|N5VT!lJ93qql5gvogQkm-Qqv|F9142A`y)r%Bgux&3Lr>NnNgJ%VNXx1h@Z5fi;v iSI%#hI#=-J4}<*m_}k*$di#LpGI+ZBxvXJ2Bn> literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/an.png b/wp-content/plugins/wp-multilang/flags/an.png new file mode 100644 index 0000000000000000000000000000000000000000..7b3eafa7532b449b3afe6c556c66aa5f82b0d9da GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQnj8gjv*C{$-nwV4GazlmR0`B ztp55+^yIC3dn$|H-ZEulYn#l&^IJk<+G54ft8X1xQW6%#v9+=3+>(*yUsyPEM#qI? z2RE`ccl%2-&7AQ@RPZK;ivwGj`y@#f9Uhe?^Mr;A-@d(#7O7O>G_mE#T_3-nt!P7b g^;a%mX@gyi2@}nK3PrE;0Xl@i)78&qol`;+0DZYYR{#J2 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ao.png b/wp-content/plugins/wp-multilang/flags/ao.png new file mode 100644 index 0000000000000000000000000000000000000000..713aa81439fea1d483ff76a4af2f1a18592eac4e GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQazq7jv*C{$v@UF@RXVq^g~7Q zv_soG>m;LqTn9cwjz!P6bg0@F>l(IQ_Qxj>FlL8`l7puVRa0 va=F|4#$k4&l1c;zV_TJv)G8kyW=@7>5tDjt+!Q|m-NoSP>gTe~DWM4f-WNz5 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/aq.png b/wp-content/plugins/wp-multilang/flags/aq.png new file mode 100644 index 0000000000000000000000000000000000000000..54d9ccc5eda7beedf111af1a337637ffc1396b43 GIT binary patch literal 274 zcmV+t0qy>YP)IkD|Gr{F%m{#eWZxcdK3$Nw^!%+d7!|NsAN!tO4Oyg;qvDuAp!tK#qf z|4Omtu;l-f)%JME@Wbx^CUu-NkiK=X&YQ#7B4~>)jJqCNc{jL(Q2+n{a7jc#RCobR z&Q$_{APj)v8T7#Jxc@PQ&H9!4o(2F}{;McO5*brkn{<}KMiD88h|b504UkLWy{M3i z6zW7x>sqGnA>r|^e`$EAeW_`Yb1#XpW%NXGHmd0nr+C&g#Mu^V-PR?9dfq|UqyCC= YUKwhz! z^}>634z3A%ug#nEW_MmbFXJ`_S@vUn-TE?jcv+6k(3&#ax_MpAn!6iIFFWu5Y+=~R zwQK2x_h%OG$&vi0thrR;aePW5e^FezTBV%*?$CvYY_wMLF6ddiHYD!Zto&zx4|e=p c8>gQi6XpKxNy_;gpc5E8UHx3vIVCg!01G=s=Kufz literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ar.png b/wp-content/plugins/wp-multilang/flags/ar.png new file mode 100644 index 0000000000000000000000000000000000000000..77a5a956372ac26c7b6888e075944823f9b55161 GIT binary patch literal 198 zcmV;%06G7OP)}NqD3gN2j0qY-nmE+1dij}-WE+-|Je5Uk#Cm7mLs&l z^U*YrB(Uqa?_i2L4xil9G9`w@tRug@`k^`+HOYX0xAxXs1ONa407*qoM6N<$g0y&2 A5&!@I literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/arle.png b/wp-content/plugins/wp-multilang/flags/arle.png new file mode 100644 index 0000000000000000000000000000000000000000..fca3b03bebb2712b9a74c7faa5c218462771ea70 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dBxwDf}$B>F!Q%@{sY%maDaM-up{6>A4i$K3a!Kc3X6FrB%@nmP8+82?uCh$gR z+pM6bH(U>89#@4<-+67yyRHC6k&~esZ5gURZrQzN%c^8yxb^$)B%rYjp00i_>zopr E0D5UodjJ3c literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/as.png b/wp-content/plugins/wp-multilang/flags/as.png new file mode 100644 index 0000000000000000000000000000000000000000..8703fc14b9d8cf095db959fe71eab4aa0b8ca08b GIT binary patch literal 301 zcmV+|0n+}7P)s&Ru8m8l4Az`%ieckW!E>#^(jv+4i;4?r5I4X6jjk&X;kfq{!%|G$GjKTiRo z$L9)xE`n=AASRgpUuL1e;D+n}_{8V&1;=;yvu|8pilU96exRK|1k?j`C$hFTxR4RU zk~W6a%i1o$Pyt37BHqB#*9an@{$vL4c4=(@s%&1^^Bpta00000NkvXXu0mjf=uL}e literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/at.alt.png b/wp-content/plugins/wp-multilang/flags/at.alt.png new file mode 100644 index 0000000000000000000000000000000000000000..9b5461e3c316f6feba9d85832e1eb82994beced0 GIT binary patch literal 234 zcmV)K-rC=t=91O##d0%a2tdnYG{O--Kw0CfNWe)C;j-~a#s0EGYmLJ$yXAt0JqSfpcP zyTD?J>(uu&GOPap0DXPD|8Q{Wg^r}8)3%<=`L@9S)ZO>@{{R3^K|zIxh_RrCwEt>q z|8;fkeW9VD-~XAUy}j|)*75(_=FXFl$N&HUhDk(0RCwA|$b*#xK>$F(-}ZPhJ}dwH z&f0n|mZ9m6UDL1SQw)N`{mavFejJ+k?x6$>cjuIHdMAX?CySAsZ~qE#QgIl@n>;PO z!+OxqwPNk9&)&`>ZUSwkqC^k?Xbml2h12}{s&?}i6$9PY0)RMa)K0+ESGD|dZPZ>N ej8uQ#r+Nci5(oXieARsb00005Ld6q|9x)!cRKmsZr?x4 z4R6esKiEEdkISKdMl(*|6cOJZo))?ChSAKkdcAwJ8rOdOA9n7u*V;37^LJZ5{2$oA z(par@u0l$y8cUis&_HKT7srr_TXRor7d`C2<8tt?0sr)s|HGcz?le@NGl66BRmEL} zktIRtxonGsrFA*3mG5zCf2HzdftR^uQ__c-=PP)tnC7l$dGq{G@;sn%44$rjF6*2U FngAYpRN?>t literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ax.png b/wp-content/plugins/wp-multilang/flags/ax.png new file mode 100644 index 0000000000000000000000000000000000000000..c9b2d86b75d99e163087a421d56c06af353381dc GIT binary patch literal 292 zcmV+<0o(qGP)yqTO87C+qT)cUbi^pvCU>&oY42`EVO5v=h?#feOLG{fnhcV{?YS<&c~&- zX*vY~L`a&rHuZSYa)*Ws)Eq@auY_J^&UJE?N&_X#p#bU3J)YJ6lZ# z4S;$fJm*6;p>Ue1Iv q&fD>!DHSS?byx_4*3@J0qe+cZ`U!76)R|rY00005?uw1RWc&1tqLT&mO7M#@+2){1AWc@?Ceaxc{O6ft>k7k=LJSarT9Q z9LyJUnRn#*Z`tABX~*X*=;IlAu{-B1&b(sYtgj&WQoX1u25kENhUYz{X)D68qoR0K zwV7lqj_;FXKZsEa6h``=h(%^J%@ ZzX9q2dm@;lIX?gZ002ovPDHLkV1mSIW8?q; literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ba.png b/wp-content/plugins/wp-multilang/flags/ba.png new file mode 100644 index 0000000000000000000000000000000000000000..9df9d384c74cb7134e771b6bf40d51a98f6dc30c GIT binary patch literal 301 zcmV+|0n+}7P)HmKQO!Vih76Zdc28KNh3>z63mO!*!VPH4~)V5>Ce+&IZ z|39(g(6$ezXC?zg4+Fz;PR_N;%3J5pe~})T_5T3_8oIS!1*isyzL7bWymQ7e2 z8rrw-3&fLzwV^q+xA%dq^;VE4F}1;Ba5*M&aykS=5KqFjf%TLyAjM!WCd$m*9vZqK z%q?WcWH}%grYC~|Nlyb-1hg$IY%x$LlAdS)^Eu@<-MR+>00000NkvXXu0mjf@7;Pv literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/bb.png b/wp-content/plugins/wp-multilang/flags/bb.png new file mode 100644 index 0000000000000000000000000000000000000000..5cfe92d6fbfc6889abacd9132635c961905fa4f8 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dBxwDc1m>5LX7dXa<#h2CW7LybA~`ihVFcZ$)yZiCo)`H&G3F7!~atZ|F1Fp zf57nnKZD2H%&9;F13X;TQDXdy4 z&%|!Z%D942?*3bwM#eWe2bkUzna4@FkEIeTktGQra&{;RpFAnOqG%F^2)te Qfo3y!y85}Sb4q9e0NXG_#sB~S literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/bd.png b/wp-content/plugins/wp-multilang/flags/bd.png new file mode 100644 index 0000000000000000000000000000000000000000..491b7a96b981d074d2c98de51ca1edb63775de83 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQq`U=jv*C{$q6$!oO4|kSh2MQ zv9-mpso0kO5RBpHIQZp>(gmB^w*Nc|Tf$o%HDne0913{^ss)_br!+_jys))*Qg`x~ zSY`IxUTauAM%>YSgv}@yKX|wZ?UQWg+2M@a@WTRZs5}3XJ8Bv_}O+~ RZx7HQ22WQ%mvv4FO#m?5Bt8HD literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/bf.png b/wp-content/plugins/wp-multilang/flags/bf.png new file mode 100644 index 0000000000000000000000000000000000000000..69d22b4d95537b4f71bbd3853d515c92e7329790 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQU#tajv*Dd=AJfO*vKfsaG<*X zq(-x^sIlY{p(F7Q%$z_aHD(M2zyG$z|M?yF=USEhmVdLSDZie%g~xHnq~(X^7?n;} zOBDNeWya;Q#Zd+^nreBbGrX!7O}WvkK5zR$u6f%vx#MRTT5pxyeE!_~+*cfbujwrN T;M$T5G?>BD)z4*}Q$iB}*aAU^ literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/bg.png b/wp-content/plugins/wp-multilang/flags/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..2d035224c01b9437d101461bf9faf0f609d26fd9 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQr?~}jv*DduAbh?*kB;waB==$ z^<);d1AbCVj;_p5iv9DZP-JaEtWmgP@YS4W@05fx5}Gw{e%%njZhaz}&&e*k{)}*s g?epa0)6+Ky?|z;0?(qVCexR`op00i_>zopr0HIqiO8@`> literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/bh.png b/wp-content/plugins/wp-multilang/flags/bh.png new file mode 100644 index 0000000000000000000000000000000000000000..752b45eaf8d3c128e3be79049331a74b6da0d70b GIT binary patch literal 206 zcmV;<05SiGP)ORpMil80%A0RL-dfS?f$+0 zadH2dnMu_4^y&Y!6weqC&7^juwy$=Cjo6_M8FLOhC|5O-n@D9`tF_AHPx@# z*nlyE1%dS(VPIGX)CSjc^}>a#O-)x76@hNRg${xB%wS*u0M(yJP)2J+eE$=eKd|y~6Y19F75!BHlvW zg<0lIF*c7NBdn>Jc%)7AD_*e-R8aPDD!bGBN=BHzF=XkV0Kx%b=r1PhYKqQ4m98Ws z3~lH!hcf_u^lQNVO32E9_vo7JWby{?G^ZsN^aQ{cuyfs9aO>|1Y^)##2tWmmXq5?} z`Ms2)(&~}zXsb-Q$SOd{$xdWxr(WYLG&3Mjg)A+S(g^^*o9iCVK66wOGC(-h)|gQ@ z^h(?Y<($5X^igefzmgG}7CB|tmEF+9e*VUHi6XzzeXlfp+^2X$nh UD)vUj>i_@%07*qoM6N<$g3qLqsQ>@~ literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/bi.png b/wp-content/plugins/wp-multilang/flags/bi.png new file mode 100644 index 0000000000000000000000000000000000000000..02b8eb461e969521afd2e6041cddd937d79036a3 GIT binary patch literal 292 zcmV+<0o(qGP)(psNeqes#H*AE6KTyzstwl&_XJf=FU?+m2MTm&w9E%`P6Nf40 zZfACnJ%OUvgGe=9SMB0Id??}=&F0SlOEdr(GH2(QyEfW$%t7Qi`>BcZNeUfeN&s!v z+LEQbx~1ZsJ$3@ISQyj&L{ji*8X~8GHj|mY#mM@;u49Q?G$B>yYDMaIDozNW(Ts!YJ$v qI|AU5rU%>Jh*UD}c4wne5Cl(5lV#BQFhvvq0000cq%!^g?&e z0lqi;*-Taa+IQ~`R*WycWOwq_g(W^O-@bgZJ5u}EnutBIzmMsfC42UsyS**{%kNLq zbpD)ADClohd=@dW>->_sqGOl-f62E?{yf|NRdj3r%<~&BI({!+b6PUX(CcmKf?vu& PTNylE{an^LB{Ts5Gyh1{ literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/bm.png b/wp-content/plugins/wp-multilang/flags/bm.png new file mode 100644 index 0000000000000000000000000000000000000000..7a42262d5affbe69beda028ab8eeb96c567663a0 GIT binary patch literal 315 zcmV-B0mS}^P)yZ`|I|Nq7w9;*NV>Vk@ybfV=J7qnMe9vOSTmW@Y8n()AZ-M*>x(V>W58-$B7 zoB#lY006l^x<3E_0C-76K~#9!O~^HZ#6S=OK&dr7i>Cj7&*AY! zW~K^Dpqa?9bC(6h?jF4oW~4I%!2tllUY)hkaH?HiN7;XWe?01+*Bijy?*Qa&8v1wg z?H%}lDj9EhV#93UugP%AEm#g*>%+`G<|1|~SxN=(^oY|mHjOR{Vg!t#7)0vDrtJU# N002ovPDHLkV1mV4i&_8x literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/bn.png b/wp-content/plugins/wp-multilang/flags/bn.png new file mode 100644 index 0000000000000000000000000000000000000000..c6af38f8defeebb43a9ffb9f847bcd5c448a56cc GIT binary patch literal 330 zcmV-Q0k!^#P)66lUuU_2ijWXg&(l*dZJ6N0 z*<;VP)q$MwMHWdLNY8~G3?N`;X4cr)c=E&vxSsE~Zrtl?0U{s+Ebs#21h_U7z|FZIFSHbM~4P9Q>d#mh%4FCC3%SUQQp(U1pObD_3cqOL4Zus18?aDNlfPGoIw z-n_YX?HVL}fF1?u&x~VGkzfUC>u^#Bl5hsZ7eLkM+K@f{WHaA_B)Pk}_7@WDfz|>I zLh}XC2uy9D*t|1M{(6-W5CIwW1q?8q2msUrj}3h2&>9AyexQee76NsF%!cT>u!A51 cYK8^@0M(y(I{TU{!Tt<8 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/bo.png b/wp-content/plugins/wp-multilang/flags/bo.png new file mode 100644 index 0000000000000000000000000000000000000000..b54e38bfac1e8dc8e92b8141eb0590825caee629 GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQf{6ujv*Dd_MYC#*bu9b+`rB??2nk~w!BC+9`(*iYzV}UIdo3l4a b&Sf?GZ7W+gbF+&X&_o7LS3j3^P6x literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/br.png b/wp-content/plugins/wp-multilang/flags/br.png new file mode 100644 index 0000000000000000000000000000000000000000..f377c147f0b33c6d651c649c8f89d0457105f70e GIT binary patch literal 336 zcmV-W0k8gvP){2cZjZ7___KQZPNS3=n&uLafCM4SRvAISUKh`1!8@QAS4J|Np#GPBL&;K-7Ts zgdu5jo5k?zH^_$Crb(*WH^n6$F)%y;B46LdK*8_-86uaWYLlD9u;n(?RY0>Hy{_w+ zU-k{Zl~QpbH0=xz?}MK|B_XmWUN9&Y;?Ty+e-9bO7oYt9UkY6trXv#*r;Cd}<>Gn_ zL_kJX_G%1AVh<8tV2}t3UIC)g(ur7u1QHv>M*vulA5dEfJT_2}V=F`81T;aI9#^2Y i9GIRk0tlhUh5-PRZM002ZgJ570000#Dh$S zZhd=`7_nFC=u;mbp5koDfA$C3@4ZRfu}y0B_F`p;fA<&lni}^wbM5aZF#u59jFJ0fO>9(!L(uOfor=mE9Z1y%Gvd^fX>6K?V9Ax zb8}DZoe$9l)Bx1^eQ6#6ZBI_61NFRG-~n{li9`GU)v7|Ahu4v}7=e1=p1ITR53~yC zJ*?WG8i3&j)B{us^bFh*AmhjGNod-@vGE$D4d^Pk(swVOK-icFsON|u16a>FP{hB9 yMW8$7CO{GsLG-M11!~*E0J9oDLg<-c!vFvfPjfi|u-zsA00009wpZhUnhCVXd2e zO6Nh4RoY~rHsgeT2p1DMB)3{cRg$TVOh=L#BrFUhf;V7<(DoLH|NOak=N7~FcaQGh zdHeGxRy_!9|6v@4fB!zbf6MUa$EOePU;X)mT^l&M0Rg=Sw`3X%Z~y=R07*qoM6N<$ Ef{NdH00000 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/bw.png b/wp-content/plugins/wp-multilang/flags/bw.png new file mode 100644 index 0000000000000000000000000000000000000000..a064951dfac6e388c2dbb45f89328b4592d10229 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQfZzpjv*Ddl0W?ZKVK!~`^Wu9 z@BZgWd0}YFe>v@IM+D22tNOh&Sv zX%ifhnk#Z0Y-fG$GdPeekip}~a&hsMZF3mcv1_;pIDTOeWbpXdx-MaTkr>cM22WQ% Jmvv4FO#r=JKW+d3 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/by.png b/wp-content/plugins/wp-multilang/flags/by.png new file mode 100644 index 0000000000000000000000000000000000000000..753f45a7189d0c268b651a46f6b82c5aa9fc19ab GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQgxm#jv*Dd=APXucsM|S;o{XZ zCugkse+Grb>OGZ^+ewj#ka)Voo-vzHb}I*o|<_mii?xO^N__O zj}E14S8chS=lfhXc~RXUAidY9f#vz;LoYY+PCG3g!qM)`U~(gCfvW^tZnW;yL+e)l j-@ac+>rB*&1&??wTWt39UyM@$x`e^g)z4*}Q$iB}Z~RGX literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/bz.png b/wp-content/plugins/wp-multilang/flags/bz.png new file mode 100644 index 0000000000000000000000000000000000000000..29728bfda5a89d8c9561f2a890ec8d6884368af1 GIT binary patch literal 322 zcmV-I0lof-P)`?Pn>mOeh5Mg5*6L%s3|EOV>V-KvL_NkOHp8gkLTM9 zQR1zkH9w~p&eGBnLL@abPB>~<2^I;bcB;iHItE~=2ze|L_(oh}Hukgh`WZbKM~LLV zM{Eakt!I+$s;KIz~YlzLKy?hB Lu6{1-oD!ME&i8>nRMd#iQbegpri%|!hlEz8)l z*!TAv955DzPE$(8Bjc#ks)`Nca%r0QXPpMh603*PGz|0_@H}?iH9^2YuL*dxWsym= z57Fza%}5l@LY~iceT=9!=S}pa(+l=U81_Qjt`Sge-+}WW`T@MUYL+`E^zi@y002ov JPDHLkV1ko*bKw90 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/cc.alt.png b/wp-content/plugins/wp-multilang/flags/cc.alt.png new file mode 100644 index 0000000000000000000000000000000000000000..50c7d997268a2d3fea8d2c38f9ef36dfdfbc0414 GIT binary patch literal 286 zcmV+(0pb3MP)MhBN?=I02bF0HHqxt3eN@Jpi{y19~n1aV!95C;(n108k&wXoATA004GL zL_t&t9RXL!UVHZ(>v_F=7GRw< zGun!dXSUdNQhvUl6_2$!@qQ>*Cf_~YoZHQ?%`T7|6^axtuNDdgIO^Si(G7B-zoU}T kJpW}ApigX07*qoM6N<$f`w6QmjD0& literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/cc.png b/wp-content/plugins/wp-multilang/flags/cc.png new file mode 100644 index 0000000000000000000000000000000000000000..1486d9644fb218ef584941093882d4c1579d6c88 GIT binary patch literal 332 zcmV-S0ki&zP)t=91O##d0%a2tdnYG{O--Kw0CfNWe)C;j-~a#s0EGYmLJ$yXAt0JqSfpcP zyTD?J>(uu&GOPap0DXPD|8Q{Wg^r}8)3%<=`L@9S)ZO>@{{R3^K|zIxh_RrCwEt>q z|8;fkeW9VD-~XAUy}j|)*75(_=FXFl$N&HUhDk(0RCwA|$b*#xK>$F(-}ZPhJ}dwH z&f0n|mZ9m6UDL1SQw)N`{mavFejJ+k?x6$>cjuIHdMAX?CySAsZ~qE#QgIl@n>;PO z!+OxqwPNk9&)&`>ZUSwkqC^k?Xbml2h12}{s&?}i6$9PY0)RMa)K0+ESGD|dZPZ>N ej8uQ#r+Nci5(oXieARsb0000meOd{HW2#Zd=UIwiOkT$>kK4fj;ZZlMUC(fPj0Yv(tT|h2& zZHpF0qiH+5*6{ybCLjVbaB54bZbEY;(0LGTK-+LSvTIT{np}Kw5yWraNkt@R!-pW+ zfUyBIn*?oIjSOlf4BU<@>YKyCvC&HyLG&nPFaQGsOV07*qoM6N<$f=5wp8~^|S literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/cf.png b/wp-content/plugins/wp-multilang/flags/cf.png new file mode 100644 index 0000000000000000000000000000000000000000..26fb78b5f795c10a26e6a917e75d9d8b6a5edacf GIT binary patch literal 221 zcmV<303!d1P)ST5Jg{+3b6n!10j?hvOxw&Z)F8avPBAtC|SUwU;@jOX>&PbCjfHI*Ds#$>s1Cs zTNF~33b8G1AO(04Goc99UR&$Oo Xh9M_rM1X@X00000NkvXXu0mjfnq*eF literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/cg.png b/wp-content/plugins/wp-multilang/flags/cg.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd29d12ab8b67811b7794f78754a4cced572e76 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQbnFFjv*DdYELt=F$IdWKCIu! zn8B^QRi%9W??vE-9K!2YyQE6d;^fBV;)!GCUr-mv|Wx$EX+ zflV_P&$i$7bMb83Wj~c~3FkfQ5u3qy>v_t*o0B-WV;=DMlvk-w?pV*;Xtw{nV4RG! W@XxdBEwg~OGkCiCxvXm~w7wwg^3}imj73EmLHQCA>kJb%voBFM5m|NiF!Pbn0EGp-PYiqt zUWxQ>>Fj3y%UmSQ5)s+BW6>gsTN?aAEI|PbRy-XE-xMzJvb8y%xcGNkM@JpA%Y%yK hridR>Clpy38S-X6P4y9DSG22WQ%mvv4FO#qQ}L#O}% literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ci.png b/wp-content/plugins/wp-multilang/flags/ci.png new file mode 100644 index 0000000000000000000000000000000000000000..4e42e333c6a7d76a12066e5ab4915a0cb4a18735 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQu&@Pjv*Dd?w;OS${fhRaByOY z>CXRlXZrd+HqV@?_+^i8d1>gxNDqeS@VMwm#&eQ++9^ykUj&CUH2&On$SLi5c%RK| ziM6Ut@e=R0@Bi`qw$lf0;l+oXlwL47T(3-ie)aQ)Sk>GeyaCtmNi?*(znA*VX5!G; SQ@jFbHG`+CpUXO@geCxE^FiDI literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ck.png b/wp-content/plugins/wp-multilang/flags/ck.png new file mode 100644 index 0000000000000000000000000000000000000000..4bc3b9e465ede98bd9f221f630d50891d86b1edc GIT binary patch literal 314 zcmV-A0mc4_P)P@v=w4?jPI002VuY;6C6f&c(c003qW50D@q zf?{I7tXYZwy2lL-W)u`|OG};q8XBRP&)d7-004!Og0|XwiKLLb-g>3vfQ$Hyo3XL# z=&QEd!1@2q+|B&CJ^%m!fJsC_RCwA=%7c|dQ2<5J^Q>=c81&y^ti5Ir!*!}W|+!~w@Z_q0b8C2ex8b+@c;k- M07*qoM6N<$f(%`SHvj+t literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/cl.png b/wp-content/plugins/wp-multilang/flags/cl.png new file mode 100644 index 0000000000000000000000000000000000000000..2a96b469df799632c7138820142e20df5ebbeec9 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQhA;(jv*Dd&Yo7}YcLRCz1XOr zby0LqqxV;Zmf)mt5vN_^3KJ$x2%Qmh{Iq$z5BJZl`cZP{E`E=QOuA`c;QQPr{$9Sq zlqFNF98~&~pUW7^OU@*3ZcoAs#V RmlM!t22WQ%mvv4FO#r$HJ`w-` literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/cm.png b/wp-content/plugins/wp-multilang/flags/cm.png new file mode 100644 index 0000000000000000000000000000000000000000..ea1db14c57f0ebf8e3d7dcca5f981b7240023fea GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQZ=3~jv*Ddrk>j>csM|S?V+j2 zBfF3dy9@MO(@xBpAvv{EQtoce%X9SwO}b|e`295bQCb`Gqlw$zME}eqS@t&8r?-Cc z+%PaYu`Ya?x2IXh%v7;`!kc}rs~Pre%KMgbU14>0TCCj%*Z+rfMA8?UzX>*%%3FDM g*_5kuGA*vNMy+_|+pzRO56~S9p00i_>zopr02Mz--T(jq literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/cn.png b/wp-content/plugins/wp-multilang/flags/cn.png new file mode 100644 index 0000000000000000000000000000000000000000..99e0d3f0a7e9feeaef7d9a118fb0997dfbc79f3d GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQU#tajv*Ddl7F0U==yQ6gVDZe z^AyQ{*^QFZc>dQ){@X0D`0U(=|2f#=gpaR$&dYq* zbcWdm?ofq1X5&SiSlY#DH@O1TaS?83{1OTp&PGtZ9 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/cr.png b/wp-content/plugins/wp-multilang/flags/cr.png new file mode 100644 index 0000000000000000000000000000000000000000..dc7f4af21afb313ea0d143234a7b7123b45d2f17 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQt_THjv*Dd_FgdLYfuniz1SFC z$^QOT?vCaZYXR=^=EfVs8gur1Grzxa{*7L>H3n}yGalbQRumtX9A;O#PvY?x9~UQ% zkY^k$A9TKa&-o~HKIKwz4tv;zJ3N=~sP->o)xUFE%x1=|eeOW37(8A5T-G@yGywok C1v<9? literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/cs.png b/wp-content/plugins/wp-multilang/flags/cs.png new file mode 100644 index 0000000000000000000000000000000000000000..1f8f73df9f91556eca0808eed4c58ff2f9d2396d GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQjwl6jv*Dd_MSE5Yf#{Ed&vIs zZ~yUUj907}EtFn9(kOj!etMq1=#7VMJiYHzeYPySu~t~hO(A--;cg=ilNAlxi>;Th v(o}tTJuF>u&5vcz&aQiz*5S}D%-7FuQJHnl!ZlujP)pqrcGLX z;0-}EXTy!Y1xG=85U8f+KOyku&6{i2uE8`I7(f{g4j*s7zWMAwF0}p7^<^6lgO&RD z{J($ye|kDpCkwBKMm2-^a_mU2mqDumtd5QC|F>`dZEQ%?#?Swshv&bfB=L?UGe}5| zfR-uS%37B&0`)xRlyy=}yTii8KoI=-0!E*iRtwvxsh8ei;RJGsM*#9HbDf4oM~naf N002ovPDHLkV1m)acs2k4 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/cv.png b/wp-content/plugins/wp-multilang/flags/cv.png new file mode 100644 index 0000000000000000000000000000000000000000..078b87f69d27b1fe591d59de2932317ba0460fa5 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQVTs@978G?lM@muc-+DzB>V&$ zzZn|jq$EU~Ygm#l&)9OocrxR%bW1~yWy_~CCh>o~b)ZV>!q%19-=2%46c*^R7ntT!HIkA;jOqyfAqXeHGZ^YkY zCvKcL5OAtNqd%0VW$<+Mb6Mw<&;$UL+fU*E literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/cx.png b/wp-content/plugins/wp-multilang/flags/cx.png new file mode 100644 index 0000000000000000000000000000000000000000..ecb41e4cd9551c05f1bee484ca6e455b35528fe8 GIT binary patch literal 318 zcmV-E0m1%>P)T`LYjIKrg;Lve3#siTVG^mJ>OjH+~?^gQ0v%&lqA-c0tZ5s}8sGV=d4PW3lY> zca!ld3?l771U1d3R+moXe3}o@+S{+dc-t23{j@nh3N^t5k+yykuK5~b#OzYj$QznU zXAFV<8d4Q~T2GG?j3_8L^O`fW%^FG3=|BCgo?b9fLrMsA%g$cWgfi7P)u zl(HDsF}7{bvk&T5j8%9Nez6HEd9J0tz1i*CwA}|h-q+G$2B#4IHkjOIQ#Z<=KlHixvPcwE-bsa@BjR# zdH43a&6*OFcz@3B_66TMJ$g27P)xp-_HE7C9W2whN|^++%D(1I-FZkOtpCOv-t#t_ zB;DRvSujnIdCtt;IKQ-@$#z51--K!LWk=sUVBX)A&su+mVIk0M44$rjF6*2UngHh@ BPu~Cl literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/da.png b/wp-content/plugins/wp-multilang/flags/da.png new file mode 100644 index 0000000000000000000000000000000000000000..484ee987fe21ee911092486e166257d633eda79b GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQiYx_jv*Dd_MU&pc0fUd^+EGq z&kozV^B0U+Zu}4GYRK@-(m9(dZOwOmZ_N%3iQVg#vMN~3wOFs_cIb_H&&E?zlx9>O z)LCG+L2PaHUU|LXwNt!0roXv=U(BXw?OucHZe9g^x7}u(JGJx56P{!Nrh_~M49Cxl VNTizRbO0@9@O1TaS?83{1OUWIK>`2( literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/de.png b/wp-content/plugins/wp-multilang/flags/de.png new file mode 100644 index 0000000000000000000000000000000000000000..2b3167c2d919d5a1afb0973e4c6f1ed41f9e6a28 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQm&pZjv*Dd?sls(H8=>k$`}2A zJkeuI>B=2GZc4w8JqDLV=@(1xtA<#c1cLV`B3Y2sflYN+ti=< aR-0|kOrNY=1U~HDJCe#u6vvbZ%^(O9wppO z)LCG+L2PaHUU|LXwNt!0roXv=U(BXw?OucHZe9g^x7}u(JGJx56P{!Nrh_~M49Cxl VNTizRbO0@9@O1TaS?83{1OUWIK>`2( literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/dm.png b/wp-content/plugins/wp-multilang/flags/dm.png new file mode 100644 index 0000000000000000000000000000000000000000..46ba3c0d992ec79aa0c0f40a0f755b7e817ad043 GIT binary patch literal 333 zcmV-T0kZyyP)1t)L;#{lV2}Vo1OvCo0RRJ=$-vMLKm$kzfCGqbfDzF+Az%S)PJkg2$D#i2 z0$(5G{@c0NgZKR&;Q!$h*06*{NhCxOkwzl-P7E`+qeTwikb^BLgrcC(Na5c3`G+OE z!n8s#=cCK}MJIR~Y$!sw1s3pJ5xXI)KGN9|Pm9iqC4g%XsSzS=ru#>aoN3YN+B79e zU_53tqSq@~dB`!rj^97o)}qt3zK`e8f-#Js=Wqa={=U8J<$%tr^}$2x32&s$`jFu{ zT6DTHP17VvXnqp1E~`PqlMus0^9Rg_8;S{B0W-LV5P}jDV+=+U8~4rx3|!LUi#j&L fTC66sI_vxa#)0R^){0lx00000NkvXXu0mjf)x(c2 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/do.png b/wp-content/plugins/wp-multilang/flags/do.png new file mode 100644 index 0000000000000000000000000000000000000000..4e30c9951ffc25e756cab81869bfa4dd33c851a2 GIT binary patch literal 275 zcmV+u0qp*XP)Io?~{XJG8hP#`xIfQz&=8Hfk00X=pmLBK!Ih~#ex-3$8mrsSi=JDcU9F|zgJZXc?7eB2bk?D%VlI`nVa{(7Qx)6iA*CC$yp18t7d;^ z9voop#+X%I-=#IpJhGKu?Xx}Grghymtm__OleF41g=c8f`o0b8`xki4 Z`v8P)FSLgxLFWJf002ovPDHLkV1l3wd-?zX literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/dz.png b/wp-content/plugins/wp-multilang/flags/dz.png new file mode 100644 index 0000000000000000000000000000000000000000..6a0f78b5e2759b75307ea4c56d588671fd0596bd GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQj$@^c$w7XPHIZ90>WS}nT2BjW$_XaDZ+kqkb+HT(L8 zjOG`NS;taE%W@rTr6F?iKP`v6Bpeu4C|Y^>bP0l+XkK Dvg1(8 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ec.alt.png b/wp-content/plugins/wp-multilang/flags/ec.alt.png new file mode 100644 index 0000000000000000000000000000000000000000..ebb7e72e6c37af56cbea1120c75abe620520c28f GIT binary patch literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQjVT3jv*Dd_MYC(c*sG3!C>S6 zmXr+pzJibj>-5#vH4ibdZ=3Ucd(_gB66FK8L(G32)IC$I_A&qJ4kyWNUWR(Lx7jb- W7`)nXHE1f(Fa}RoKbLh*2~7Y6)+`+W literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ec.png b/wp-content/plugins/wp-multilang/flags/ec.png new file mode 100644 index 0000000000000000000000000000000000000000..ddffc2a79dd048a24e7ca638d6fd094b48ef1531 GIT binary patch literal 224 zcmV<603ZK}P)R!M0SR&9*`Neum)3=FT3gXAqi1lIEgjF=#o2;KDCKZvLt)_Ht=hoxQqB7fUyf@8F1X{-6>FVdQ&MBb@ E0B3DDx&QzG literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/eg.png b/wp-content/plugins/wp-multilang/flags/eg.png new file mode 100644 index 0000000000000000000000000000000000000000..b089b01a333ab299dbfb5a27968af34197b0f833 GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQemDhjv*C{$v@6Juqk<;xBs+d zuafg^X|}d(gJENkAJIJYD@<);T3K0RW2fHk1GW literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/eh.alt.png b/wp-content/plugins/wp-multilang/flags/eh.alt.png new file mode 100644 index 0000000000000000000000000000000000000000..3f420061add569d134556769a77f24f60d76bdb9 GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQc0dJjv*Ddk}VE8i2XQ!U_-M^ zZi30gl-wsT|Md4nMg0?I%D=Z~XW3h+7=9;p-mQUePI&&~;W;fKF-_QMFAq;|Mioak z^J~r21V*-JEcR_q{%mc}U0QyN8~i$RfaMzV!wC%x`fHz*Ukv6u1GJ67)78&qol`;+ E0D0Ot7ytkO literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/eh.png b/wp-content/plugins/wp-multilang/flags/eh.png new file mode 100644 index 0000000000000000000000000000000000000000..c2e68c688c49b63c6bc3cb3ae09394c2e0aac91d GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQstg5jv*Dd=AJVbWO8I^eHgFE zae#qof%?=ZYZz|n`XADa;Fq?EIj6bz=k5Gw4~;VAEP^AhrHTKq=&mmrF(rO yvW;oJZj5QNYy;V#Y{Q8-4D3%amK<(YmgN^Mv~lG!3!Xu|BmcF25B0qSV{2gE-}@73%=?KXnvoFE*}UZ8af9R-)^Jkv?e5c6tPp7W d$ZcRsR!=W3G)jJBNg@CM002ovPDHLkV1jPmjLZN4 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/eo.png b/wp-content/plugins/wp-multilang/flags/eo.png new file mode 100644 index 0000000000000000000000000000000000000000..688990f8ecc61fa92104ab47e52a484021cfb14f GIT binary patch literal 93 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQYxMbP0l+XkK2>uzi literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/er.png b/wp-content/plugins/wp-multilang/flags/er.png new file mode 100644 index 0000000000000000000000000000000000000000..ef9cb3116309ab047546f5ca8d6aee22fb335098 GIT binary patch literal 303 zcmV+~0nq-5P)0 z1I!ix6o%20ZQE|lw(X{GRx`5g#-?m@MmDExfdX!pA*vzU^sDz!-$Rm<_gS@*1yQi{rFl~~M9ZqS5uHt|AK^V0mEe71xc zY+*GANMIkm02K8F>;c=Tnl0CIl`r%r0Vv{k_jR#b4*SGPdNYb6oF$1i{86l*2JA8E zis4n^2uoQ(Tl#W_i~K3FJ|=KN;Dh>v5|qc1m=0d?kHaO_MJoJ&nvCbApMT0+gZBg# zuv_|GHT$|*-*i%DA%tYHkNO=n@2qj()dNr=%K#uXWN5yqjt2k$002ovPDHLkV1n(| Bj5PoN literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/es.alt.png b/wp-content/plugins/wp-multilang/flags/es.alt.png new file mode 100644 index 0000000000000000000000000000000000000000..ea0668de4afe6d34c81eed2f49b8db0d0e20af3d GIT binary patch literal 113 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQWl;rjv*Dd-kvsPY+w*^IOzVr zCFDmKWBK>a+xjPWJUYBA)%xch!JoH-9?ubJaV-8Od1Hen%kL$*mZhtVS(PhlK!!7T My85}Sb4q9e0JyFw4gdfE literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/es.png b/wp-content/plugins/wp-multilang/flags/es.png new file mode 100644 index 0000000000000000000000000000000000000000..475abd9cac17d728195949e39c640f3b3ddd1b58 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQq7(&jv*DdlK-4{5c}cJrsRKH zd&0K=OBR~vORS4MeBs-YNx~if{->)t-hN#>X}XPseE$0Cy4zDSa`#KtZMh}0;mLm6 z@`Kk+JC|5|>N?xca_w{5n*aQfg6n&~9v1KXzy9cd`)LeD4KX&iJo?_ve!!8?^!dJ! oOM-2F1IN0zrX9`_dz%y)o`wj|%~xRS20Dkq)78&qol`;+03XFqB>(^b literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/et.alt.png b/wp-content/plugins/wp-multilang/flags/et.alt.png new file mode 100644 index 0000000000000000000000000000000000000000..5ff4256f0cdce71635310cfe8c4c6a2f1a35d796 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQW2gmjv*C{S9@D|8w?m&_8ZAb zZwgO$SiHm8G^)F3=a2Y#i*+{4yTt4`?QyZ)itK3?PiMSdCMS4u&uR0o!sm6qf1jIn v-I3#u(qn}a4ayV!UTw15G%@J5iKd;>smGe4`z#g$?O^b9^>bP0l+XkKH#ar} literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/et.o.png b/wp-content/plugins/wp-multilang/flags/et.o.png new file mode 100644 index 0000000000000000000000000000000000000000..a38955fcabd52f79e4cdb627ff3089ca74ed0a54 GIT binary patch literal 235 zcmV-J^*t(0B<({W-Sx6n`4{o007qj0KxzO!~g)U005W(02`;E82|tPRY^oaRCwBDjkN*8Kmf#~Fm>5~ zOIK!oRCy>M5mm5~yh5RQ0j8VS3S97WdQ8&<+&rX52i)6Ky4+>z##Gt{$D{Z^jv9W` lmJd?kx=9xzZmEm8Gy`}24!(Jo;GX~h002ovPDHLkV1kv1S$^MQ>Qo-n*k$X_zwchGwy5*z z=fbNhTQu{xRd5}?AffzGM9yTpM%SEK%{8<3_lvgAner^7Rv{W_6@#a%pUXO@geCxe C4m#ri literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/eu.png b/wp-content/plugins/wp-multilang/flags/eu.png new file mode 100644 index 0000000000000000000000000000000000000000..f89ccba99173d5eb8f6094b9b0b742e5dad07d86 GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQYD@)jv*C{$q5M+JZ|9<5`IFB z-wX|MQW7H0H7rS&m-_X8KI6>pCFyF+KIe;4Sgtfo<-L6QG{a_gMZ@$y^$AB*nXX-K zxZoy{n05HAN{dBl?&3T7GZZ`5@ybaTwA`PcVEdED!|;Z;fa8}2K_`D^#+D1hybK32 WXGsQi>lFg+XYh3Ob6Mw<&;$TD$~zGN literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/fa.png b/wp-content/plugins/wp-multilang/flags/fa.png new file mode 100644 index 0000000000000000000000000000000000000000..a400628645125380c04e5076f3a40caa2c44e665 GIT binary patch literal 226 zcmV<803H8{P)LMYjg`rTO$TEllGcHi>Og}+8jJ`5zuesX%Msk*0R}AVYS3U2 zpT@Ax!V@&YH%GRr!LZx6duN=v7{0mAffwuo@YG2)_l9nXuKN3NzMk_#zL1q=mu2tk z$2TcuQ51q%QH0ih%vs37kT~{Z!djX}kR&*VF-){ABOw?mHDqbZKjd%%Jhi#`WC|qf cDv-l}0o*F50HX_0=>Px#07*qoM6N<$f@s%Yp#T5? literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/fi.png b/wp-content/plugins/wp-multilang/flags/fi.png new file mode 100644 index 0000000000000000000000000000000000000000..9580c4af12c43b20de10e237924af17fae1a9089 GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQazq7jv*C{$v^tJBVJp7U4#G1)H0d>E{*Kk!slahzT-$nCUnCfWT(Pc92^>co_nXSioPz4>X5F6 zc#(Lnrf9)dVBK2`wzlluYn7|Jy{{xZw*UYDg-Jv~RCr!p&P5KxPz(T3+aDp!oHE`2 zfVCo3Y5SJ58i>KW$oaZSH!30U&*l*wv)-#sLM>#O)# d@SELnncs)l3Oc2~;4c6G002ovPDHLkV1hzRna2PC literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/fk.png b/wp-content/plugins/wp-multilang/flags/fk.png new file mode 100644 index 0000000000000000000000000000000000000000..f2936d2c345fe6b6f585e0c8d849548c15b3efd7 GIT binary patch literal 332 zcmV-S0ki&zP)^JE{|gJ?TYvw_(EHwITS#nyY;gbpNYb-@fB*mhhDk(0RCobJ$U}k!Q4mGJbMs}XZDRjh zYkgZ~#4vpjNCaf^-sWI1}WD*xbn>&vWt+f``~`a@-xJXXC{= zLJJ4XSGTwL$NL!4^rS_ieq}t e4PK5jxPby#>>>kOH|uf$0000jfCjl6uYx8Xp1~s zdD7Rkw*UYDO-V#SRCwBb&cy*mF$@DRIS<Q<@@pzOe@kOHF( z7#=0Ol;$ka_N#xTXT#U?WAYNBCsR_;EMZDzPL+qTasYoz443dq5aj>>002ovPDHLk FV1fa?Sp5J1 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/fo.png b/wp-content/plugins/wp-multilang/flags/fo.png new file mode 100644 index 0000000000000000000000000000000000000000..ceadf2cc35ca260a29372b2953859980ecce711f GIT binary patch literal 254 zcmVn2@6V6fmX^`0P(#zsPFN-)akHD7oAvc|rlxdgNIN?(Y^k;N#KSCW z&o&aAYHJrwbAc~PZz)=$(3wujR=6h3*$qzf6iktmAWQI)34Tc`afTa5@Uq+6+w=4H z7vvW1x!d30H4G!zc$uoYyC2`Y3ViT>e}5zL9g>O2KNhWqh_{mKqyPW_07*qoM6N<$ Eg3-ZtYXATM literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/fr.png b/wp-content/plugins/wp-multilang/flags/fr.png new file mode 100644 index 0000000000000000000000000000000000000000..d17f1d3eafb1db3b81a0331bdcb7b409a4d205ad GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQjwl6jv*Dd?w&T}Vlrf4z36`8 z>RX++HVYM3nr{sJvGkCTj_k79R%`QhF;A|S*Th8rJh>@+hUDiBvCB8i*e0ELmH)4~ w_L)7==chJL<|CV%g#yVZ&0yIYg$@u0knj{)78&qol`;+04usU#{d8T literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/fx.png b/wp-content/plugins/wp-multilang/flags/fx.png new file mode 100644 index 0000000000000000000000000000000000000000..a5bc2be738af62e47da9265ed76e0c1d6dcbabdb GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dBxwsiFX%5LY&aN%I&Osw>WPwq3c@ z*7ow{OIC)BYz(t!Ffc4+U|?fdVr#KwIRnEU3yXV?9$&7gU}4zH!f=$8VGBFMT4ni7 zHPz==F)*xJ@o*~x!)_&|Jq!#77#OZMG(29h;@R`(uiw1=@bSZkPhY-%`}X6<*b%*TwcQ)Bd@h{#jv*kN-;K_Q^*I$e*qd5R0)%J1e-bg=@xVvA(5T zDGjdz4hV>pG|x=iofYWvbtwavK|*WDfj^e#&i{)`R1AMwtYzSGYnCg}J_b)$KbLh* G2~7Y*ABdg+ literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ga.png b/wp-content/plugins/wp-multilang/flags/ga.png new file mode 100644 index 0000000000000000000000000000000000000000..d69f9f9b5b14ad630737f5df1072759b9e40d83b GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQdOQVjv*Dd_V#WSb#fG7P`@!N zqv75Pq4WE8@4laEQM}72pOx9DL*c36#Z9d|k52kj`0UD2oHa-Iyik9%$5zYp*?0S< z7s&VsKa~Bq_AP&GY>8{Zb4#P|5zps^RNfUa^bZzyoclW{JubKQTs?hKjEzWdx&Y7>44$rjF6*2UngHJFL=FG| literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/gb.png b/wp-content/plugins/wp-multilang/flags/gb.png new file mode 100644 index 0000000000000000000000000000000000000000..9d87b7c2d309f7bb95b03a8302d94e5906b0010c GIT binary patch literal 331 zcmV-R0kr;!P)3!Xu|BmcF25B0qSV{2gE-}@73%=?KXnvoFE*}UZ8af9R-)^Jkv?e5c6tPp7W d$ZcRsR!=W3G)jJBNg@CM002ovPDHLkV1jPmjLZN4 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/gd.png b/wp-content/plugins/wp-multilang/flags/gd.png new file mode 100644 index 0000000000000000000000000000000000000000..e3a6a021f56ca37a5800314c0f8b35efa947b3bb GIT binary patch literal 320 zcmV-G0l)rihX5gk9W0oVV^D6clF_ zJx8viKj`ru@kKn403^m-lt?6c>mH+`P{f_ZcdP;OjNDLu)H2$S%p8YNFlrIb%-#Tb zNJ002ovPDHLkV1jCwVG#fT literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/gf.png b/wp-content/plugins/wp-multilang/flags/gf.png new file mode 100644 index 0000000000000000000000000000000000000000..d17f1d3eafb1db3b81a0331bdcb7b409a4d205ad GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQjwl6jv*Dd?w&T}Vlrf4z36`8 z>RX++HVYM3nr{sJvGkCTj_k79R%`QhF;A|S*Th8rJh>@+hUDiBvCB8i*e0ELmH)4~ w_L)7==chJL<|CV%g#yVZ&0yIYg$@u0knj{)78&qol`;+04usU#{d8T literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/gg.png b/wp-content/plugins/wp-multilang/flags/gg.png new file mode 100644 index 0000000000000000000000000000000000000000..7c0a03a32acf3cab959aaf6f0b444e1f1c326c58 GIT binary patch literal 233 zcmV3~&cQ(of*&%&;oC&Zh9a`a5k`)*L9U%6f74jk1U7q7EsH->@2oy!?26grP ztQYi+jtMkzW j+XDy!Ha6Op<$3-C`DuUb4UR|J00000NkvXXu0mjfM?7Oj literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/gh.png b/wp-content/plugins/wp-multilang/flags/gh.png new file mode 100644 index 0000000000000000000000000000000000000000..5b98183128e7f6e9410647825e5606f71d8379b1 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQdyoZjv*Dd=5}x7Y%maE^)GbU zenPKMuzW)qqq%`X#?%byc*U^&9z}QB+2<=?PV%?yy?Jv&Z2UAs-rZZ`y3A6=KKB#{ zF$-HuyH9h?x{{)4=v&d>=6RgUTxN=pg3*hL6$&Tqy*F*iJgcPdtLa<9c+le%&{hUd LS3j3^P6y|HJ5S-xHw9R(cu5ccn296U7N6m~k|L5Ux zU`d&8NcUD{(L5mxub!nB)4BK*1CGyLwjN26NWQ9#99oF<{KEu zBqlgyR5y3c>oTx;?jYLoGLro&o1l~H@=%F&8w_HS9h?kojU^-*9hSUWJgMsYDxfrhI*r_bEOEyp>^TQFznuPzD|_wSnOXO@#dSSr-|shbRgux@ zOAk-1Uu?2DDm&qy&7UWyd!`yC?we!0@2_-+WXPke`|55g$*--n;?>?LyY|()J+^gJ m+H7NP^MG%A!l#YpT>620^MAO#&s6|AhQZU-&t;ucLK6UGqf4;> literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/gm.png b/wp-content/plugins/wp-multilang/flags/gm.png new file mode 100644 index 0000000000000000000000000000000000000000..f930267ea00f59f9bcbd4615de4cc94f41d2cd6c GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQo)`sjv*Dd=AK(F+7KY%a?$<8 zetoY46N}Rh*2z?zkFi(e)lgCt+j2waNZ1Sot*!*O`_guyQ{%6TIkNHhRFoEU8-874 o;&zHx|A*uad1HfkxBj~|=RP?YY`?os7HB+!r>mdKI;Vst0G~H6`~Uy| literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/gn.png b/wp-content/plugins/wp-multilang/flags/gn.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ef8c08aa515c0fc95aa7fb81df228cb9dfb72d GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQtqBEjv*C{$$!o_FdDQ-_#cdz zzp%q1_jlqNeU;4U#v?yn=50$4xn#ELt=Ot<+Y36)U)*vLQ*!+-KEq6*s(H;1saRX++HVYM3nr{sJvGkCTj_k79R%`QhF;A|S*Th8rJh>@+hUDiBvCB8i*e0ELmH)4~ w_L)7==chJL<|CV%g#yVZ&0yIYg$@u0knj{)78&qol`;+04usU#{d8T literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/gq.png b/wp-content/plugins/wp-multilang/flags/gq.png new file mode 100644 index 0000000000000000000000000000000000000000..8bb314edd243bfb1928a773e744ae63cfdd7ac3b GIT binary patch literal 252 zcmV$B=^WD)%tC^2~a z`mEpjkvw)#;DM`Q0Tzs)s3hj6*nq8J3KJMW$&>UZ#6Z^&+E8#MZ%e|c>1G{hzOu3< zAG@4(*Rv;Ii=rq9f@hX7r0&Z5hVy=J*8MwMubhV;+4o7Ml<)gLGACCP&=JBO$StJR z*a~Pmz!Ip8y>J5&t*RTW=25<*3xkO!D6eSt}0000rHTKq=&mmrF(rO yvW;oJZj5QNYy;V#Y{Q8-4D3%amK<(YmgN^Mv~lG!mlC9y@=!I@*&nsdn6|%Uk0vdV@JYzjWoJbMpKl=oL_`yy ch%=Pw4cxj3i_(p0zW@LL07*qoM6N<$f;j_%S^xk5 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/gt.alt.png b/wp-content/plugins/wp-multilang/flags/gt.alt.png new file mode 100644 index 0000000000000000000000000000000000000000..0e856774cd067c76832681a5ddfddcdfbed493e2 GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQn{Wkjv*Dd?q1kBmDy3i;b2t9 zFQy$TQx-_9c^T(^#%0;7+Tsn-dzY$s9Qbs8>MMB#jh3iMB~KPcS6^P)r2c1s>dA*9-U>`zKtYHs zOi%0^2CzNEYXj>Ey^dYmQy~2R|Ms8DKn4lgc6{Cb=Q0q{sI#14AhyHh_pb^$i992|{F{dR*5rK=eR_fQT#l8YTb= f0;LdoY-RuePLG#NbbNL~00000NkvXXu0mjf9aUP3 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/gu.png b/wp-content/plugins/wp-multilang/flags/gu.png new file mode 100644 index 0000000000000000000000000000000000000000..69a9f98f409f26545d48c7bf7b2efc19551b9e24 GIT binary patch literal 285 zcmV+&0pk9NP)W^PO(XQ5; zgI!xE!v?I8(`(taJu03Bi`0!+hE#?Ih9z)gP|<53!VtW{z;Gm(A&T)bgY^jp_0J4H jz7UnTegc*8Gu#FM48PFGaG-|E00000NkvXXu0mjfFg$}* literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/gw.png b/wp-content/plugins/wp-multilang/flags/gw.png new file mode 100644 index 0000000000000000000000000000000000000000..137de20e960c4583ec828695eb420fbc5adb7ab7 GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQi+}}jv*C{b5Czw=)@?%u%V`e zr9}T&qO8@nD&BW`S51HX{ql2nWzpwQ&wFpbtv8cx5=4Y56>uJ5ZeOnQG=0SOGAtNI-pk)l6u6{1-oD!M< DmkK#8 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/gy.png b/wp-content/plugins/wp-multilang/flags/gy.png new file mode 100644 index 0000000000000000000000000000000000000000..9d6846e8bdac6d1a46944f23f827d6cacf3bd93d GIT binary patch literal 254 zcmVxf2QSYONNsSgwZ|*hV={#ix?RGGca^XO5C|K{r~^N3;xY9y^z7RiGl6o?eh11j-X;*s=wv8IOLjo<_JH zbZdbKuD=SbzZaq(QyZqW==$IMUsJKKOtoK?Ol{;jlFT3>IRe0XO2K-vg@u+cFFJB( z0?^&+bJc<7;Xp7w84L_|u38yeGeD{v7zm>hu%2iJ0PVH&y%5o-(f|Me07*qoM6N<$ Ef{86^1poj5 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/he.png b/wp-content/plugins/wp-multilang/flags/he.png new file mode 100644 index 0000000000000000000000000000000000000000..92f9ad52978e670f66e1578d7b31bd565946c2d3 GIT binary patch literal 191 zcmV;w06_nVP)QXxT9mdGfz#Y(+Ejpt>e--QVswB002ovPDHLkV1nuQRh<9; literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/hi.png b/wp-content/plugins/wp-multilang/flags/hi.png new file mode 100644 index 0000000000000000000000000000000000000000..0dcc86c604fdceb442fb296d5ca21e64abaf86ef GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQgxm#jv*DdmQL8p$mA%(`dnpc z_^*XL8BJ^#WYn$7%cn<9&-dpjOK9X2dpskdp|fYI#Er>kE}d^|?U{LF&&;l)>pRTm z?iZXb_+`()RcfWOa#=4!UgL&%z$hRK?KvYjsYnKuMt=9004dj1ablbWfKy6CntwZO`iY&b@N?a-~a#s0EGYmLJ$yXAt0JqSfpcP zyTD?J>(uu&GOPap0DXPD|8Q{Wg^r}8)3%<=`L@9S)ZO>@{{R3^K|zIxh_RrCwEt>q z|8;fkeW9VD-~XAUy}j|)*75(_=BF_o&j0`bhDk(0RCwA|$b*#xK>$F(-}ZPhJ}dwH z&f0n|mZ9m6UDL1Sla7MJ{mavFejFP8?x931cjuIHdMAW1Cx?}sZ~qGLQgIl@n>;PO z#|1FYwPNjE$idAcegfm9qG%8R7y~U|g*W{As&)$(r6b+e0)RLf)K0|KSGD|dZPi{O etW-Qo#tf;K z4fVQ4izFFccc#rdZ4zsxb2CS9;*?9V#@egwYJcdQy=T(bwZp%r@9Yb+^N+Xn$A8Lh j=R59kx#!57_p{zH<%+z!dv=8v&?yX_u6{1-oD!M<>mW&f literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/hr.png b/wp-content/plugins/wp-multilang/flags/hr.png new file mode 100644 index 0000000000000000000000000000000000000000..9bee1e16037898b8c7389d03bd4e014237805c20 GIT binary patch literal 247 zcmV1H&D#Z68305P&Ir2LQc7NpwNq2=o8|002ovPDHLkV1hL^VqyRQ literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ht.alt.png b/wp-content/plugins/wp-multilang/flags/ht.alt.png new file mode 100644 index 0000000000000000000000000000000000000000..6f258a2a9aaa4f1d9a00bc97f85c7e3ae364e410 GIT binary patch literal 139 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQbC?Bjv*Dd&Ys;W+Tg%&;DW;M z_wBq5yGwRhhfM#se?@{br=*C@bO)~1T}G1UMFSjH`5k+d%bD`(OJ%&-2K&D$L1(wu o6ttw@>icQ)ywQAP>fd>$Z=1E7B|m6C1e(s^>FVdQ&MBb@0FqrbWB>pF literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ht.png b/wp-content/plugins/wp-multilang/flags/ht.png new file mode 100644 index 0000000000000000000000000000000000000000..13989e72165ed192854f0209c677309001df8731 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQnNi>978H@C8s1*oILPhZsS8^ z=ELS}haMQS7&d;bVVoS_>2P16gLQ@In&*1V8y|2B7&2~cisVtrI?Ps7RI+MzYWFLb zMxHfX8?w3iriEUwOG*A_Z4x54d+Ps<3-5PNf3kB%y5+4u@w?f4U-2>@HjTM;ZnuXn zr)ad4TG>h8#tCMJI2QJHHoAOZ>k+thPpC0ZX-nhUy0Zs9bcwJqSkG#Z`<5jIaxH_W LtDnm{r-UW|nfOvX literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/hu.png b/wp-content/plugins/wp-multilang/flags/hu.png new file mode 100644 index 0000000000000000000000000000000000000000..c26d6ddf408157de782657cecece263a34c17930 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQgNOxjv*Dd=AK^8$mA%%aNwsx z=U?xt1#`E%?BsqW*8SU{Zr3K){JpoX#Yx|qExuT5wa?`1tG8c!n6UkI?xu~U&tLD{ zbZc|uvb#~PrFu1<-o7n?9~3!1Px_PZsF&^dgYnu@P1eOF4R3%pF?hQAxvXNnNgJ%VNXx1h@Z5fi;v iSI%#hI#=-J4}<*m_}k*$di#LpGI+ZBxvXJ2Bn> literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/id.png b/wp-content/plugins/wp-multilang/flags/id.png new file mode 100644 index 0000000000000000000000000000000000000000..9b7414b8c61ea995ba6128ed7da204d9388cbd36 GIT binary patch literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQVyOjjv*Dd_MYA-$e_T%>~N>v zNo)g03frE=n}ald{0sMRU+%g-a&aKbXWguc)rZ&I^I!<}4PEc{snRCZd)~j>jCoao V96BKj4g<|%@O1TaS?83{1OPYrC`SMQ literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ie.png b/wp-content/plugins/wp-multilang/flags/ie.png new file mode 100644 index 0000000000000000000000000000000000000000..1473cfbc90cfb37d2f1746f32867f12f5ab4c5db GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQrVs^jv*Dd?w;A2$YRLAaM19| z6QR3HKPM}Bc6QFQ{ByE={!;3Xx67{QZ}3p45}Uzsrq7F^^NDh$nNUTs*Z!?5 z7Nv7QXxT9mdGfz#Y(+Ejpt>e--QVswB002ovPDHLkV1nuQRh<9; literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/im.png b/wp-content/plugins/wp-multilang/flags/im.png new file mode 100644 index 0000000000000000000000000000000000000000..85520cd97a03ccd8cd4888f012156bbaa47bbd69 GIT binary patch literal 219 zcmV<103`p3P)5z}to~gC} z+1YRKu@UWSHlno#+orD<=A_fL6tVzo`q z(>gCI4CfN74d|;wS?Rab32DPb_hotib7K*|!N70`Io{q95o2$_=oLiUe+ZuxZ2%i! VlWnhu;fDYK002ovPDHLkV1hs^Vb}lw literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/in.png b/wp-content/plugins/wp-multilang/flags/in.png new file mode 100644 index 0000000000000000000000000000000000000000..84dc80f599abe52c7ba5143da707990290dd0b3e GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQjMN2jv*Ddwobgvc+^0`ZGY0H zyqlT-o_8PDDahsCs{8ba#loD(j7GkgI~vN1I{&l0+wg9pnR9TSMV#WV-zLvX3QZ$a z1#~-}h4uZdJ1^lpbMdNRbt}<*Q8{jYal%t3F53U){=4?HnrrfZ7oNW5Y<$nHo4@{* m-xS%a7yq~kFK_>LA@{Sk-0#NsFPnglVeoYIb6Mw<&;$TkyH3FX literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/io.png b/wp-content/plugins/wp-multilang/flags/io.png new file mode 100644 index 0000000000000000000000000000000000000000..956fb0a5f21b59bf3c9d149f224904537058d8ee GIT binary patch literal 342 zcmV-c0jd6pP)!D5dT6MW}~d;c05Xn5KdT?FZfsM9k0BQgs>;rt0*qGl0DX?_QdBq&uBu{aNn%rK79*;k2y-tSh5If%LC zQBMDjM$E2;ol$AsK!gUj3@E~IL6H(&KG*HH?1H-3K8inw_8V3GY!}q>hC&liUja~) oIE!z)$2`vgox^#aKens-6D$4-nkF*7Z~y=R07*qoM6N<$f~eM?P5=M^ literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/iq.png b/wp-content/plugins/wp-multilang/flags/iq.png new file mode 100644 index 0000000000000000000000000000000000000000..f49c597d96f650db6894ac7d38096be749696e75 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQW2gmjv*C{$v@6J@GV-r?K)4& z%bjeO+>|OlKRdfM`?|obWj6DQUVc|qc>M6cyF<~v&z0``WSNZ`RGh?uZ@;>p-Kf>@ uq_2N>gOy^80`rO18BJ??W8C?Y85s1L1;xtvpH2hX!QkoY=d#Wzp$PyJbv07} literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ir.png b/wp-content/plugins/wp-multilang/flags/ir.png new file mode 100644 index 0000000000000000000000000000000000000000..a400628645125380c04e5076f3a40caa2c44e665 GIT binary patch literal 226 zcmV<803H8{P)LMYjg`rTO$TEllGcHi>Og}+8jJ`5zuesX%Msk*0R}AVYS3U2 zpT@Ax!V@&YH%GRr!LZx6duN=v7{0mAffwuo@YG2)_l9nXuKN3NzMk_#zL1q=mu2tk z$2TcuQ51q%QH0ih%vs37kT~{Z!djX}kR&*VF-){ABOw?mHDqbZKjd%%Jhi#`WC|qf cDv-l}0o*F50HX_0=>Px#07*qoM6N<$f@s%Yp#T5? literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/is.png b/wp-content/plugins/wp-multilang/flags/is.png new file mode 100644 index 0000000000000000000000000000000000000000..ae601841979aee95eaf1be2b30ed070be4b210ed GIT binary patch literal 235 zcmV?0kB@T}s5T`l zeMvLB-f)4v#s4U+$N`F1PgX##HCq@e-sl}4K=eppVY1JVYzZ@>NQI#af~TR9tJ lmesh*assJLd$O$d_yVr)^un;)G;{y}002ovPDHLkV1hg+W^Vuh literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/it.png b/wp-content/plugins/wp-multilang/flags/it.png new file mode 100644 index 0000000000000000000000000000000000000000..1aca53e86746d5f2d6d59d09ce85a44b949a9f06 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQlXwMjv*Dd?w;Pt$mGbtuwl=c zBmcS$4xA26SAEB)`tq{$3Ky<~tr0sfnymY()#>$Zq3B+Z)R)D^d!4@REXc6`@m);Q r&fIu@v=XBe$NKY+&H5g{HrvEDu~Or;HQyOcpal$`u6{1-oD!M1I$*%zvV1vT z#R?gvl-FiYcpgc9$~5QA?NX@aNoZK^crmtO%e7nW$L@5doqN>U@n(yFRYAI)c*xc% zO=o2uNTzu!-^y_Dd;8!2S9p^Af@`ya4qZByW@Y(Y;_*hS4HvitB~`C*?iRDj>IB-# N;OXk;vd$@?2>`#5K2HDu literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/je.png b/wp-content/plugins/wp-multilang/flags/je.png new file mode 100644 index 0000000000000000000000000000000000000000..6a987063acef7fbe73f8424f31c9447207a218a5 GIT binary patch literal 270 zcmV+p0rCEcP)eWp*aQTwAtA&mDXx)`|AqjcPSO%F0i@RmlJV0B=b|K~#9!U5(WN zLs1CD0zAEDb=!Z;y5|p$5i>vZ0$C=2S^*{*Pe2e;n71D7W$+z~n77^aj81 z{OZ;V58F+-AmX(SiFI%6E^jo=nYmK1=JnKioh;4`7ti|$Z!}zRS^v3b*0IT~KsOb#mWW=Sa*%gZ-A-NA TkVoA>FEV(#`njxgN@xNAy}fa- literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/jo.png b/wp-content/plugins/wp-multilang/flags/jo.png new file mode 100644 index 0000000000000000000000000000000000000000..4775ff47212fc3dad4fb740529ba318ce3101be5 GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQVpIijv*Ddl7E~(pm5s3>Ic6Y z>yu38MR!#qf6I%iPFT*{qNMciFs}t7-V=fe=M)SlPnh>K!FH*Ex6@?_iK+u?58VZ9C3$$FeI;FX j9jub-a8OOKy~x8LCwR5LqTld5&@Bv}u6{1-oD!M<9|c1K literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/jp.png b/wp-content/plugins/wp-multilang/flags/jp.png new file mode 100644 index 0000000000000000000000000000000000000000..c29b60b8fc734d486a05df989f8f649c2c88959d GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQdyoZjv*Dd)=u>1I$*%zvV1vT z#R?gvl-FiYcpgc9$~5QA?NX@aNoZK^crmtO%e7nW$L@5doqN>U@n(yFRYAI)c*xc% zO=o2uNTzu!-^y_Dd;8!2S9p^Af@`ya4qZByW@Y(Y;_*hS4HvitB~`C*?iRDj>IB-# N;OXk;vd$@?2>`#5K2HDu literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ke.png b/wp-content/plugins/wp-multilang/flags/ke.png new file mode 100644 index 0000000000000000000000000000000000000000..5662313f110c46889d7fe08d62f7f905d9981e45 GIT binary patch literal 262 zcmV+h0r~!kP)=rd4wDUgEl2?2yQ0M7`Y%Es#ie*gdg M07*qoM6N<$f@IKgH~;_u literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/kg.png b/wp-content/plugins/wp-multilang/flags/kg.png new file mode 100644 index 0000000000000000000000000000000000000000..1dae46930317e3c06aa74a93ff1e42b8a7f97e8e GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQdOQVjv*C{$v@6J@GaV9CTj5L zn9^6S*=8Fqg|+>^eqe=A>~m?hw%0edx;C1wVN)_t=2~yo651{CFF*Omd|tQP4KYf& z(Jb4Ri}r*y@4R!wN@x-9er3bEk(}I=#mKjHuY literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/kh.png b/wp-content/plugins/wp-multilang/flags/kh.png new file mode 100644 index 0000000000000000000000000000000000000000..2ecdb231d7ad01ff1a5ec886bcd414f89b1a0253 GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQu{nz978H@_4IDtd6Odw1!4y9O--wqFN0*00^)yot$x!L(<6 z?uN;=m$%>FRB@e+g=x)?k8P6{O}Jet^ntlNfgJbIQ|o_XTI zX@|u(ot=AMf0^b%1rTrfrt{}#CVFV7Y&)yo!WzxDvq~e|LS~XjM{4e(^X`4R;o_Te v1)1;UKW4e6o!GdvU*E;eoMqzjx5f<3yxT<5R95o>eZt`B>gTe~DWM4fO`~LH literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ki.png b/wp-content/plugins/wp-multilang/flags/ki.png new file mode 100644 index 0000000000000000000000000000000000000000..c22f6dbad7ef39b06940e0148dd2a50b7b15bb5e GIT binary patch literal 330 zcmV-Q0k!^#P)UEueXKFsDr(8_=PE2?l@zApn>GpbeM{#J)yAG8m4bEU`p@R^WyP*De?Yj*)^u$3X!M z-VO(FIlK4u0N$TJ7lJeo3Xa!&HfA|2!H})$8s{LGe%YUY%=M%0+;#GwT$1O#x7N~K zbwwnA!Rw$sYhxI_jrOz2?_?vJ_#Ig&&ZgM(Z(2%;A*{7#t;mk9cs@m-ngb3Q8O;e6Ayd zL2JoXf*E5J21ip<#w(J`=5y7)L<~Y(lgMbar?vJ)98E2_Gsu!W&x@jv$WJrkYUPF~ zLax{A1;PH!^_Gpel<)$rCGscL0Tq74nKhs5(CIg^>00000 LNkvXXu0mjf6bOgB literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ko.png b/wp-content/plugins/wp-multilang/flags/ko.png new file mode 100644 index 0000000000000000000000000000000000000000..6340e9176c8f47e2c1bd8f4c91bc0fa8fd582233 GIT binary patch literal 256 zcmV+b0ssDqP)FINn)|r`^4n(g1b97xQb$NMtwY9Z-9$l`k zt~5H8ofk;46Fo^uNl#Bt&lxvXR#xy7Bzck1f3i=l0001INklyb8+3#mH<0KHZeV+vxYaRR`3ia9BGcMAbqW0rLfJVT4su(krv z#%NCt&ql2kG3SVo_wh;IkB}Xq076slLbV{&1cG>>W;y~%69Y>O4uQb{0000So{o literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/kp.png b/wp-content/plugins/wp-multilang/flags/kp.png new file mode 100644 index 0000000000000000000000000000000000000000..deaa0ad7f82dad2f3e8af534c25d31d22e4cd5ab GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQj0xZ978H@B_|~O@E23^zy1Hx zrT?z3|C5tDT^BA~|L0EtZ(!(O`}%+X_t`Cw(d)ivU=ZV6xTxhwy+Xy87xl5S9TTUy z&Dr*+W7V}{Qv!(;M)`0;SO@vKw};qb+Hzb zQ<-h{m!C^XL`72ae{fJoe}lA~T)T{nL;$Z+N1lO!OkzUB@rEVO*#tQjrL!??^WvJe T>AQYA(76nru6{1-oD!MFINn)|r`^|8sN>M6O*bb$NMtwY9Z-9$l`k zt~5H8ofk;46Fo^uNl#Bt&lxvXR#xy7Bzck18=IYe0001INklyb8+3#mH<0KHaZV=`i=aRR`3vN_3kcMAbqW0rLfJVT4su(krv z#%NCt&ql2kv6P6A_wh;IkB}Xq076slLbV{&1cG>>W;y~#I0H$T`T;Be0000Bc_p_U zXo!QSi(^OyWAEvsjE5O`m>s;^%x>1-G%&t@T;tTq@2 qhCRv2=LIkERV)!cwInjYFY3a3es86BmgzvV7(8A5T-G@yGywo&^ia0| literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/kw.png b/wp-content/plugins/wp-multilang/flags/kw.png new file mode 100644 index 0000000000000000000000000000000000000000..7647e96278842a4fdd40b5b82c3b4e2495b1a7ed GIT binary patch literal 181 zcmV;m080OfP)gqIc8#ChGAiBuRL^>b+0blfDUW_h#cJNbF{I6Fj1CfBh?SR$SYP zF3&2MvgW3&>24UYps(!Q-7sXyK*8~CBgPm)@KMe=rSxapm_0oOnM4Il*!jxgwawVl jD62hcx4?!I^)K5UgP%b;@`NzJ00000NkvXXu0mjf=}b+|uj-GG_H` zkK_+T04`llcb}A%t^g`l>Ux`^yV9{>h#E_ODOrjC|Nm&9d_`}Xy|>SPoxK0!;NqZ5 z>F?@Z@4UafjI76#047cVAVSW)X}$me0CP!1K~#9!Rm_7GL{Sg}(Bw&LtN-%W*0=BR zOcH{rSdc`9DG|Qr8OXaTPlh8%Fb42O&dAOwFn)L`t~3hv;5;yK&P@QJAJW6@%pcGh zfQ|yCrDXiS%JylJZM`}tgqKU_=}ENpCk!;Qb&(Sa8re1>5`kS8uL;5QWB>pF07*qo IM6N<$g7mqJP5=M^ literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/kz.png b/wp-content/plugins/wp-multilang/flags/kz.png new file mode 100644 index 0000000000000000000000000000000000000000..9da5cdbd584ed09ddee0c417a4a6540ef2d68a0b GIT binary patch literal 272 zcmV+r0q_2aP)=jNq<>;J16= z!gJuxY~a>8?f+Ha^IF~KK;Zv3;Quw-|8C2&GR^-kyzDBg*Cw39B8#pbd6@RyIfnoM z0A)!;K~xAG1;7E0f=~(DWttktr9I*QOY=NYYY=H$N>Ay|@kmMi! W(jJ8eG#E$#0000gwotN;A4XJL?J*{b;FXFp3r%&9Gb?>vl}Tb^9l yf9}8rY0G=}1Y8VkIda!GII##go#$a=W4N*Grp^V29UFl5FnGH9xvXV1oZ#%DZOjCOWZD2 z!Rz+9bnC`ds%l;Z<%PF(wlzk0MBF~oE!^nU7{(a*{^z};+r@-mp9tSS|NMR{^~&r+ z&;QF8{OFxIQ>CPN;zt2t;i4P?H**PzJ_Ca_&2Hu{9Slw{W*$7j!4Qzuu*j}0trqA` N22WQ%mvv4FO#mFiR(b#c literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/lc.png b/wp-content/plugins/wp-multilang/flags/lc.png new file mode 100644 index 0000000000000000000000000000000000000000..6323bd66cd15d46a099b77f7e64592e16c6b0dfa GIT binary patch literal 242 zcmV^(a!&R%+R;}1wyzFJn|7_d;Z{YuTkyw8oN zwS0hiUSD8YM*t5G54)Wt)5AyPybJfn0RP?q#Vz+H00014Nkl_E?U7w-q}FFnm~MPPX9A294LOuRRPJpcdz07*qoM6N<$f?eWltN;K2 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/li.png b/wp-content/plugins/wp-multilang/flags/li.png new file mode 100644 index 0000000000000000000000000000000000000000..43e1f72b0eafc0d06e5e75b59c159f7133c10715 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQq7(&jv*C{$q5M+JZ|9<5`IFB z-!^W_NlAz}$8eqbNjIl1L-)JGT@R`vW~3WBeED&MZB0h1PXA-}Nm@px4wh>;mMx#o zm}KfAEg*P>?b>CAt86CBD}Q{{Yu+9<(qpxBbYuO|8D?{7%c#R z0RQR$|E&V%i5Ki$0RMgfj(Y&gmj$|L7S^i(z9BwzZveoC3CcD%0F40Zy8vQc0IrJw zoo)x*%mA)=2%)L>-_u z)zJ5euNM!<9IBGbqG+ zaRdvX_XHdPziG+I^GsWxx)satdS7pDz?{=lal0iTpsdL+_Qm1Q+lh`Qut|CON^kGE zQdz?#9WpzschJ(ZQ&kV9eaoVbm~>xSn%+us@|@EN_8~STmU*qH&^ye}XC}T{PfSR2 zv!N50YoVY3l9eSXDW14EL!6NCb5L1dH*_{M#H-*fJe(ebgAEPa?S%gi-tFyKTA!Sx kp{6Dr0W@N!`dcyZ35Vx=kjZGFu>b%707*qoM6N<$g6nyIE&u=k literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ls.png b/wp-content/plugins/wp-multilang/flags/ls.png new file mode 100644 index 0000000000000000000000000000000000000000..7409310d6b19228b4efe3e716132d8420b80fb52 GIT binary patch literal 279 zcmV+y0qFjTP)xMl-G+DxdnE1Pn5b!k64JL~7mQ}`^&Uk=g}+XK}G)U!OF zVQmHXhg+L4HEh299%u=K-~y zT^9ZS+XGBXps1>oVXizwF9TfLf1n1Sg+LOgCEdXc%Nc+OMH?_Az=81*h_G4$(txRr zpd~o9;j;vRz;#4^9D#zXn+a$zDuU_BU|;}RB9OlTq%^bvgkm#*5z7TK-MxZ#%cD>FIZd*bbFRi{N3&a{ZwyLH3=CA_AdE4KfBJL_32h|#~SsGZm2a`HIPYz9wPKbLh*2~7Y4i!&|& literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/lv.png b/wp-content/plugins/wp-multilang/flags/lv.png new file mode 100644 index 0000000000000000000000000000000000000000..5d38debc8dfff2308d1795a17b9c9fa43e4e3634 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQrVs^jv*Dd=3d+?>TJm4aPfPh zW&b?ZJFSwdJSIAY>@>TxIP8w>LB|6pCX3u<65*L*d(7xCXMzjja9`ddk&`n Pt!40Z^>bP0l+XkKkhejM literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ly.png b/wp-content/plugins/wp-multilang/flags/ly.png new file mode 100644 index 0000000000000000000000000000000000000000..cee89a8dbc69734e118d2e55c03bb7eb4ffc028c GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQtqBEjv*Dd?p|0Z$)d>9dQkA? z{=?c2N)$F`f7o#1@BVb9V=8|#CvDQd?qr;?tahu|q-W2!92Ds4-2P@+|K=rnb~CS7 d^_{Wx=ARR-Zowe8&J1WIgQu&X%Q~loCIGm6Fc1I$ literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ma.png b/wp-content/plugins/wp-multilang/flags/ma.png new file mode 100644 index 0000000000000000000000000000000000000000..7bdeea61d7bf376fa6daa133b017a4d07d282b49 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQX!r$jv*DdlK-4{;7dqS;Qym8 zyI0BiwlrH?Hcv&*6ecC1t+GZbGahrgIIwkYGj(MUT-o;|p+b)t$T!PPVdIqi_>HYc m;MP5%#=J$D)x11~K>`eoUb7yg{x1Sq#^CAd=d#Wzp$Pz~t}6)u literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/mc.png b/wp-content/plugins/wp-multilang/flags/mc.png new file mode 100644 index 0000000000000000000000000000000000000000..1454ba102a0fd63a305b8f5d8b038d01209c1cc9 GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQkI@Bjv*C{$$!o}@GV%p?RrW^ z_2~m2y8hkz_g~%j_U-NKGpVUjwwZM}Q%v-wq{GrzLHK;aEO@G)y6MsF>CVu(Je z<%0TxFZd)Gwa~?@+KYIzH(#?$P<;ORuLM1-J*j2G2fP#GJ^Nz2jEe%#1<{_wp2d?T zvb5NG?c_OYC9A8gB$7+K*POcCLOJ{tS5|9j0YBN9WyQMto3mFudVAYA)xAZ&W|rmI zP}fIW)lPPg{qjXNnPsrBdhV=O<>u(X^eZIJ-V$ti79;b|B=Riwtm?}GXYhv4<1R5y v|0J?`@*Vf9FMA7}-rXZH9>wtSH=bKJTw8zj4|GFx00000NkvXXu0mjf_#%vT literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/me.png b/wp-content/plugins/wp-multilang/flags/me.png new file mode 100644 index 0000000000000000000000000000000000000000..f0fc285bf28a6e55c993bda8cb2d8e5a94fd645f GIT binary patch literal 338 zcmV-Y0j>UtP)Crgo zuvX`^O6QPQ;kZ5JxGm(LKjNA(=88Dour$iGKh~fLr=)bes$QO`Tjg>=>10mmSw!hV zNXm6b;cPSEX)54DCf;}`-&rHpTng1y3Dr;s(m)03JXYv7N9HI!2_Ko9`H*}W?b@u*Q>{r~SX79@dk>r5m7 z0O+=aVgGeWu;o2@Ge%w2oHf)Km)^3)x~{R`+Pp6Pna5w9Gvkp&M4LC;oSWP1(Q--= z5#iYDbgKOTBxsA*gU3q?(7_z@B^}m}Gf09F?_bApR3Fa(-4dFt7(YIvUK;d18ZI;M kC(C&ziuf*yP$dEd|19J?7$Q?(FaQ7m07*qoM6N<$f_i|E6aWAK literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/mg.png b/wp-content/plugins/wp-multilang/flags/mg.png new file mode 100644 index 0000000000000000000000000000000000000000..0d25079b0f9466e36434a6b830a4899f8258a5f6 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQm&pZjv*Ddl7IAbN=R@hS!Gqb zwrw-#;knM%Xx8?W=SP4(vokZZFtcSt-K~8M0#3K1B@!x*H3;8r%4~jJ$;!+#Uy?(K Z;e`G7&XsJZHGl>(c)I$ztaD0e0stITC3FA) literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/mh.png b/wp-content/plugins/wp-multilang/flags/mh.png new file mode 100644 index 0000000000000000000000000000000000000000..e6fcdb90b9fc3052b18afc33c1b7b8387c7b46c7 GIT binary patch literal 323 zcmV-J0lfZ+P)kU0P3!50u_002$^0G0p% zLhkPPFA`fKB9u)YQ*SFlK|z>~H#AXEsqbD6va;I1zv9-_)!*OtvPUNk4SAJXV}@mg z)m0hVcT4JhG}We;?8B+*MA3e3xI0nV{|YlyAl%PW zQ$5IYrTCdZ50YA(HDiF{E^^pQFDAUe>se0rCv7nCXMq|@xpttchlvweF5oJX(Uqj% zK$bcM7gk%K88?_Zct!+EvjnTA@#~002ovPDHLkV1f;Yfhzz2 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/mk.png b/wp-content/plugins/wp-multilang/flags/mk.png new file mode 100644 index 0000000000000000000000000000000000000000..d7282d9f1b92ccf6f1cd989f567cdfb3043dd6c1 GIT binary patch literal 269 zcmV+o0rLKdP)7^36p=PCi}Cj5eJXFpGO7`!o|uW7 zoUfCNvs@80REQI?Cv5k*%5RTyD4Wylst)W#fNz%RJ$>>F&gpTSjyBpab=&dm|B{z~ zmF)IQIy}IFIfCemN6kuertxc%NV!^B+D-=pMG$r@D-B@e0Hf19TIEoA(5^X?P17a>-&9jzS~ZkCwNAvL@3XU_aTyG3Ue oc9v}QVtw+bXkK)WzHSl2f~RUC(V;)S0!?S|boFyt=akR{0G?hkyZ`_I literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/mm.png b/wp-content/plugins/wp-multilang/flags/mm.png new file mode 100644 index 0000000000000000000000000000000000000000..8f5785b9eda522ff52703d369207dfaf2fc50ae7 GIT binary patch literal 225 zcmV<703QE|P)UR z3=i%y=;6}y3a%|C=F^cQ|F>@aUtj-IQ1A&JZEqMDt|8mj(eZ2H!v7HwpWwC;*2c>E z2&fZir>N*tpdP~78W|Q>GtA0i=s-hX7-aBi!xLQ8*T%v?B6tHvOmO~NBG64VZLfim bND2Y~qZrNPS8E6N00000NkvXXu0mjfR9Rtt literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/mn.png b/wp-content/plugins/wp-multilang/flags/mn.png new file mode 100644 index 0000000000000000000000000000000000000000..db64919b0fc7f790a3b3cfe6ca3d668fc784cdbd GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQjMN2jv*Ddrk+;hJ7mDn`cR)c zOOBb*k*P^JVcE<_JaZV&UbSH6V&&{JS^bFNsE*>?tp7HjkEqY=Gr9TYGK1I~(Wx6{ zvs-!VuU*#GOk1-wG>$nu&Spo*Mq%k`GOH!5_*SHvzuWre^t7py*x1qvo++z6bC@Dt lY`p1rk3DrQ`6g^t{EO_DF|hKHibleF zNHc!N(JNwL00000 LNkvXXu0mjf&i!QV literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/mp.png b/wp-content/plugins/wp-multilang/flags/mp.png new file mode 100644 index 0000000000000000000000000000000000000000..0041e3c9b7f62aaf3079f57f68fcff30bf692597 GIT binary patch literal 315 zcmV-B0mS}^P)KNC{>t`t<83HlOI5I8#rTYkc%u_qp!Zhe~@4`ahloNl3{7tb;s#-av%u%GA<4o#T!G004VQL_t(|+D*;_76UN=MbX$8yXO8^*gy4)?@`F@ zTDiY`w_v2J5I{gEt2 zLNqh~#1yI3CHzq+dvWJ7zQ}hG87g)~h$znle@km8o7VEY5J>(7SsqMH3_b<+lJx)p N002ovPDHLkV1n5fjxzuN literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/mq.png b/wp-content/plugins/wp-multilang/flags/mq.png new file mode 100644 index 0000000000000000000000000000000000000000..d17f1d3eafb1db3b81a0331bdcb7b409a4d205ad GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQjwl6jv*Dd?w&T}Vlrf4z36`8 z>RX++HVYM3nr{sJvGkCTj_k79R%`QhF;A|S*Th8rJh>@+hUDiBvCB8i*e0ELmH)4~ w_L)7==chJL<|CV%g#yVZ&0yIYg$@u0knj{)78&qol`;+04usU#{d8T literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/mr.png b/wp-content/plugins/wp-multilang/flags/mr.png new file mode 100644 index 0000000000000000000000000000000000000000..0d4116d385c8a2e758e91ab9343b514ea74398b8 GIT binary patch literal 212 zcmV;_04x8AP)+t~3lT1;Q$}Oeu19$SJ=pPDYozvqe2h{l58;N5!x~p%`K4wB-d2an7{;TX%mQ78x{}2$hPJaKv&Hw;~004ae0CfNWZ_8MTot@R5c(wj{gUGMj003tAYir^Q z3+7&A5)ynWFOmQNUGrUCG)1d!qWyS@z5oDL<$Q&TVwdWnt(`?}go%$lJd;I5nXj6` z;&*{{i<)+%+JBB?IWBF?p*NL}G`_A-j&)%k9C!c#P5=NxhUXc_0001YNklW4+xS*h30|VYEDZS6nI%#Q&|9pJ^ZEfpe zVMcwsmSha!%+6 zCP2hgpQhi9-%O0O?4;Ik5ZQsSNA6 tg}t$=1$%}~)EOCgUe&DKc?0*Wm%qw=5-Q!iV=Djv002ovPDHLkV1jv7h~NMK literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/mt.png b/wp-content/plugins/wp-multilang/flags/mt.png new file mode 100644 index 0000000000000000000000000000000000000000..3447c25e2359e7740250b35a911b4abe61ac8324 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQqi6+jv*Ddl7IBG8yGxrQpmlp zH@~_nL;vHge~w#hZOaNS&w2S@-d-u_w)O-wgNB!iYu@rQA2!`##v*a`*bxV%3T8Ks x+m3-yZ)J&JC9fN?ljp(JO93}yyJ_Lzx~(V`u1AZ w(&V%Qy{i{>&-r@E+uBe&;E9rM>J)v({1pMQ{qnMRftE0My85}Sb4q9e0KyA7LI3~& literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/mv.png b/wp-content/plugins/wp-multilang/flags/mv.png new file mode 100644 index 0000000000000000000000000000000000000000..b99fc362b725084e7c883c590122b79d278ee581 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQdOQVjv*C{$v@6J@GXjw7C&6C zxTiyU)hE$S+fLYOux^qwoLi&;ER$?Sz_R^!NYo zLjQ*|NpZ literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/mx.png b/wp-content/plugins/wp-multilang/flags/mx.png new file mode 100644 index 0000000000000000000000000000000000000000..176c8adf9673f09363a1b42950d6b9dc93b4dde1 GIT binary patch literal 257 zcmV+c0sj7pP)Sd}kr4DB69~J&(I)|$C;S!+2t9Qn5QInDHv!w{{FayaOc(Vw$INnwE^{P;?cpW?c%!Xau2C{XZMn#?fa7xt17zE-Ih5<6108!a(mC&P3sRV`~39*(b`Y}c5NU%W&Xr#1L|4Ct-%1*ljgz@ zYX?DZFaXd72!iP8=Tv53$nk*c3AKQrYZw5i8i?R}>Nw;9E2m1o9S_r(00000NkvXX Hu0mjfpKNkj literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/my.png b/wp-content/plugins/wp-multilang/flags/my.png new file mode 100644 index 0000000000000000000000000000000000000000..28d97800416e1c3e02ace30a380fd86a4c4dd365 GIT binary patch literal 314 zcmV-A0mc4_P)%4Cv-jCSr~mb|hd2AQPZqGwVvNP1;99bery z$W>nb(pC50xefrL#p8ECK1n+LgJqGQ&F7tZU9qHa_~~c2+qd&s_Ip__q34XpRp63H ztQ{xIo@bJF`-ev3QLBMjp|EW>d%VX_5!iMq6gu%MZ z$(u}ErNE3hXVC93;~es{Sj^-_qi!UE3@#}gEv!u3fyvwL4z`U~r9x6H2IS>({B7Vi zWjYn50=jm)hgJ*BbQzGJeNO+2&s!vu1pVJX9LL>k{^BxbqY-!h1~)%;BLs4ECIA2c M07*qoM6N<$f^cDsX8-^I literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/mz.png b/wp-content/plugins/wp-multilang/flags/mz.png new file mode 100644 index 0000000000000000000000000000000000000000..cd66de5c088b65bf5b63b3b79da3634bb63010dc GIT binary patch literal 280 zcmV+z0q6dSP)dLy`8odDYeO2+EcHCp*|u%l>tS1*(roF@_2GQJ_2S*RAC4&;-@!TN zJ9+i~TN_7S=vUy(0_Sh!#TUX7pwR-wkOuPNGXix+lp%vMrI?_r)~Rw;2nd`+a`h8| zQyUwjyQ!R8u&U2iVZ~3;&wcHkG+qP}nQks!2%~r2&6AZC0X)czi_>PHU$2kLA|TS5i_6)=(gO*F1jzPpZVp+eBP-}*&uOQ}-_dr| z1dGZg#avKDvogYCzq;H2HV)S74CoOL8*aWntuny<{k{XO2({Ektc0K%U#iRfqiC&nY% zW0MakBR{65zXAdOiSw{CI-q|t6AviOS!%rOPmD}vcwzwl)kbn^9wpZhUnhCVXd2e zO6Nh4RoY~rHsgeT2p1DMB)3{cRg$TVOh=L#BrFUhf;V7<(DoLH|NOak=N7~FcaQGh zdHeGxRy_!9|6v@4fB!zbf6MUa$EOePU;X)mT^l&M0Rg=Sw`3X%Z~y=R07*qoM6N<$ Ef{NdH00000 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/nc.png b/wp-content/plugins/wp-multilang/flags/nc.png new file mode 100644 index 0000000000000000000000000000000000000000..d17f1d3eafb1db3b81a0331bdcb7b409a4d205ad GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQjwl6jv*Dd?w&T}Vlrf4z36`8 z>RX++HVYM3nr{sJvGkCTj_k79R%`QhF;A|S*Th8rJh>@+hUDiBvCB8i*e0ELmH)4~ w_L)7==chJL<|CV%g#yVZ&0yIYg$@u0knj{)78&qol`;+04usU#{d8T literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ne.png b/wp-content/plugins/wp-multilang/flags/ne.png new file mode 100644 index 0000000000000000000000000000000000000000..0dcc86c604fdceb442fb296d5ca21e64abaf86ef GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQgxm#jv*DdmQL8p$mA%(`dnpc z_^*XL8BJ^#WYn$7%cn<9&-dpjOK9X2dpskdp|fYI#Er>kE}d^|?U{LF&&;l)>pRTm z?iZXb_+`IHZvX&w00?ym0Db@fh5!?M699|=0G0qDgCQ@DFF=<-Tculcn{;Wg zX@9DJfxdy4%9owbou}2OyUDx0*}kmitia^J*4Eax^S12l?BVv|^8fPn|Mma>{~(iDB*jt6FlFbbE@z8jFf%T*5(6k%aZQ9XX zdoTWeS$nsgDeyXgb^v;G0|wx|{$GFzxXv?x30Q9%Fo3MY24(}}`*Z{COk26`v$rPN e&bF1PNVPtqWm1!083aK90000}9c+#*n6x5AKeeH#$8m|#r*mgql`=&q z`O8iJyZHI(NA~uTE~hp!t_jmFKgRI#>!zPI@BH?}isdr&S{WzEq{@o{?PKtC^>bP0 Hl+XkKZmBxF literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ni.alt.png b/wp-content/plugins/wp-multilang/flags/ni.alt.png new file mode 100644 index 0000000000000000000000000000000000000000..556daf37a93404c76869195f02bd157b14911bf8 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQt6&9jv*Ddk`re9kng(H;jneT zq}P3;C-w;rFIN6`mvH>DWNvE1E5@P@7YEyoyCoNV6IicX#_#+>s_nl@lX?EVnB8T$ z85zpP9s-6QDon3F&N|i5;kdw%MbL%cL)wO|(Fw@v_f=((ckT^a_C9tl&`JhRS3j3^ HP67P)CowQ(n>SRub=Z+@P=4-^WXX*wt{%P*gC{Gj%oV{9wpZhUnhCVXd2e zO6Nh4RoY~rHsgeT2p1DMB)3{cRg$TVOh=L#BrFUhf;V7<(DoLH|NOak=N7~FcaQGh zdHeGxRy_!9|6v@4fB!zbf6MUa$EOePU;X)mT^l&M0Rg=Sw`3X%Z~y=R07*qoM6N<$ Ef{NdH00000 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/np.png b/wp-content/plugins/wp-multilang/flags/np.png new file mode 100644 index 0000000000000000000000000000000000000000..30ab6b3b76738dbed37094c9d59d3401cb31d85e GIT binary patch literal 272 zcmV+r0q_2aP)!1O Wui@6i@L4b_W%D}hZl{O6JMN_ z+nc?5>xnCE1t~6fC*3~3pTYCeAG5-<8~^|R&+NHqi(^uA#chYGDYg<13^`o(gk?_1 pIM}LC<-oCsU8zOh@r#21L$>j$Z|-W%K0pUCc)I$ztaD0e0ss`rN%;T( literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/nu.png b/wp-content/plugins/wp-multilang/flags/nu.png new file mode 100644 index 0000000000000000000000000000000000000000..c1feeb65b578101627eba4648ade3610fe46b8af GIT binary patch literal 255 zcmVQ literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/nz.png b/wp-content/plugins/wp-multilang/flags/nz.png new file mode 100644 index 0000000000000000000000000000000000000000..cf4d586ba5127c18876be6765b4d02ea47e8190f GIT binary patch literal 297 zcmV+^0oMMBP){~8*+T#WzE+5iBB004df0CfNWZ_;U*udnE)ez^aXpw77B6cC620A~M! zg7s`{vp z002%VAZ`EvLh^Tv2LJ#7Z%IT!RCwBjj>Q25K@38H@vKk(U4D1h)4pSZIZ$$>e-T2I z%okW|N0KZg6DtT_0Ih(Qmt{)A4@)iEB)1C|jutOv-Hu!gcBK5;M+C+rz$H#AfQf%z v^qM`jOY{=?bLm>hM5g|Yq|rqC-)6!UpYs(n){&+V00000NkvXXu0mjfMACHr literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/oc.png b/wp-content/plugins/wp-multilang/flags/oc.png new file mode 100644 index 0000000000000000000000000000000000000000..89bf05c2b66b7d36ec20f2a9252f03b934964144 GIT binary patch literal 241 zcmVp9?L8p&N3XuH5$P?8M8AN!6zKaOBTsk6UJT<$Yv19Z4b?W z4A6!P){Y9>oe1vK0Txlcd)q8oub5FlgBU^a3pFKbxWE}|I5tqsKkx1IsO_OK a*cxuV$9c2|ZW25I0000l%; zvblYad4-kS%48ViHm{1^n)#~p`x}{9+uQpreO+e!G>pDJooC&jNe8ETYig>dG<}ZS u=Q}y#bduV0nPe4%p5ngOZ|u{YION|qPI=oZ|8ghLQ4F50elF{r5}E)xU{Ol| literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/pe.png b/wp-content/plugins/wp-multilang/flags/pe.png new file mode 100644 index 0000000000000000000000000000000000000000..ea26793c0b81d687ee516bd80322e29d9f59ba37 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQr4a>jv*C{$-mAYXy`LwSSF>$ z7Q}e-*1ZV}-|B`)OD2R!XT4|^u4@0e)o_WSV~N3J-m0`m QKw}s@UHx3vIVCg!0EQ(eW&i*H literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/pf.alt.png b/wp-content/plugins/wp-multilang/flags/pf.alt.png new file mode 100644 index 0000000000000000000000000000000000000000..bbb07b86c1c3087f8b557c0aa4da852393ee3e2a GIT binary patch literal 213 zcmV;`04o29P)PdWYnznCa(zyGg4H9dN2bqf%kniKy2{|=(GegFTzYx%K`wxwOo z3p&@H!RI$ju<6DJAi@hJ-!TE0qBCwt}Km^zJ8pI)tUcnFm|5t3%;=-a{ P00000NkvXXu0mjfc&la* literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/pf.png b/wp-content/plugins/wp-multilang/flags/pf.png new file mode 100644 index 0000000000000000000000000000000000000000..d17f1d3eafb1db3b81a0331bdcb7b409a4d205ad GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQjwl6jv*Dd?w&T}Vlrf4z36`8 z>RX++HVYM3nr{sJvGkCTj_k79R%`QhF;A|S*Th8rJh>@+hUDiBvCB8i*e0ELmH)4~ w_L)7==chJL<|CV%g#yVZ&0yIYg$@u0knj{)78&qol`;+04usU#{d8T literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/pg.png b/wp-content/plugins/wp-multilang/flags/pg.png new file mode 100644 index 0000000000000000000000000000000000000000..f1a62a3f183156c027c9ba8dde232ae99ebc6ad3 GIT binary patch literal 249 zcmVDsE+z0zGnp_%K*0k9zcEd1gud|5ZFs(Q1s%dBs_Fxi05VP2m@T#wHY}^>^ z;TRk2$DfTANb95Z;L`BY7U_G;HS@tA5+NsKhphDx1RhlD!lBGY3hsJt$P|GmoGE3D zvDSXBiDOG-^OJgGJr)E35XZ5b-8=k`43P;kN1`grvP{i)Gfh*p1YTu4aBE&+7&d)v zEi)QkZnplHwW`n-!hv{>$6GT3NZBPB;AaRseaZI;y2wr8m>l{{P<@ z_%^O7&DB*^N1|vjP)t-s073u& zZvX^z1YM|I|Ns90T>un(6aZ!bZ=G+W(xU)Y0I%4u?Ck6Sg#Z9f04s|ti^Pkj>ZZBh zxz^U!0Db^8kTm1?<06D2p5C5kapD;O003S|L_t(|+EvSi4ZuJE!@#=CO#3hTj254g zqE;PC=q@qz-=UJu&<^mG0CY{Ds)A>OX7tq7B@AauRc*dGJplRfZGkqDp4HPZl_|09 oLsi1KYMT2dq@+-C^`lRV1hPB@p2m-j761SM07*qoM6N<$f_5fgQ2+n{ literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/pl.png b/wp-content/plugins/wp-multilang/flags/pl.png new file mode 100644 index 0000000000000000000000000000000000000000..ac81ef9e3244a40507c76f9a0ea6e0a247add38a GIT binary patch literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQZ}A0jv*C{$$$R;w`YFY(040t zf1U59ZQJwj@2mRSb?%nO*PGF7ZQ(pT%`vxqO>*-)FMMX}Sa9n>*yKgL3|*yGSM6Q% RHUZ6H@O1TaS?83{1OUNeE2#hg literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/pm.png b/wp-content/plugins/wp-multilang/flags/pm.png new file mode 100644 index 0000000000000000000000000000000000000000..d17f1d3eafb1db3b81a0331bdcb7b409a4d205ad GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQjwl6jv*Dd?w&T}Vlrf4z36`8 z>RX++HVYM3nr{sJvGkCTj_k79R%`QhF;A|S*Th8rJh>@+hUDiBvCB8i*e0ELmH)4~ w_L)7==chJL<|CV%g#yVZ&0yIYg$@u0knj{)78&qol`;+04usU#{d8T literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/pn.png b/wp-content/plugins/wp-multilang/flags/pn.png new file mode 100644 index 0000000000000000000000000000000000000000..b44c0f23cc38828f04260646ef322641e51d1f97 GIT binary patch literal 330 zcmV-Q0k!^#P)GVSPqKX4myC97}gIQD|6MVl_ftYb9|uFiy1_Mad;qS{zGzA3mHDJi`?{xfVIE z5;m(5Gno!7kPa(`5GsHTBybKOSz^{@`~Uy|gh@m}RCobJ!0ifxFc^m6`+4_4sIkg_ zQRjbni7OOgGljxSt|VNEP8HZ@m7w{Znvo-Wr* cAmbqP1(W(H6wGh~jQ{`u07*qoM6N<$g2FS6>i_@% literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/pr.png b/wp-content/plugins/wp-multilang/flags/pr.png new file mode 100644 index 0000000000000000000000000000000000000000..fde0a73854215e0dd3ce5ab4a29524eec6520e63 GIT binary patch literal 268 zcmV+n0rUQeP)3{6oTlvNW@XQ8mYT9LBR5-VQnoo|bIi8=UVPdA-E)1O^9j-59sCIVlS5zy zfF)>U!hFL(a5o3HI9Lr2y*qX*LLCZ^0$0$ ziI9`_@0JL@M%&r|s;YixC^xq`GZWJK6l8P*e^LXK0wn;{(i`C-h5m^+Ie-F6l1ycZ SRG4J|0000(bo^eK|u_a`Z#!rf&@eWTK{Hxg~1n|OHUdpa{L&3)^`bKyt= P&|U^lS3j3^P6{2cZjZ7___KQZPNS3=n&uLafCM4SRvAISUKh`1!8@QAS4J|Np#GPBL&;K-7Ts zgdu5jo5k?zH^_$Crb(*WH^n6$F)%y;B46LdK*8_-86uaWYLlD9u;n(?RY0>Hy{_w+ zU-k{Zl~QpbH0=xz?}MK|B_XmWUN9&Y;?Ty+e-9bO7oYt9UkY6trXv#*r;Cd}<>Gn_ zL_kJX_G%1AVh<8tV2}t3UIC)g(ur7u1QHv>M*vulA5dEfJT_2}V=F`81T;aI9#^2Y i9GIRk0tlhUh5-PRZM002ZgJ570000*4Sy%k!Rx@~a+3qO`THV*+Y>edfyMqwjz^zhp83EhMZh zdmhsof8JL+j{vm+?R?ckKpVniOO|kdOx6bKxxG~M>rNbwBs)mJdP+%%fEx@9M;I7j zdeRseVi9PUFwj&C1k#MLfGW@sLeC5a1^~Q=yV(uWm1_V1002ovPDHLk FV1mn0W#|9^ literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/pt.png b/wp-content/plugins/wp-multilang/flags/pt.png new file mode 100644 index 0000000000000000000000000000000000000000..7ace0291076e9603e333f411032ac1b2d6092785 GIT binary patch literal 255 zcmV*4Sy%k!Rx@~a+3qO`THV*+Y>edfyMqwjz^zhp83EhMZh zdmhsof8JL+j{vm+?R?ckKpVniOO|kdOx6bKxxG~M>rNbwBs)mJdP+%%fEx@9M;I7j zdeRseVi9PUFwj&C1k#MLfGW@sLeC5a1^~Q=yV(uWm1_V1002ovPDHLk FV1mn0W#|9^ literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/pw.png b/wp-content/plugins/wp-multilang/flags/pw.png new file mode 100644 index 0000000000000000000000000000000000000000..78904c933f0b2898dd03d6bb50a0a8245a1674dc GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQZqeW978H@B`4H}k literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/py.png b/wp-content/plugins/wp-multilang/flags/py.png new file mode 100644 index 0000000000000000000000000000000000000000..c31179eda584294ab5c67371c6ac797004e90ce7 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQl*|Qjv*Ddl7F0c;7dwU5S_60 zEwALQdrn*b{_mIl`{&$;$J$~a&GRMJ#U9SQy;ZgM`t&UiCmmh+_TzDL{rmMQk+Z8^ zRy(_h>P5Om_}C~}1-vsb*u#G7TYKX}<&TP-VSgG~S4?euC_LlyJP%urTme2uUxU>5 Z3|5{|X@L)v-T@uJ;OXk;vd$@?2>={I67G%a9Gj9aZnM#4)97s!s51j)78&qol`;+0Qn+8ZvX%Q literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/qu.png b/wp-content/plugins/wp-multilang/flags/qu.png new file mode 100644 index 0000000000000000000000000000000000000000..279a7b251d0afa6875b068cbaa52d72d79547752 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!VDzm+I;8-QYryHA+G-!82)Q9{GZ40{~E*p z{|tij8JOm&S>OFHl?{?fW0={(P~G-r<7uFJK2I0NkcwN$4a{PWRht-0A2PgngTe~DWM4fpadnB literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/re.png b/wp-content/plugins/wp-multilang/flags/re.png new file mode 100644 index 0000000000000000000000000000000000000000..d17f1d3eafb1db3b81a0331bdcb7b409a4d205ad GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQjwl6jv*Dd?w&T}Vlrf4z36`8 z>RX++HVYM3nr{sJvGkCTj_k79R%`QhF;A|S*Th8rJh>@+hUDiBvCB8i*e0ELmH)4~ w_L)7==chJL<|CV%g#yVZ&0yIYg$@u0knj{)78&qol`;+04usU#{d8T literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ro.png b/wp-content/plugins/wp-multilang/flags/ro.png new file mode 100644 index 0000000000000000000000000000000000000000..525a8d62eb60df8cbec9bb7a6faabd0fa1f18a29 GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQhuH;jv*Dd?w(#M$jr#VaFF-Q z{p6e(PmGOk?zi0S{^(xen*IOMeK(eFy?ON2JJIg7?=B`u-?ruc5q;P8|Cw%m`M3j* lHzwSAGnfDRYo^_k7>bpRE!09UTLDdG@O1TaS?83{1OR5pHE;j` literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/rs.png b/wp-content/plugins/wp-multilang/flags/rs.png new file mode 100644 index 0000000000000000000000000000000000000000..85185e0a71e1a28eed3d042f099ffadd1630f779 GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dBxwsr&$+5ZC|z|G$0z_3P<#Zw~B# zziQRX^>dy~p7ye-^-gjAvx@lpSwVNA^>0+@-0Bi~XyHqp4yKXj@?mSM$1F_zRR2W+K?7R7!DPZp; zNlC^RRjn2ER@ajo7FP+E?ktjg5bm~PwWPyY*Zl9vbq$>kxzFp&7$!^wnhXT>C%4Ll SvTJhlf;gV8elF{r5}E+JS825X literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ru.png b/wp-content/plugins/wp-multilang/flags/ru.png new file mode 100644 index 0000000000000000000000000000000000000000..88545aeec485d2a40801b3a60951d3c258a85865 GIT binary patch literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQZ}A0jv*DduAVk!Jix%?dQkj7 zSGMAUhvmA)_v+L-|H|bEZrmL@b+>d!Emz&8K9w7HXE|zLQ%%_}`eWWTrY(H>wH1Mj Rx`5^|c)I$ztaD0e0sza4C!hcT literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/rw.png b/wp-content/plugins/wp-multilang/flags/rw.png new file mode 100644 index 0000000000000000000000000000000000000000..3c5f797d6fb0989cd5b478f5ef3f981da43da5ae GIT binary patch literal 224 zcmV<603ZK}P)J){0-nA!*#_{{N3T$Y->Cck`h zb>q(FsYhm1mlc`-&5ZVRaSY**Wj)BwcgR72!SMVujsO3(om@0;crvW;Vq6e)i@{;- zr<&aBH;eku$1z{6DzW5d4m@|8k(=-Ooprxov@d(O^YCx!;L9JXT4w%D&eCSsuyqwf ez*;SaDfWBSMSV8qMce>d!{F)a=d#Wzp$P!g2~02m literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/sb.png b/wp-content/plugins/wp-multilang/flags/sb.png new file mode 100644 index 0000000000000000000000000000000000000000..631b6b55cf949b6f7574501db9d424d38ff6c008 GIT binary patch literal 274 zcmV+t0qy>YP)y-g z_Bj}K?zx`}SQr|JzYi~m2k*~S+_#WrrU6^8O%nuO=OU|qUN`O^*gOaQCyJtvqE8*R zTD?IxVsGc^@%C8G>5X%87&_9DOhAMtDch+q2}Mdpxm0{go!ihMN0SCB6;I7gsJb>|*2U1o5^ YFItnk_g7r)dH?_b07*qoM6N<$g6CUwod5s; literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/sc.png b/wp-content/plugins/wp-multilang/flags/sc.png new file mode 100644 index 0000000000000000000000000000000000000000..f9274e7d1a821e6519548b3a2e366fd115e04eeb GIT binary patch literal 332 zcmV-S0ki&zP)B@E^}sS0 zf157=dPlP?+xXWAfE#9}@(eL1+HIaBhGkhb&lHOkh9spBf^)uRW~v7lRI4-?(C=AH zPr0Vipfn|OHuL>c%P>Zr4lNcAn9{WW(f4otQd|OXKc8;rev*7e!W-e}kBc`Rf& eLS6?evyC6e!z#$Tcz+Q90000`HIRx>d8mPFJBT-e0V;FPj=A@6Ceg&RTUd%8G=RNTrvbCi*pf#|ci zeCNK=v`A)0m)IP!CTt;Ag$zq+O3`n^S_&aiT??XpUCfb>6$|K kyf?*HulsUOi}5|gdC7=N`;fjz572xDPgg&ebxsLQ0DXI1K>z>% literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/sg.png b/wp-content/plugins/wp-multilang/flags/sg.png new file mode 100644 index 0000000000000000000000000000000000000000..4cb28e7e0d30638e8036d292d3260495bc44a954 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQWHE~978H@CI2|j;P&d(e|5h< z`kI_c!fpayjt}hxUc73$!OHsI(xT(?wuFQKLsvVj3Jz+BnJ{zopr0QB}! ASpWb4 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/sh.png b/wp-content/plugins/wp-multilang/flags/sh.png new file mode 100644 index 0000000000000000000000000000000000000000..9736cac6356d70150e037c8373620653e2377166 GIT binary patch literal 313 zcmV-90mlA`P)OlBq?ZSP+3hx+G|m# zrc9WKY(~|qAibK$@DICSW~Ij`zk1dzTO(C1Vw1Y=(zGp|z5gR_a!}b_GgMOheDRu}J_sv*Ox4c~bSC*6i0>!Ot!Vlt+5a<`;J+4E(c%NMW*}4X>6cxi!00000 LNkvXXu0mjfW!!%1 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/si.png b/wp-content/plugins/wp-multilang/flags/si.png new file mode 100644 index 0000000000000000000000000000000000000000..0b6909f2ca29d65309d04041c331d1a93eec8da8 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQf;0tjv*Ddl7IP&B_t`xF36aD zt@7@zs*{s4%Q>>DKR@Gjy1n?deq_WExw{p;@#k-E&u_fd&@-8b=eLB!v~<>YEVtyI zZecxfth-85LQ3G)mKO22J0Bw&s~IzIHFR_{E@=1{QLtP q3*YJrzEE?LzLAxXvR8?fks&B$V;<*KP7k1q7(8A5T-G@yGywqK{zwS` literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/sj.png b/wp-content/plugins/wp-multilang/flags/sj.png new file mode 100644 index 0000000000000000000000000000000000000000..2422a9b536110065491b207fb7a9ef358bffbafb GIT binary patch literal 254 zcmV9wpZhUnhCVXd2e zO6Nh4RoY~rHsgeT2p1DMB)3{cRg$TVOh=L#BrFUhf;V7<(DoLH|NOak=N7~FcaQGh zdHeGxRy_!9|6v@4fB!zbf6MUa$EOePU;X)mT^l&M0Rg=Sw`3X%Z~y=R07*qoM6N<$ Ef{NdH00000 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/sk.png b/wp-content/plugins/wp-multilang/flags/sk.png new file mode 100644 index 0000000000000000000000000000000000000000..cf7d7f7fdcd11684b62dc0995cdb857ac19e6414 GIT binary patch literal 242 zcmV*X2qA24yZVKf!AMuzQ;=h}j|K7$27&khL{ syz>%FK4xd1cnPMV7u*1F4kusv0+DB3*R766UH||907*qoM6N<$f+t67c>n+a literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/sl-wrong.png b/wp-content/plugins/wp-multilang/flags/sl-wrong.png new file mode 100644 index 0000000000000000000000000000000000000000..7e168acf5031bd05f82b4df1b738288c9babbe9a GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQemDhjv*Ddu3lKm$m}TMdeQjh z{v!)w(?s2D?eo^x&$z>4aoLFDlvUNK`EOLF&vJ{|wsdOV_SqbzvEr^9`DX67yIHVI tc)@aS5uGbrW=hTa!ngGF={NT_SzlsxozLEWPy%QJgQu&X%Q~loCIAFUH6{Q6 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/sl.png b/wp-content/plugins/wp-multilang/flags/sl.png new file mode 100644 index 0000000000000000000000000000000000000000..1187e5d5950e1d010db3dead7bf3414ba96fb571 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQZ1e?jv*Ddl7IP&B_t{EAK;yF ztMKfptdEaYZs&~p`s%87%eGHH{+5+lM;G@$y#D#w+1c6G*D=1eK6zk6e`8{0*aN=> z8B;EcDM;(TN=?Xc$ha&NS5bI8ne`p(l1yeLJ+=vQL0c6C5_A7cdN}7xNHj1y746x} osNAw`yUT*v1-S*b>pdJ9R?qzNBJ{PSKF~c3p00i_>zopr0MLa?=l}o! literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/sm.png b/wp-content/plugins/wp-multilang/flags/sm.png new file mode 100644 index 0000000000000000000000000000000000000000..8045e2b1d1b14b05e6149a9eb16965f453b54595 GIT binary patch literal 257 zcmV+c0sj7pP)+@zGo;hXb zv`vdkj-B6tMVr&f|91QSn=eNopXrnPXXQ1oomRbgT2*Vdb=_ji#Ryrw-Zxr}H?U}n znB9>u?__n6VP%{`O!GYJ`uRXX!rB~G{VzW7zj4x{s@~h+{MpWDG$B(W8{Hj=^#tz*~-YkaA2~r z@(m~bFs-e+FYl-GvsFAizjKmt{jPu0d{&;&VC;9Vi~e+aRo9%ZLk|6GPOYdgxYLxX zy7OVv_iIT9_lo7_2JP5YY+E?HC-b=VqhpJTDj&qJj=B?bqh;b-fw$9ApR`49NCM0s literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/so.png b/wp-content/plugins/wp-multilang/flags/so.png new file mode 100644 index 0000000000000000000000000000000000000000..6fa8974451fd00efa6397558069dd754356f4525 GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQj;Bj0gn-JfzR zSBaZ%f9G#~x&P;<|2ze@4vI}2i;ibJt7q$wQ)u^Kxw82B=Pt%1{$(XU_yi7#Tz_4= z_-cXd@@=O54jnAHSJnS3Gb>DwxZTz7_?1CY#iHn8>li#;{an^LB{Ts5 DKRQi< literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/sq.png b/wp-content/plugins/wp-multilang/flags/sq.png new file mode 100644 index 0000000000000000000000000000000000000000..6ae9992f1ee5889f58d72f56d63af474b3f9330d GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dBxwDYF2d5ZC_(V*j;-|EmgoQ4x5g z$bVLj@3buM9%{ZhZ5GYqWhyKmbrc<`qD`)>A_2bEX&w|EM7w3=0_vN}w*zyDWBTBmP|CeRWFPgg&e IbxsLQ0D84T3jhEB literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/sr.png b/wp-content/plugins/wp-multilang/flags/sr.png new file mode 100644 index 0000000000000000000000000000000000000000..af9f2131f7e47a3b1ce1c897b0824763d71d4b9f GIT binary patch literal 222 zcmV<403rX0P)IIMGz0-Av$`t-oT4^gziEoLFv%3L!}i>ng$1b!rKfj20wm7GW?gfqJsbq zCVuBYWds;?=@U$#%tbDN&t<8 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/st.png b/wp-content/plugins/wp-multilang/flags/st.png new file mode 100644 index 0000000000000000000000000000000000000000..9b3cd12af216ca97611caeaa5151d2b4a0a34734 GIT binary patch literal 231 zcmVn9{2m?9VbVd}mB&e34tL!1O{I0sxSV_QDx3&k+Cs002ovPDHLkV1gr zqx$fHg5HPrejj*yE*zX~p1&^k@WQvJ|3BaT{XO%d^Y!y4EYq!ya(y`E8h`z~Neg&6 z`fRL<{(R(|)2CwW;c>mJx$&U@^D09Y!GQCEY;C1H9)=aY93>oU(%BfC>LPfVZqEDy Pw3ort)z4*}Q$iB}bLc++ literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/sy.png b/wp-content/plugins/wp-multilang/flags/sy.png new file mode 100644 index 0000000000000000000000000000000000000000..55b026500fc5bc7aab3ae02ed68955b6f19381f6 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQsJI1jv*C{$v@6J@GV-rEj%To z`tX4Q-X*;*AD(@Doc;XV!tC20>YVRQwMm)yZ1>sA^ZcAMsy{!wwKe<2t!Fm#h3oC) uBA5KBvJ6mfGZQ-a_;~+$Mp?@qMuv(fLN|ABy5|72g2B_(&t;ucLK6Vw7&|fm literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/sz.png b/wp-content/plugins/wp-multilang/flags/sz.png new file mode 100644 index 0000000000000000000000000000000000000000..8d8c6aee1f2d653229563b01a4f37ca69ed3aa3d GIT binary patch literal 328 zcmV-O0k{5%P)-5{ni`lmLbjQK0Y%#`Wri*Z23;M!w3>xNY^>kG z0I2zpD<@DYjDZ2D2SpoD6etHoK-Hn4q1ib(K+QnLmMvROoHzm0S+2+mL_lRI+SXcW zG|fLY-N+KC4X6j94Ge(VfErr*H%-cEM$xv2PXs6gB!NOeoe*^9%o&IyAztY7%L1B< z(1sZ#VPMTy=Fi6&Bwz3O0uk{M01W-vy@m|%7>w=RLlA{EuJtRO>y+He0MP>x!jIs3 afCvD*QaKTQScg#n0000XJ8PMeqgD(>eKo-Igi`x;~n$@Z#k@*I@M9?&>;mY&8u!Zl{NW= z4son`Zos_BkVVkvycOFLi9LP{ieJtoBrq^k3jgt0F2d*rw1~me)z4*}Q$iB}%pfu- literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/tc.png b/wp-content/plugins/wp-multilang/flags/tc.png new file mode 100644 index 0000000000000000000000000000000000000000..fdb3333a131f0cd8923b91173aa0eb33a8ea3f17 GIT binary patch literal 312 zcmV-80muG{P)<|Q002k;09F71T^1FV|HjSlV`efeZ5bJV6%u;?e1QM}epX0d)3q`SOiZ+|n!)O`6952(J2PsvvO4R>YWS@- z|IsUpVwRhCwdc(L2+lUQ0001cNkl*8Ml(a0?tjC4j}#?NE#Icl zzs$O8viC%G zjCEVbLqo)GiRkg^%q#BqgiBT8k9_GjBH5)RfzUrGDK}ByNaP!eoCo$4UwH2T0000< KMNUMnLSTY-^naQF literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/td.png b/wp-content/plugins/wp-multilang/flags/td.png new file mode 100644 index 0000000000000000000000000000000000000000..1b28371da1e32f0a693eb17095633bb980eb769f GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQW2gmjv*Dd?w&Q|Yfunyx!C{k zn%q%guLWt>*(PV2nB?fx&is}xB=aEQ!3hcL$wyS0v&Ah8ooBAJRX++HVYM3nr{sJvGkCTj_k79R%`QhF;A|S*Th8rJh>@+hUDiBvCB8i*e0ELmH)4~ w_L)7==chJL<|CV%g#yVZ&0yIYg$@u0knj{)78&qol`;+04usU#{d8T literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/tg.png b/wp-content/plugins/wp-multilang/flags/tg.png new file mode 100644 index 0000000000000000000000000000000000000000..3d58ab953e27c2c2b675d0fa3d42b1eaa575c90e GIT binary patch literal 247 zcmVv+ literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/th.png b/wp-content/plugins/wp-multilang/flags/th.png new file mode 100644 index 0000000000000000000000000000000000000000..51ba170eb814185d5bb6d26144657858199d2b34 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQW2gmjv*Ddu3k_TJK(_MdU5*S z^=q<99H&c`be0(9746%rc=MxX{++(11}-;vJ69^NYa*dr8%WrWT|w=5;Cjl1n?&{?^kPjcWmTqj`X30L)xilslm zU7c$utR%RBlbm@Q0yd7`$CQxYlo}qgB*xgbEwai^WUs+it5fG1ihXU8{4c|1ZOvu9 zNw@^Q5q%v?{K2O_IkqsVMmi`o6lQya9gH6v{j@e3tQ#+v`yFNB>E#sw0000{~8*+T#WzE+5iBB004df0CfNWZ_;U*udnE)ez^aXpw77B6cC620A~M! zg7s`{vp z002%VAZ`EvLh^Tv2LJ#7Z%IT!RCwBjj>Q25K@38H@vKk(U4D1h)4pSZIZ$$>e-T2I z%okW|N0KZg6DtT_0Ih(Qmt{)A4@)iEB)1C|jutOv-Hu!gcBK5;M+C+rz$H#AfQf%z v^qM`jOY{=?bLm>hM5g|Yq|rqC-)6!UpYs(n){&+V00000NkvXXu0mjfMACHr literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/tl.png b/wp-content/plugins/wp-multilang/flags/tl.png new file mode 100644 index 0000000000000000000000000000000000000000..d364fa1966f293096186d6ad2390c2936355b276 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQnNi>978H@CEs{|=1Y9%LwjaV z4xVfNsej^6dUTmdym*uFqrT(gexATt@y=fqO8%w)nD6HBT$-&dTYz`lwrw>vHD}J8 zNtm0EJ+9OXXEYIC3z|kPYlfEW9VsW%_uZ7}74WSMZh8YYDtqd7ae7O$Nkpb*}?(79R zBH8*JVP^cHM(kXrJPdUV45bVV`3wv>3=F9Z46zIhp$rVZ3=B>T`n%lOfR?6tx;TbZ z+=@N1mGLlxi1R`9TI2WolO$#vG_SY$8ng33iMB(dP1{yPV}{Bg+{CV z7p1D&mEKerPkP)qon@=~VQab4n-dxKyK+A63fy_A%1G#Mg~t;KbLh*2~7YO=U1oz literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/tn.png b/wp-content/plugins/wp-multilang/flags/tn.png new file mode 100644 index 0000000000000000000000000000000000000000..50c2ac221bbfe307978453be8d9aa79fa27b7159 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQn8*cjv*C{$v@6J@GV-rE!<+O zZq%3mpHdZ=j4mv>XJ8PMeqgD(>eKo-Igi`x;~n$@Z#k@*I@M9?&>;mY&8u!Zl{NW= z4son`Zos_BkVVkvycOFLi9LP{ieJtoBrq^k3jgt0F2d*rw1~me)z4*}Q$iB}%pfu- literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/to.png b/wp-content/plugins/wp-multilang/flags/to.png new file mode 100644 index 0000000000000000000000000000000000000000..08e0d58475fe152d2f1de549aa929a15bdd8e791 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQpKJwjv*Ddl7I2DOPl}OUnP1l zHQ_+Bgup8nmVfQ7f{WkEhuprj^nYpTe`CYH&!4dwetY-#|0h+s-1Q4?rJYxcyDiPu zmaWnEbP0l+XkKhf+pN literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/tp.png b/wp-content/plugins/wp-multilang/flags/tp.png new file mode 100644 index 0000000000000000000000000000000000000000..adcca1751732fd703fdc9923d34b03231abfa6f8 GIT binary patch literal 332 zcmV-S0ki&zP)FII~*aiR-=>~1?wbJdhjqV%{zq++r$!u?@eSqeH`!5IvC8w7v z%rtw+9Qv%M$7_t7=Eu20Tv&KCmDPpP=}`=)9z2VQ@Dw915F?EJc785Yw@X3|of|^y z5^#n1w=OO&Xl!~_!)hB0y1m73_cbAO2XG8=I%KK0k(AN};@^CI#djK{VcM_dl~ilU z&oKYmd#s?Be*kHi2D$$V1_;pe2XdSl3ZN_v2mneq_!ra~ym$vxFYX||BCFZrdJlLE erbXak7?2-nQphq9lg$VK0000R5=sK&JQaewPCDk(Ix-D=SC zC{~G)JyNYOsbIo{mIGCM#tPET0tdgWNp{#ai^1u|%!3CQ7=r!Y`pL!EZ2;QH;OXk; Jvd$@?2>_#(Iw}AF literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/tt.png b/wp-content/plugins/wp-multilang/flags/tt.png new file mode 100644 index 0000000000000000000000000000000000000000..617bf9ef6dd61f270de70be8cb5e2952bd888576 GIT binary patch literal 257 zcmV+c0sj7pP)RrDL*_w_Vs&NY!U=A+a_DI*zUpK;ui_LS$RqOkJSbq@Ka<$so4%hE{C z^S0znH2g6{O57I4$a~vD?lU8sy0#K$ErgRfq?893A_Q(|B^rV}z!1){6(cctGo+iX zOEiRS!#tL3UQHOiy6BFL?NCF6Q8SVXBT zQ?nFvG8bd*cYr2@24_MrKKd(_7Hv0FS8~GImcLAP&fwHjfpTQHMZQT-T1S+pU?E>$ cRYWZ54-*~;8qE40CIA2c07*qoM6N<$g0tL{q5uE@ literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/tw.png b/wp-content/plugins/wp-multilang/flags/tw.png new file mode 100644 index 0000000000000000000000000000000000000000..9965e77598228c1542f86848eab13475f71f9408 GIT binary patch literal 215 zcmV;|04V>7P)tRS?EtcZZRgwcYIaI}XQ>Uo2dp zgGQ;n>?w<9;bp?kFlc>Dk}=P(X*z0Mfsx*`6Es1vDoZO<*EWhaP)KvE1w3|O!fbxwC?uu+?#E{)zxkMF?tRaGSUA1($OebDPppG>NjGH8$6YCW RX;1(F002ovPDHLkV1htjTX_Hg literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/tz.png b/wp-content/plugins/wp-multilang/flags/tz.png new file mode 100644 index 0000000000000000000000000000000000000000..8e53519ff07850f1c80898b0b1a593205e148594 GIT binary patch literal 277 zcmV+w0qXvVP)vmOBm$k8CI@lg4%${U4+P z0WdAW)OP<7K1(nWNKfezbW7H5V5-@l2MjKtsh9|=Cu1E#PjocH@_j0xIBB>Bl*U8| bJ<&4&3UtJ;-PZ#200000NkvXXu0mjf!8vqa literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ua.png b/wp-content/plugins/wp-multilang/flags/ua.png new file mode 100644 index 0000000000000000000000000000000000000000..838e230f69b48a17f942c0f22a362b8345bfa2f4 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQc<2Rjv*Dd&UP#E9Z(QBu&ed| zfBuc^Jq273RHPY=Sr=Tp5^|+LT!bm*Sj)RkCze)|#5^%)hSu&#C71jY6CxD2N^d6> vTYDvP3eNfcJMC?`aAL>ztNZqDn|EK%!YnA_M!v!(pe+oZu6{1-oD!M<5Rfy? literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ug.png b/wp-content/plugins/wp-multilang/flags/ug.png new file mode 100644 index 0000000000000000000000000000000000000000..ce29ffa7c47fdae1b1eaa6809c83da79993f8807 GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQvIGTjv*Ddk{9Uz_&?v|%S++I zbFG(TSATAMc*~ScjZKk_&5@0*E+l2uuUb#@!+kp)*mg}}3J}YX4lDWeWZT)<|CkS+ zoSYGqFCnqc(7+&Z>l-QY>5IBvUHbB(czt}rW*&9}Q&ZdGXJ;Ndvp4eOe0svpnaQw% zwm&DzK1dBrlHuN<%3VQM@G6a9?YGh=P@?Mv9FnrT~pwk#UUHx3vIVCg!02Q%J AwEzGB literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/uk.png b/wp-content/plugins/wp-multilang/flags/uk.png new file mode 100644 index 0000000000000000000000000000000000000000..9d87b7c2d309f7bb95b03a8302d94e5906b0010c GIT binary patch literal 331 zcmV-R0kr;!P)3!Xu|BmcF25B0qSV{2gE-}@73%=?KXnvoFE*}UZ8af9R-)^Jkv?e5c6tPp7W d$ZcRsR!=W3G)jJBNg@CM002ovPDHLkV1jPmjLZN4 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/um.png b/wp-content/plugins/wp-multilang/flags/um.png new file mode 100644 index 0000000000000000000000000000000000000000..1126cb01f541a8a4fa96b2f5d05162cb2e64e4c5 GIT binary patch literal 307 zcmV-30nGl1P)g#VV7!*g@BweOpo&FPk) z|9pJ^+uQy{MWie&<;Ta;wzj{frm2&Yz7P00019NklP)t-s073u& zZvb7WUH||81at%xd=vm(0He~Q?Ck6SRse6EZ;Ql>uh_2ug#ZA404s|t0A>I*kTj<1 zrk>uOx!<|g*483~BIEeu08Rj_D$Qm9003M`L_t(|+EvSi4TMktz)!#5(0V!;}6nOf&JV`$o;)j2Y8Nu4d@#oq)axcJ5i$* m3jDZ`3+8N=VU}<3XR}OQoCO}9fsHBv0000g#VV7!*g@BweOpo&FPk) z|9pJ^+uQy{MWie&<;Ta;wzj{frm2&Yz7P00019Nkl2AYBQ=<6P*0#{nGPoVU^m+gV`0P6w{68W>0umE?wY5z^hYD;xp^)I`n=G>b z6e0x(#89U1w=aoj|6z?_5u{&~iGPPFfGYGEh@M{E*DfBxHejhb$`gLNPyFrQ%!cFW tlA{T>CZLpbn4L(=eIo&-q{CvdSRD9t9T5;r2*m&Z002ovPDHLkV1f>pfeiov literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/uz.png b/wp-content/plugins/wp-multilang/flags/uz.png new file mode 100644 index 0000000000000000000000000000000000000000..e822cadb14532e7a3f45633b55bc66f699ddf2ee GIT binary patch literal 256 zcmV+b0ssDqP)$HQ9Xt0000(`q43TQQhr>mdKI;Vst0DR0!B>(^b literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/vc.png b/wp-content/plugins/wp-multilang/flags/vc.png new file mode 100644 index 0000000000000000000000000000000000000000..7352c4db465a1f34d38ea81bda2d2fcd9245754c GIT binary patch literal 252 zcmV@Xp<&0;9u%Rrx@CI7ioJCXRY)i@Moq>Tg zN=n)Nuggbg59!iK&uQ7gw!Ixd8tFMUH!|b;*zy+An3@>0000?b@zzwX@g$5?^Ms39g~OM7FYsaUR=S^kogd5$+6*d}!QOUKBHUr$acb26DQ^Xp1iE+&S5o?Ck99>U#Y3jYNu*{u{FrS1%7_W+V0xOg>uc=ZY3r05j?EW0001pNkl* vdUR%{6hPtOOkah%`qsMea-2uK@$#<|QCkSCcff_F00000NkvXXu0mjf<*K_j literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/vn.png b/wp-content/plugins/wp-multilang/flags/vn.png new file mode 100644 index 0000000000000000000000000000000000000000..01c616a66249273fcd2ab15ee69d59a7225df2b3 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQZ=3~jv*Dd=APcjd&oh+a|`tI|+`Rn%HLmSU1J$=T) g{-R4Q{s!;7+4?&_ITc@-0dxn0r>mdKI;Vst0Q+@Eb^rhX literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/vu.png b/wp-content/plugins/wp-multilang/flags/vu.png new file mode 100644 index 0000000000000000000000000000000000000000..b36c987d5562af4cd356d15ff9cb7cdee738d971 GIT binary patch literal 289 zcmV++0p9+JP)v_L3o;5Zd@wlf){nQla8$c%G=2&ljqV@#$9Q5DqJq?4C)N1FY{` z-2+%&*6&Lsq|;8XEY$g67^FuV0MV#Q#l|JC!6Be!vr1KSEj}6ksY{bs%*CaZGSBq> n)8(ETg}Rv*FSIAnq{fjSXsM@BUBdT800000NkvXXu0mjf_?>>U literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/wf.alt.png b/wp-content/plugins/wp-multilang/flags/wf.alt.png new file mode 100644 index 0000000000000000000000000000000000000000..22ab5421004bca1ee838002102b96ec360c0202f GIT binary patch literal 258 zcmV+d0sa1oP){;-b-AS3~x{-A6dC{&O()mD;->GCM7YMwLCz05HT;NdYG zdYdN*@0@m?J*;2?$bmzz=WUK4F3xG^F=qt89@d>sYFZ3pUM^e6Glo7O2a+FJQY@+p z1=Rs`|7x=+S~Z(~yA_*uTh%mnmHN`vrq$Y_(GW?gWW1m9_qzn4@X_pl;x90UCSOlkk|R761SM07*qo IM6N<$f;sqV82|tP literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/wf.png b/wp-content/plugins/wp-multilang/flags/wf.png new file mode 100644 index 0000000000000000000000000000000000000000..d17f1d3eafb1db3b81a0331bdcb7b409a4d205ad GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQjwl6jv*Dd?w&T}Vlrf4z36`8 z>RX++HVYM3nr{sJvGkCTj_k79R%`QhF;A|S*Th8rJh>@+hUDiBvCB8i*e0ELmH)4~ w_L)7==chJL<|CV%g#yVZ&0yIYg$@u0knj{)78&qol`;+04usU#{d8T literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ws.png b/wp-content/plugins/wp-multilang/flags/ws.png new file mode 100644 index 0000000000000000000000000000000000000000..7696eae88f644dd6a1c82a0abce87c921ac36ae0 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQstg5jv*C{$q5NF*xYP;dU7vb ztZr11`J0|_pjF~QRl|u>S#4`_tS1~i5Ww#8V~gV#hS1|jbdnQJw7+06YT%eY&)mUR zV6);Yg!*3Cop)r`njxgN@xNAJjp~I literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/xt.png b/wp-content/plugins/wp-multilang/flags/xt.png new file mode 100644 index 0000000000000000000000000000000000000000..447b4585a92076dd02510008bc19b5303234df22 GIT binary patch literal 345 zcmV-f0jBwz=w zE+goVo)T#)pg{mFJCg4`?L$J1kesi?fYwi41g=hOK9TKcgp1{uUS7UjvNn@#@>6%8 z?HiaG3^;U?6C7_t!JrW!ska3(1?{#>e#Ylvp02Ezi$bQ7x=SPS=r`K>+eEC9*@y$29a@00000NkvXXu0mjfBLJTX literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/ye.png b/wp-content/plugins/wp-multilang/flags/ye.png new file mode 100644 index 0000000000000000000000000000000000000000..10a2994301a17957074701e1b813ee9e3475250a GIT binary patch literal 108 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQpTPxjv*C{$v@6J@GV-rEnFdY z(IS6UHx3v IIVCg!0C0RFy#N3J literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/yi.png b/wp-content/plugins/wp-multilang/flags/yi.png new file mode 100644 index 0000000000000000000000000000000000000000..92f9ad52978e670f66e1578d7b31bd565946c2d3 GIT binary patch literal 191 zcmV;w06_nVP)QXxT9mdGfz#Y(+Ejpt>e--QVswB002ovPDHLkV1nuQRh<9; literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/yt.png b/wp-content/plugins/wp-multilang/flags/yt.png new file mode 100644 index 0000000000000000000000000000000000000000..d17f1d3eafb1db3b81a0331bdcb7b409a4d205ad GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQjwl6jv*Dd?w&T}Vlrf4z36`8 z>RX++HVYM3nr{sJvGkCTj_k79R%`QhF;A|S*Th8rJh>@+hUDiBvCB8i*e0ELmH)4~ w_L)7==chJL<|CV%g#yVZ&0yIYg$@u0knj{)78&qol`;+04usU#{d8T literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/yu.png b/wp-content/plugins/wp-multilang/flags/yu.png new file mode 100644 index 0000000000000000000000000000000000000000..1f8f73df9f91556eca0808eed4c58ff2f9d2396d GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!2~296jZ$iQjwl6jv*Dd_MSE5Yf#{Ed&vIs zZ~yUUj907}EtFn9(kOj!etMq1=#7VMJiYHzeYPySu~t~hO(A--;cg=ilNAlxi>;Th v(o}tTJuF>u&5vcz&aQiz*5S}D%-7FuQJHnl!ZlJ%a{Ml%M;f2{}RKRw{onjOc|D& z1Ci6A9FVn{nRxU(VE}`!e1_}iIE}aHKy-4ib(r^j8!l^~fDjC5C@@@H&Decd3fWqq zn{WPqhK9CZKeYVd76xQcn~bm)7h;-Z$k3ogrZzGii8Dx!p8$r)GX{nS7-$az!)k^X zyBTI<zny%*?M4MVJVrhha7Y&=QD?fvElP?8Qs&h>0Bn8i^Hw^~_~pXk~!tFdQ){@X0D`0U(=|2f#=gpaR$&dYq* zbcWdm?ofq1X5&SiSdQ){@X0D`0U(=|2f#=gpaR$&dYq* zbcWdm?ofq1X5&SiS?I#$YBR4u^((PO^c91j8-pEXH&Q!V$*T0!p#8hSl?3=n$=Y6GIkX&OLMuUAj2 zL5r}qbLK+-85m|WfPk$y!<$%!8(|E?S{oz=iPi?vbHtB<0iwrfrV%h?v7)tl{BIZ- zn!wuhg+O}NxiT<-^vp2Q>jA|ERy0?O_ZkC38CaW^07%aa8wLQto!tbuY%tXT0000< KMNUMnLSTXr)@;K7 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wp-multilang/flags/zu.png b/wp-content/plugins/wp-multilang/flags/zu.png new file mode 100644 index 0000000000000000000000000000000000000000..1515e77b9ccb3d39da1f9b88d0f1832daa872d54 GIT binary patch literal 286 zcmV+(0pb3MP)J%a{Ml%M;f2{}RKRw{onjOc|D& z1Ci6A9FVn{nRxU(VE}`!e1_}iIE}aHKy-4ib(r^j8!l^~fDjC5C@@@H&Decd3fWqq zn{WPqhK9CZKeYVd76xQcn~bm)7h;-Z$k3ogrZzGii8Dx!p8$r)GX{nS7-$az!)k^X zyBTI<zny%*?M4MVJVrhha7Y&=QD?fvElP?8Qs&h>0Bn8i^Hw^~_~pXk~!tFh49 zT9{E{mMs*#-j#nx%gYBVD=mC{1UzIHn8D4mKYw;IvD1VVV~~eC5k=V9@c{Sw3;euY zMklSwi1k2w>PsSGzl^3!b7Y;ExQ za!MvaI^_vs;SdM`pDR$*SoGTeHNt>k7Tf`Azz7$cHyngkFP)8wij+(h~0L(WT8(_2)>FImbrSp4!r@W)5;%tq_7 zNj!FvTmS$7YDq*vRCr!(jY$#%F$l!y2JfCN|9@<-nMobject_type ) { + + case 'post': + if ( null === wpm_get_post_config( get_post_type( $object_id ) ) ) { + return $value; + } + + break; + + case 'term': + $term = get_term( $object_id ); + if ( ! $term || null === wpm_get_taxonomy_config( $term->taxonomy ) ) { + return $value; + } + } + + if ( ! $meta_key ) { + + $meta_cache = wp_cache_get( $object_id, $this->object_type . '_meta' ); + + if ( ! $meta_cache ) { + $meta_cache = update_meta_cache( $this->object_type, array( $object_id ) ); + $meta_cache = $meta_cache[ $object_id ]; + } + + return wpm_translate_value( $meta_cache ); + } + + $config = wpm_get_config(); + $object_fields_config = apply_filters( "wpm_{$this->object_type}_fields_config", $config[ "{$this->object_type}_fields" ] ); + + if ( ! isset( $object_fields_config[ $meta_key ] ) ) { + return $value; + } + + $meta_config = apply_filters( "wpm_{$meta_key}_meta_config", $object_fields_config[ $meta_key ], false, $object_id ); + $meta_config = apply_filters( "wpm_{$this->object_type}_meta_{$meta_key}_config", $meta_config, $object_id ); + + if ( null === $meta_config ) { + return $value; + } + + $column = sanitize_key( $this->object_type . '_id' ); + $id_column = 'user' === $this->object_type ? 'umeta_id' : 'meta_id'; + $meta_values = wp_cache_get( $object_id, $this->object_type . '_' . $meta_key . '_wpm_meta' ); + $values = array(); + + if ( ! $meta_values ) { + + $meta_values = $wpdb->get_results( $wpdb->prepare( "SELECT {$id_column}, meta_value FROM {$wpdb->{$this->object_table}} WHERE meta_key = %s AND {$column} = %d;", $meta_key, $object_id ), ARRAY_A ); + + wp_cache_set( $object_id, $meta_values, $this->object_type . '_' . $meta_key . '_wpm_meta' ); + } + + if ( $meta_values ) { + + foreach ( $meta_values as $meta_field ) { + $meta_field['meta_value'] = maybe_unserialize( $meta_field['meta_value'] ); + if ( wpm_is_ml_value( $meta_field['meta_value'] ) ) { + $value = wpm_translate_value( $meta_field['meta_value'] ); + } else { + $value = $meta_field['meta_value']; + } + + $value = apply_filters( 'wpm_get_meta_value', $value, $meta_key ); + $value = apply_filters( "wpm_get_{$meta_key}_meta_value", $value ); + $value = apply_filters( "wpm_get_{$this->object_type}_meta_{$meta_key}_value", $value ); + + $values[] = $value; + } + } + + if ( $values ) { + return $values; + } + + return null; + } + + /** + * Save meta with translations + * + * @param $check + * @param $object_id + * @param $meta_key + * @param $meta_value + * @param $prev_value + * + * @return bool + */ + public function update_meta_field( $check, $object_id, $meta_key, $meta_value, $prev_value ) { + global $wpdb; + + switch ( $this->object_type ) { + + case 'post': + if ( null === wpm_get_post_config( get_post_type( $object_id ) ) ) { + return $check; + } + + break; + + case 'term': + $term = get_term( $object_id ); + if ( ! $term || null === wpm_get_taxonomy_config( $term->taxonomy ) ) { + return $check; + } + } + + $config = wpm_get_config(); + $object_fields_config = apply_filters( "wpm_{$this->object_type}_fields_config", $config[ "{$this->object_type}_fields" ] ); + + if ( ! isset( $object_fields_config[ $meta_key ] ) ) { + return $check; + } + + $meta_config = apply_filters( "wpm_{$meta_key}_meta_config", $object_fields_config[ $meta_key ], $meta_value, $object_id ); + $meta_config = apply_filters( "wpm_{$this->object_type}_meta_{$meta_key}_config", $meta_config, $meta_value, $object_id ); + + if ( null === $meta_config ) { + return $check; + } + + $table = $wpdb->{$this->object_table}; + $column = sanitize_key( $this->object_type . '_id' ); + $id_column = 'user' === $this->object_type ? 'umeta_id' : 'meta_id'; + $meta_value = apply_filters( 'wpm_update_meta_value', $meta_value, $meta_key ); + $meta_value = apply_filters( "wpm_update_{$meta_key}_meta_value", $meta_value ); + $meta_value = apply_filters( "wpm_update_{$this->object_type}_meta_{$meta_key}_value", $meta_value ); + + if ( empty( $prev_value ) ) { + + if ( wpm_is_ml_value( $meta_value ) ) { + $old_value = array(); + $old_results = $wpdb->get_results( $wpdb->prepare( "SELECT meta_value FROM {$wpdb->{$this->object_table}} WHERE meta_key = %s AND {$column} = %d;", $meta_key, $object_id ), ARRAY_A ); + if ( $old_results ) { + $old_value[0] = maybe_unserialize( $old_results[0]['meta_value'] ); + } + } else { + $old_value = get_metadata( $this->object_type, $object_id, $meta_key ); + } + + if ( count( $old_value ) === 1 ) { + if ( $old_value[0] === $meta_value ) { + return false; + } + } + } + + $meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT $id_column FROM $table WHERE meta_key = %s AND $column = %d", $meta_key, $object_id ) ); + if ( empty( $meta_ids ) ) { + return add_metadata( $this->object_type, $object_id, $meta_key, $meta_value ); + } + + $_meta_value = $meta_value; + + if ( ! wpm_is_ml_value( $meta_value ) ) { + $old_value = $wpdb->get_var( $wpdb->prepare( "SELECT meta_value FROM {$wpdb->{$this->object_table}} WHERE meta_key = %s AND {$column} = %d LIMIT 1;", $meta_key, $object_id ) ); + $old_value = maybe_unserialize( $old_value ); + $old_value = apply_filters( "wpm_filter_old_{$meta_key}_meta_value", $old_value, $meta_value, $meta_config ); + $meta_value = wpm_set_new_value( $old_value, $meta_value, $meta_config ); + $meta_value = apply_filters( "wpm_filter_new_{$meta_key}_meta_value", $meta_value, $old_value, $meta_config ); + } + + $meta_value = maybe_serialize( $meta_value ); + $data = compact( 'meta_value' ); + $where = array( $column => $object_id, 'meta_key' => $meta_key ); + + if ( ! empty( $prev_value ) ) { + + if ( ! wpm_is_ml_value( $prev_value ) ) { + $like = '%' . $wpdb->esc_like( esc_sql( $prev_value ) ) . '%'; + $prev_value = $wpdb->get_var( $wpdb->prepare( "SELECT meta_value FROM {$wpdb->{$this->object_table}} WHERE meta_key = %s AND {$column} = %d AND meta_value LIKE %s LIMIT 1", $meta_key, $object_id, $like ) ); + } + + $prev_value = maybe_serialize( $prev_value ); + $where['meta_value'] = $prev_value; + } + + foreach ( $meta_ids as $meta_id ) { + /** + * Fires immediately before updating metadata of a specific type. + * + * The dynamic portion of the hook, `$meta_type`, refers to the meta + * object type (comment, post, or user). + * + * @since 2.9.0 + * + * @param int $meta_id ID of the metadata entry to update. + * @param int $object_id Object ID. + * @param string $meta_key Meta key. + * @param mixed $meta_value Meta value. + */ + do_action( "update_{$this->object_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value ); + + if ( 'post' === $this->object_type ) { + /** + * Fires immediately before updating a post's metadata. + * + * @since 2.9.0 + * + * @param int $meta_id ID of metadata entry to update. + * @param int $object_id Object ID. + * @param string $meta_key Meta key. + * @param mixed $meta_value Meta value. + */ + do_action( 'update_postmeta', $meta_id, $object_id, $meta_key, $meta_value ); + } + } + + $result = $wpdb->update( $table, $data, $where ); + + if ( ! $result ) { + return false; + } + + wp_cache_delete( $object_id, $this->object_type . '_' . $meta_key . '_wpm_meta' ); + + foreach ( $meta_ids as $meta_id ) { + /** + * Fires immediately after updating metadata of a specific type. + * + * The dynamic portion of the hook, `$meta_type`, refers to the meta + * object type (comment, post, or user). + * + * @since 2.9.0 + * + * @param int $meta_id ID of updated metadata entry. + * @param int $object_id Object ID. + * @param string $meta_key Meta key. + * @param mixed $meta_value Meta value. + */ + do_action( "updated_{$this->object_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value ); + + if ( 'post' === $this->object_type ) { + /** + * Fires immediately after updating a post's metadata. + * + * @since 2.9.0 + * + * @param int $meta_id ID of updated metadata entry. + * @param int $object_id Object ID. + * @param string $meta_key Meta key. + * @param mixed $meta_value Meta value. + */ + do_action( 'updated_postmeta', $meta_id, $object_id, $meta_key, $meta_value ); + } + } + + return true; + } + + /** + * Add new meta for translation + * + * @param $check null|mixed + * @param $object_id int + * @param $meta_key + * @param $meta_value mixed + * @param $unique bool + * + * @return mixed + */ + public function add_meta_field( $check, $object_id, $meta_key, $meta_value, $unique ) { + global $wpdb; + + if ( null !== $check ) { + return $check; + } + + switch ( $this->object_type ) { + + case 'post': + if ( null === wpm_get_post_config( get_post_type( $object_id ) ) ) { + return $check; + } + break; + + case 'term': + $term = get_term( $object_id ); + if ( ! $term || null === wpm_get_taxonomy_config( $term->taxonomy ) ) { + return $check; + } + } + + $config = wpm_get_config(); + $object_fields_config = apply_filters( "wpm_{$this->object_type}_fields_config", $config[ "{$this->object_type}_fields" ] ); + + if ( ! isset( $object_fields_config[ $meta_key ] ) ) { + return $check; + } + + $meta_config = apply_filters( "wpm_{$meta_key}_meta_config", $object_fields_config[ $meta_key ], $meta_value, $object_id ); + $meta_config = apply_filters( "wpm_{$this->object_type}_meta_{$meta_key}_config", $meta_config, $meta_value, $object_id ); + + if ( null === $meta_config ) { + return $check; + } + + $table = $wpdb->{$this->object_table}; + $column = sanitize_key( $this->object_type . '_id' ); + $meta_value = apply_filters( 'wpm_add_meta_value', $meta_value, $meta_key ); + $meta_value = apply_filters( "wpm_add_{$meta_key}_meta_value", $meta_value ); + $meta_value = apply_filters( "wpm_add_{$this->object_type}_meta_{$meta_key}_value", $meta_value ); + + if ( ! wpm_is_ml_value( $meta_value ) ) { + $meta_value = wpm_set_new_value( array(), $meta_value, $meta_config ); + } + + if ( $unique && $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $table WHERE meta_key = %s AND $column = %d", $meta_key, $object_id ) ) + ) { + return false; + } + + $_meta_value = $meta_value; + $meta_value = maybe_serialize( $meta_value ); + + /** + * Fires immediately before meta of a specific type is added. + * + * The dynamic portion of the hook, `$meta_type`, refers to the meta + * object type (comment, post, or user). + * + * @since 3.1.0 + * + * @param int $object_id Object ID. + * @param string $meta_key Meta key. + * @param mixed $meta_value Meta value. + */ + do_action( "add_{$this->object_type}_meta", $object_id, $meta_key, $_meta_value ); + + $result = $wpdb->insert( $table, array( + $column => $object_id, + 'meta_key' => $meta_key, + 'meta_value' => $meta_value, + ) ); + + if ( ! $result ) { + return false; + } + + $mid = (int) $wpdb->insert_id; + + wp_cache_delete( $object_id, $this->object_type . '_meta' ); + + /** + * Fires immediately after meta of a specific type is added. + * + * The dynamic portion of the hook, `$meta_type`, refers to the meta + * object type (comment, post, or user). + * + * @since 2.9.0 + * + * @param int $mid The meta ID after successful update. + * @param int $object_id Object ID. + * @param string $meta_key Meta key. + * @param mixed $meta_value Meta value. + */ + do_action( "added_{$this->object_type}_meta", $mid, $object_id, $meta_key, $_meta_value ); + + return $mid; + } + + /** + * Delete meta field + * + * @param $meta_ids + * @param $object_id + * @param $meta_key + */ + public function delete_meta_field( $meta_ids, $object_id, $meta_key ) { + + switch ( $this->object_type ) { + + case 'post': + if ( null === wpm_get_post_config( get_post_type( $object_id ) ) ) { + return; + } + break; + + case 'term': + $term = get_term( $object_id ); + if ( ! $term || null === wpm_get_taxonomy_config( $term->taxonomy ) ) { + return; + } + } + + $config = wpm_get_config(); + $object_fields_config = apply_filters( "wpm_{$this->object_type}_fields_config", $config[ "{$this->object_type}_fields" ] ); + + if ( ! isset( $object_fields_config[ $meta_key ] ) || null === $object_fields_config[ $meta_key ] ) { + return; + } + + wp_cache_delete( $object_id, $this->object_type . '_' . $meta_key . '_wpm_meta' ); + } +} diff --git a/wp-content/plugins/wp-multilang/includes/abstracts/abstract-wpm-widget.php b/wp-content/plugins/wp-multilang/includes/abstracts/abstract-wpm-widget.php new file mode 100644 index 00000000..c180db95 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/abstracts/abstract-wpm-widget.php @@ -0,0 +1,273 @@ + $this->widget_cssclass, + 'description' => $this->widget_description, + 'customize_selective_refresh' => true, + ); + + parent::__construct( $this->widget_id, $this->widget_name, $widget_ops ); + + add_action( 'save_post', array( $this, 'flush_widget_cache' ) ); + add_action( 'deleted_post', array( $this, 'flush_widget_cache' ) ); + add_action( 'switch_theme', array( $this, 'flush_widget_cache' ) ); + } + + /** + * Get cached widget. + * + * @param array $args + * @return bool true if the widget is cached otherwise false + */ + public function get_cached_widget( $args ) { + + $cache = wp_cache_get( apply_filters( 'wpm_cached_widget_id', $this->widget_id ), 'widget' ); + + if ( ! is_array( $cache ) ) { + $cache = array(); + } + + if ( isset( $cache[ $args['widget_id'] ] ) ) { + echo $cache[ $args['widget_id'] ]; + return true; + } + + return false; + } + + /** + * Cache the widget. + * + * @param array $args + * @param string $content + * @return string the content that was cached + */ + public function cache_widget( $args, $content ) { + wp_cache_set( apply_filters( 'wpm_cached_widget_id', $this->widget_id ), array( $args['widget_id'] => $content ), 'widget' ); + + return $content; + } + + /** + * Flush the cache. + */ + public function flush_widget_cache() { + wp_cache_delete( apply_filters( 'wpm_cached_widget_id', $this->widget_id ), 'widget' ); + } + + /** + * Output the html at the start of a widget. + * + * @param array $args + * @param $instance + */ + public function widget_start( $args, $instance ) { + echo $args['before_widget']; + + if ( $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base ) ) { + echo $args['before_title'] . $title . $args['after_title']; + } + } + + /** + * Output the html at the end of a widget. + * + * @param array $args + */ + public function widget_end( $args ) { + echo $args['after_widget']; + } + + /** + * Updates a particular instance of a widget. + * + * @see WP_Widget->update + * @param array $new_instance + * @param array $old_instance + * @return array + */ + public function update( $new_instance, $old_instance ) { + + $instance = $old_instance; + + if ( empty( $this->settings ) ) { + return $instance; + } + + // Loop settings and get values to save. + foreach ( $this->settings as $key => $setting ) { + if ( ! isset( $setting['type'] ) ) { + continue; + } + + // Format the value based on settings type. + switch ( $setting['type'] ) { + case 'number' : + $instance[ $key ] = absint( $new_instance[ $key ] ); + + if ( isset( $setting['min'] ) && '' !== $setting['min'] ) { + $instance[ $key ] = max( $instance[ $key ], $setting['min'] ); + } + + if ( isset( $setting['max'] ) && '' !== $setting['max'] ) { + $instance[ $key ] = min( $instance[ $key ], $setting['max'] ); + } + break; + case 'textarea' : + $instance[ $key ] = wp_kses( trim( wp_unslash( $new_instance[ $key ] ) ), wp_kses_allowed_html( 'post' ) ); + break; + case 'checkbox' : + $instance[ $key ] = empty( $new_instance[ $key ] ) ? 0 : 1; + break; + default: + $instance[ $key ] = sanitize_text_field( $new_instance[ $key ] ); + break; + } + + /** + * Sanitize the value of a setting. + */ + $instance[ $key ] = apply_filters( 'wpm_widget_settings_sanitize_option', $instance[ $key ], $new_instance, $key, $setting ); + } + + $this->flush_widget_cache(); + + return $instance; + } + + /** + * Outputs the settings update form. + * + * @see WP_Widget->form + * @param array $instance + * + * @return null|string + */ + public function form( $instance ) { + + if ( empty( $this->settings ) ) { + return; + } + + foreach ( $this->settings as $key => $setting ) { + + $class = isset( $setting['class'] ) ? $setting['class'] : ''; + $value = isset( $instance[ $key ] ) ? $instance[ $key ] : $setting['std']; + + switch ( $setting['type'] ) { + + case 'text' : + ?> +

+ + +

+ +

+ + +

+ +

+ + +

+ +

+ + + + + +

+ +

+ /> + +

+ id : ''; + $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; + + // Register scripts + wp_register_script( 'select2', '//cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/js/select2.min.js', array( 'jquery' ), null ); + wp_register_script( 'wpm_languages', wpm_asset_path( 'scripts/languages' . $suffix . '.js' ), array( + 'wp-util', + 'jquery-ui-sortable', + 'select2', + ), WPM_VERSION ); + + wp_register_script( 'wpm_language_switcher', wpm_asset_path( 'scripts/language-switcher' . $suffix . '.js' ), array( 'wp-util' ), WPM_VERSION ); + wp_register_script( 'wpm_language_switcher_customizer', wpm_asset_path( 'scripts/customizer' . $suffix . '.js' ), array( 'wp-util' ), WPM_VERSION ); + wp_register_script( 'wpm_translator', wpm_asset_path( 'scripts/translator' . $suffix . '.js' ), array(), WPM_VERSION ); + + $translator_params = array( + 'languages' => array_keys( wpm_get_languages() ), + 'default_language' => wpm_get_default_language(), + 'language' => wpm_get_language(), + 'show_untranslated_strings' => get_option( 'wpm_show_untranslated_strings', 'yes' ), + ); + wp_localize_script( 'wpm_translator', 'wpm_translator_params', $translator_params ); + wp_register_script( 'wpm_additional_settings', wpm_asset_path( 'scripts/additional-settings' . $suffix . '.js' ), array( 'jquery' ), WPM_VERSION ); + + $script = " + (function( $ ) { + $(function () { + $(document).ready(function(){ + $('form').each(function(){ + var form = $(this); + var input = $(''); + if (form.find('input#lang').length === 0) { + form.append(input); + } + }); + }); + }); + })( jQuery ); + "; + + wp_add_inline_script( 'wpm_language_switcher', $script ); + wp_add_inline_script( 'wpm_language_switcher_customizer', $script ); + + if ( null === $screen ) { + return; + } + + if ( 'customize' === $screen_id ) { + + $languages = wpm_get_languages(); + if ( count( $languages ) > 1 ) { + wp_enqueue_script( 'wpm_language_switcher_customizer' ); + add_action( 'admin_print_footer_scripts', 'wpm_admin_language_switcher_customizer' ); + } + } + + $show_switcher = false; + + if ( ( ( $screen_id === $screen->post_type ) || ( 'edit-' . $screen->post_type === $screen_id ) ) && $screen->post_type && null !== wpm_get_post_config( $screen->post_type ) ) { + $show_switcher = true; + } + + if ( ( 'edit-' . $screen->taxonomy === $screen_id ) && $screen->taxonomy && null !== wpm_get_taxonomy_config( $screen->taxonomy ) ) { + $show_switcher = true; + } + + $config = wpm_get_config(); + $admin_pages_config = apply_filters( 'wpm_admin_pages', $config['admin_pages'] ); + + if ( in_array( $screen_id, $admin_pages_config, true ) ) { + $show_switcher = true; + } + + if ( $show_switcher ) { + $this->set_language_switcher(); + + $admin_html_tags = apply_filters( 'wpm_admin_html_tags', $config['admin_html_tags'] ); + + if ( ! empty( $admin_html_tags[ $screen_id ] ) ) { + wp_enqueue_script( 'wpm_translator' ); + $js_code = ''; + foreach ( ( array ) $admin_html_tags[ $screen_id ] as $attr => $selector ) { + $js_code .= '$( "' . implode( ', ', $selector ) . '" ).each( function () {'; + if ( 'text' === $attr ) { + $js_code .= '$(this).text(wpm_translator.translate_string($(this).text()));'; + } elseif ( 'value' === $attr ) { + $js_code .= '$(this).val(wpm_translator.translate_string($(this).val()));'; + } else { + $js_code .= '$(this).attr("' . $attr . '", wpm_translator.translate_string($(this).attr("' . $attr . '")));'; + } + $js_code .= '} );'; + } + wpm_enqueue_js( $js_code ); + } + } + + if ( 'options-general' === $screen_id ) { + wpm_enqueue_js( "$('#WPLANG').parents('tr').hide();" ); + } + } + + /** + * Display language switcher for edit posts, taxonomies, options + */ + public function set_language_switcher() { + + $languages = wpm_get_languages(); + if ( count( $languages ) <= 1 ) { + return; + } + + wp_enqueue_script( 'wpm_language_switcher' ); + + add_action( 'admin_head', static function () { + ?> + + id : ''; + + if ( null === $screen || ! $screen->post_type || ( $screen_id !== $screen->post_type ) || null === wpm_get_post_config( $screen->post_type ) || ( function_exists( 'use_block_editor_for_post_type' ) && ! use_block_editor_for_post_type( $screen->post_type ) ) ) { + return; + } + + if ( count( wpm_get_languages() ) <= 1 ) { + return; + } + + $script = " + (function( $ ) { + $(window).on('pageshow',function(){ + if ($('#wpm-language-switcher').length === 0) { + var language_switcher = wp.template( 'wpm-ls-customizer' ); + $('.edit-post-header-toolbar').prepend(language_switcher); + } + }); + + $(document).on('click', '#wpm-language-switcher .lang-dropdown a', function(){ + var lang = $(this).data('lang'); + var url = document.location.origin + document.location.pathname; + var query = document.location.search; + var href = ''; + if (query.search(/edit_lang=/i) !== -1) { + href = url + query.replace(/edit_lang=[a-z]{2,4}/i, 'edit_lang=' + lang) + document.location.hash; + } else { + href = url + query + '&edit_lang=' + lang + document.location.hash; + } + $(this).attr('href', href); + }); + })( jQuery ); + "; + + wp_add_inline_script( 'wp-edit-post', $script ); + add_action( 'admin_footer', 'wpm_admin_language_switcher_customizer' ); + } +} diff --git a/wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-customizer.php b/wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-customizer.php new file mode 100644 index 00000000..5c997ae3 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-customizer.php @@ -0,0 +1,52 @@ + $url ) ) ) ); + } + + public function load_available_items_query($items, $type, $object) { + if (($type === 'post_type' && null !== wpm_get_post_config($object)) || ($type === 'taxonomy' && null !== wpm_get_taxonomy_config($object))) { + foreach ($items as &$item) { + $item['title'] = wpm_translate_string( $item['title'] ); + } + } + return $items; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-edit-menus.php b/wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-edit-menus.php new file mode 100644 index 00000000..ebe6bf7a --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-edit-menus.php @@ -0,0 +1,123 @@ +languages ) ) { + $languages = get_post_meta( $item->ID, '_languages', true ); + $item->languages = is_array( $languages ) ? $languages : array(); + } + + return $item; + } + + /** + * Add custom fields to menu item. + * + * @param int $item_id + * @param object $item + * + * @see http://web.archive.org/web/20141021012233/http://shazdeh.me/2014/06/25/custom-fields-nav-menu-items + * @see https://core.trac.wordpress.org/ticket/18584 + */ + public function menu_item_custom_fields( $item_id, $item ) { + + $_key = 'languages'; + $key = sprintf( 'menu-item-%s', $_key ); + $id = sprintf( 'edit-%s-%s', $key, $item_id ); + $name = sprintf( '%s[%s]', $_key, $item_id ); + $value = $item->languages; + $class = sprintf( 'field-%s', $_key ); + $languages = wpm_get_lang_option(); + $i = 0; + ?> +

+
+ $language ) { if ( ! $language['enable'] ) continue; ?> +
+ +

+ Menus > Pages. + add_action( 'admin_head-nav-menus.php', array( $this, 'add_nav_menu_meta_boxes' ) ); + add_filter( 'wp_edit_nav_menu_walker', array( $this, 'filter_walker' ) ); + add_action( 'wp_nav_menu_item_custom_fields', array( $this, 'menu_item_languages_setting' ), 5, 2 ); + add_action( 'wp_update_nav_menu_item', array( $this, 'update_nav_menu_item' ), 10, 2 ); + } + + + /** + * Replace default menu editor walker with ours + * + * We don't actually replace the default walker. We're still using it and + * only injecting some HTMLs. + * + * @wp_hook filter wp_edit_nav_menu_walker + * + * @param $class_name + * + * @return string Walker class name + */ + public static function filter_walker( $class_name ) { + if ( ! has_action( 'wp_nav_menu_item_custom_fields') ) { + return 'WPM\Includes\Libraries\WPM_Walker_Nav_Menu_Edit'; + } + + return $class_name; + } + + /** + * Add language switcher to admin + * + * @param \WP_Admin_Bar $wp_admin_bar + */ + public function admin_bar_menu( \WP_Admin_Bar $wp_admin_bar ) { + + if ( ! get_current_user_id() ) { + return; + } + + $installed_translations = wpm_get_installed_languages(); + + if ( count( $installed_translations ) <= 1 ) { + return; + } + + $user_language = wpm_get_user_language(); + $languages = wpm_get_languages(); + $available_translations = wpm_get_available_translations(); + + if ( isset( $languages[ $user_language ] ) ) { + $wp_admin_bar->add_menu( array( + 'id' => 'wpm-language-switcher', + 'parent' => 'top-secondary', + 'title' => '' . + ( $languages ? '' : '' ) . '' . $available_translations[ get_locale() ]['native_name'] . '', + ) ); + } + + foreach ( $installed_translations as $locale ) { + + if ( get_locale() === $locale ) { + continue; + } + + $code = ''; + $language = array(); + $add = false; + + foreach ( $languages as $code => $language ) { + if ( isset( $language['translation'] ) && ( $language['translation'] == $locale ) ) { + $add = true; + break; + } + } + + if ( $add ) { + $wp_admin_bar->add_menu( array( + 'parent' => 'wpm-language-switcher', + 'id' => 'wpm-language-' . $code, + 'title' => '' . '' . '' . '' . $available_translations[$locale]['native_name'] . '', + 'href' => wpm_translate_current_url( $code ), + ) ); + } + } + } + + + /** + * Add menu item. + */ + public function settings_menu() { + $settings_page = add_options_page( __( 'WP Multilang Settings', 'wp-multilang' ), __( 'WP Multilang', 'wp-multilang' ), 'manage_options', 'wpm-settings', array( $this, 'settings_page' ) ); + + add_action( 'load-' . $settings_page, array( $this, 'settings_page_init' ) ); + } + + /** + * Load settings. + */ + public function settings_page_init() { + global $current_tab, $current_section; + + // Include settings pages + WPM_Admin_Settings::get_settings_pages(); + + // Get current tab/section + $current_tab = empty( $_GET['tab'] ) ? 'general' : sanitize_title( $_GET['tab'] ); + $current_section = empty( $_REQUEST['section'] ) ? '' : sanitize_title( $_REQUEST['section'] ); + + // Save settings if data has been posted + if ( ! empty( $_POST ) ) { + WPM_Admin_Settings::save(); + } + + // Add any posted messages + if ( ! empty( $_GET['wpm_error'] ) ) { + WPM_Admin_Settings::add_error( stripslashes( $_GET['wpm_error'] ) ); + } + + if ( ! empty( $_GET['wpm_message'] ) ) { + WPM_Admin_Settings::add_message( stripslashes( $_GET['wpm_message'] ) ); + } + } + + /** + * Init the settings page. + */ + public function settings_page() { + WPM_Admin_Settings::output(); + } + + + /** + * Add custom nav meta box. + * + * Adapted from http://www.johnmorrisonline.com/how-to-add-a-fully-functional-custom-meta-box-to-wordpress-navigation-menus/. + */ + public function add_nav_menu_meta_boxes() { + add_meta_box( 'wpm_endpoints_nav_link', __( 'Languages', 'wp-multilang' ), array( $this, 'nav_menu_links' ), 'nav-menus', 'side', 'low' ); + } + + /** + * Output menu link. + */ + public function nav_menu_links() { + global $_nav_menu_placeholder; + $_nav_menu_placeholder = 0 > $_nav_menu_placeholder ? $_nav_menu_placeholder - 1 : -1; + ?> +
+
+
    +
  • + + + + + +
  • +
+
+

+ + + + +

+
+ url ) { + return; + } + + $_key = 'languages_type'; + $key = sprintf( 'menu-item-%s', $_key ); + $id = sprintf( 'edit-%s-%s', $key, $item_id ); + $name = sprintf( '%s[%s]', $_key, $item_id ); + $value = get_post_meta( $item_id, '_menu_item_languages_type', true ); + $class = sprintf( 'field-%s', $_key ); + + $type_options = array( + 'inline' => __( 'Inline', 'wp-multilang' ), + 'single' => __( 'Single', 'wp-multilang' ), + 'dropdown' => __( 'Dropdown', 'wp-multilang' ), + ); + ?> +

+ + +

+ __( 'Both', 'wp-multilang' ), + 'flag' => __( 'Flag', 'wp-multilang' ), + 'name' => __( 'Name', 'wp-multilang' ), + ); + ?> +

+ + +

+ '; + + foreach ( $errors as $error ) { + echo '

' . wp_kses_post( $error ) . '

'; + } + + echo ''; + + // Clear + delete_option( 'wpm_meta_box_errors' ); + } + } + + /** + * Add WPM Meta boxes. + * + * @param string $post_type + */ + public function add_meta_boxes( $post_type ) { + $screen = get_current_screen(); + $screen_id = $screen ? $screen->id : ''; + + if ( ( 'attachment' !== $post_type ) && null !== wpm_get_post_config( $post_type ) ) { + add_meta_box( "wpm-{$post_type}-languages", __( 'Languages', 'wp-multilang' ), __NAMESPACE__ . '\Meta_Boxes\WPM_Meta_Box_Post_Languages::output', $post_type, 'side' ); + } + + // Comment languages. + if ( 'comment' === $screen_id && isset( $_GET['c'] ) ) { + add_meta_box( 'wpm-comment-languages', __( 'Languages', 'wp-multilang' ), __NAMESPACE__ . '\Meta_Boxes\WPM_Meta_Box_Comment_Languages::output', 'comment', 'normal' ); + } + } + + /** + * Check if we're saving, the trigger an action based on the post type. + * + * @param int $post_id + * @param \WP_Post $post + */ + public function save_meta_boxes( $post_id, $post ) { + // $post_id and $post are required + if ( empty( $post_id ) || null === $post || self::$saved_meta_boxes ) { + return; + } + + // Dont' save meta boxes for revisions or autosaves + if ( defined( 'DOING_AUTOSAVE' ) || is_int( wp_is_post_revision( $post ) ) || is_int( wp_is_post_autosave( $post ) ) ) { + return; + } + + // Check the nonce + if ( empty( $_POST['wpm_meta_nonce'] ) || ! wp_verify_nonce( $_POST['wpm_meta_nonce'], 'wpm_save_data' ) ) { + return; + } + + // Check the post being saved == the $post_id to prevent triggering this call for other save_post events + if ( empty( $_POST['post_ID'] ) || (int) $_POST['post_ID'] !== $post_id ) { + return; + } + + // Check user has permission to edit + if ( ! current_user_can( 'edit_post', $post_id ) ) { + return; + } + + self::$saved_meta_boxes = true; + + do_action( 'wpm_process_meta', $post_id, $post ); + do_action( 'wpm_process_' . $post->post_type . '_meta', $post_id, $post ); + } +} diff --git a/wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-notices.php b/wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-notices.php new file mode 100644 index 00000000..fc7e48bd --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-notices.php @@ -0,0 +1,191 @@ + callback. + * @var array + */ + private static $core_notices = array( + 'update' => 'update_notice', + ); + + /** + * Constructor. + */ + public static function init() { + self::$notices = get_option( 'wpm_admin_notices', array() ); + + add_action( 'wp_loaded', array( __CLASS__, 'hide_notices' ) ); + add_action( 'shutdown', array( __CLASS__, 'store_notices' ) ); + + if ( current_user_can( 'manage_translations' ) ) { + add_action( 'admin_print_styles', array( __CLASS__, 'add_notices' ) ); + } + } + + /** + * Store notices to DB + */ + public static function store_notices() { + update_option( 'wpm_admin_notices', self::get_notices() ); + } + + /** + * Get notices + * @return array + */ + public static function get_notices() { + return self::$notices; + } + + /** + * Remove all notices. + */ + public static function remove_all_notices() { + self::$notices = array(); + } + + /** + * Show a notice. + * @param string $name + */ + public static function add_notice( $name ) { + self::$notices = array_unique( array_merge( self::get_notices(), array( $name ) ) ); + + } + + /** + * Remove a notice from being displayed. + * @param string $name + */ + public static function remove_notice( $name ) { + self::$notices = array_diff( self::get_notices(), array( $name ) ); + delete_option( 'wpm_admin_notice_' . $name ); + } + + /** + * See if a notice is being shown. + * @param string $name + * @return boolean + */ + public static function has_notice( $name ) { + return in_array( $name, self::get_notices(), true ); + } + + /** + * Hide a notice if the GET variable is set. + */ + public static function hide_notices() { + if ( isset( $_GET['wpm-hide-notice'], $_GET['_wpm_notice_nonce'] ) ) { + if ( ! wp_verify_nonce( $_GET['_wpm_notice_nonce'], 'wpm_hide_notices_nonce' ) ) { + wp_die( __( 'Action failed. Please refresh the page and retry.', 'wp-multilang' ) ); + } + + if ( ! current_user_can( 'manage_translations' ) ) { + wp_die( __( 'Cheatin’ huh?', 'wp-multilang' ) ); + } + + $hide_notice = sanitize_text_field( $_GET['wpm-hide-notice'] ); + self::remove_notice( $hide_notice ); + do_action( 'wpm_hide_' . $hide_notice . '_notice' ); + } + } + + /** + * Add notices + styles if needed. + */ + public static function add_notices() { + $notices = self::get_notices(); + + if ( ! empty( $notices ) ) { + $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; + + wp_enqueue_style( 'wpm-notices', plugins_url( '/assets/styles/notices' . $suffix . '.css', WPM_PLUGIN_FILE ), array(), WPM_VERSION ); + + foreach ( $notices as $notice ) { + if ( ! empty( self::$core_notices[ $notice ] ) && apply_filters( 'wpm_show_admin_notice', true, $notice ) ) { + add_action( 'admin_notices', array( __CLASS__, self::$core_notices[ $notice ] ) ); + } else { + add_action( 'admin_notices', array( __CLASS__, 'output_custom_notices' ) ); + } + } + } + } + + /** + * Add a custom notice. + * + * @param string $name + * @param string $notice_html + * @param string $type + */ + public static function add_custom_notice( $name, $notice_html, $type = 'success' ) { + self::add_notice( $name ); + $notice = array( + 'notice_html' => wp_kses_post( $notice_html ), + 'type' => $type, + ); + update_option( 'wpm_admin_notice_' . $name, $notice ); + } + + /** + * Output any stored custom notices. + */ + public static function output_custom_notices() { + $notices = self::get_notices(); + + if ( ! empty( $notices ) ) { + foreach ( $notices as $notice ) { + if ( empty( self::$core_notices[ $notice ] ) ) { + $notice_html = get_option( 'wpm_admin_notice_' . $notice ); + + if ( $notice_html ) { + include 'views/html-notice-custom.php'; + } + } + } + } + } + + /** + * If we need to update, include a message with the update button. + */ + public static function update_notice() { + if ( version_compare( get_option( 'wpm_db_version' ), WPM_VERSION, '<' ) ) { + $updater = new WPM_Background_Updater(); + if ( ! empty( $_GET['do_update_wpm'] ) || $updater->is_updating() ) { + include 'views/html-notice-updating.php'; + } else { + include 'views/html-notice-update.php'; + } + } else { + include 'views/html-notice-updated.php'; + } + } +} + + + diff --git a/wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-posts.php b/wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-posts.php new file mode 100644 index 00000000..afc83e4f --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-posts.php @@ -0,0 +1,159 @@ + __( 'Languages', 'wp-multilang' ) ); + + if ( isset( $columns['title'] ) ) { + return wpm_array_insert_after( $columns, 'title', $language ); + } + + if ( isset( $columns['name'] ) ) { + return wpm_array_insert_after( $columns, 'name', $language ); + } + + $columns = array_merge( $columns, $language ); + + return $columns; + } + + + /** + * Output language columns for post types. + * + * @param string $column + */ + public function render_language_column( $column ) { + + if ( 'languages' === $column ) { + + $post = wpm_untranslate_post( get_post() ); + $output = array(); + $text = $post->post_title . $post->post_content; + $strings = wpm_value_to_ml_array( $text ); + $languages = wpm_get_lang_option(); + + foreach ( $languages as $code => $language ) { + if ( isset( $strings[ $code ] ) && ! empty( $strings[ $code ] ) ) { + $output[] = '' . esc_attr( $language['name'] ) . ''; + } + } + + if ( ! empty( $output ) ) { + echo implode( ' ', $output ); + } + } + } + + + /** + * Add indicator for editing post + * + * @param \WP_Post $post + */ + public function add_lang_indicator( $post ) { + + if ( null === wpm_get_post_config( $post->post_type ) && ( wpm_is_ml_string( $post->post_title ) || wpm_is_ml_value( $post->post_content ) ) ) { + + $languages = wpm_get_languages(); + $language = wpm_get_language(); + + ?> +
+ + + <?php echo esc_attr( $languages[ $language ]['name'] ) ; ?> + + + +
+ detect_qtranslate() ) { + WPM_Admin_Notices::add_custom_notice( 'qtranslate_active', sprintf( __( '%s is active. Please deactivate it.', 'wp-multilang' ), $qtranslate ), 'error' ); + } + } + + + /** + * Detects whether qTranslate or qTranslate-X is active. + * Returns the name of the plugin if it's detected, false otherwise. + * + * @return bool|string Either false or the plugin name + */ + private function detect_qtranslate() { + if ( defined( 'QTX_VERSION' ) ) { + return 'qTranslate-X'; + } + if ( defined( 'QT_SUPPORTED_WP_VERSION' ) ) { + return 'qTranslate'; + } + + return false; + } + +} diff --git a/wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-settings.php b/wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-settings.php new file mode 100644 index 00000000..329b85ee --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-settings.php @@ -0,0 +1,595 @@ + 0 ) { + foreach ( self::$errors as $error ) { + echo '

' . esc_html( $error ) . '

'; + } + } elseif ( count( self::$messages ) > 0 ) { + foreach ( self::$messages as $message ) { + echo '

' . esc_html( $message ) . '

'; + } + } + } + + /** + * Settings page. + * + * Handles the display of the main WP Multilang settings page in admin. + */ + public static function output() { + global $current_section, $current_tab; + + $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; + + do_action( 'wpm_settings_start' ); + + wp_enqueue_script( 'wpm_settings', wpm_asset_path( 'scripts/settings' . $suffix . '.js' ), array( 'jquery' ), wpm()->version, true ); + + wp_localize_script( 'wpm_settings', 'wpm_settings_params', array( + 'nav_warning' => __( 'The changes you made will be lost if you navigate away from this page.', 'wp-multilang' ), + ) ); + + // Get tabs for the settings page + $tabs = apply_filters( 'wpm_settings_tabs_array', array() ); + + include __DIR__ . '/views/html-admin-settings.php'; + } + + /** + * Get a setting from the settings API. + * + * @param string $option_name + * @param mixed $default + * + * @return mixed + */ + public static function get_option( $option_name, $default = '' ) { + // Array value + if ( strstr( $option_name, '[' ) ) { + + parse_str( $option_name, $option_array ); + + // Option name is first key + $option_name = current( array_keys( $option_array ) ); + + // Get value + $option_values = get_option( $option_name, '' ); + + $key = key( $option_array[ $option_name ] ); + + if ( isset( $option_values[ $key ] ) ) { + $option_value = $option_values[ $key ]; + } else { + $option_value = null; + } + + // Single value + } else { + $option_value = get_option( $option_name, null ); + } + + if ( is_array( $option_value ) ) { + $option_value = array_map( 'stripslashes', $option_value ); + } elseif ( ! is_null( $option_value ) ) { + $option_value = stripslashes( $option_value ); + } + + return ( null === $option_value ) ? $default : $option_value; + } + + /** + * Output admin fields. + * + * Loops though the WP Multilang options array and outputs each field. + * + * @param array[] $options Opens array to output + */ + public static function output_fields( $options ) { + foreach ( $options as $value ) { + if ( ! isset( $value['type'] ) ) { + continue; + } + if ( ! isset( $value['id'] ) ) { + $value['id'] = ''; + } + if ( ! isset( $value['title'] ) ) { + $value['title'] = isset( $value['name'] ) ? $value['name'] : ''; + } + if ( ! isset( $value['class'] ) ) { + $value['class'] = ''; + } + if ( ! isset( $value['css'] ) ) { + $value['css'] = ''; + } + if ( ! isset( $value['default'] ) ) { + $value['default'] = ''; + } + if ( ! isset( $value['desc'] ) ) { + $value['desc'] = ''; + } + if ( ! isset( $value['desc_tip'] ) ) { + $value['desc_tip'] = false; + } + if ( ! isset( $value['placeholder'] ) ) { + $value['placeholder'] = ''; + } + + // Custom attribute handling + $custom_attributes = array(); + + if ( ! empty( $value['custom_attributes'] ) && is_array( $value['custom_attributes'] ) ) { + foreach ( $value['custom_attributes'] as $attribute => $attribute_value ) { + $custom_attributes[] = esc_attr( $attribute ) . '="' . esc_attr( $attribute_value ) . '"'; + } + } + + // Description handling + $field_description = self::get_field_description( $value ); + extract( $field_description ); + + // Switch based on type + switch ( $value['type'] ) { + + // Section Titles + case 'title': + if ( ! empty( $value['title'] ) ) { + echo '

' . esc_html( $value['title'] ) . '

'; + } + if ( ! empty( $value['desc'] ) ) { + echo wpautop( wptexturize( wp_kses_post( $value['desc'] ) ) ); + } + echo '' . "\n\n"; + if ( ! empty( $value['id'] ) ) { + do_action( 'wpm_settings_' . sanitize_title( $value['id'] ) ); + } + break; + + // Section Ends + case 'sectionend': + if ( ! empty( $value['id'] ) ) { + do_action( 'wpm_settings_' . sanitize_title( $value['id'] ) . '_end' ); + } + echo '
'; + if ( ! empty( $value['id'] ) ) { + do_action( 'wpm_settings_' . sanitize_title( $value['id'] ) . '_after' ); + } + break; + + // Standard text inputs and subtypes like 'number' + case 'text': + case 'email': + case 'number': + case 'password' : + $option_value = self::get_option( $value['id'], $value['default'] ); + + ?> + + + + + + + /> + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
    + $val ) { + ?> +
  • + +
  • + +
+
+ + + + + +
+ +
+ + + + + +
+ + + +
+ ' . wp_kses_post( $description ) . '

'; + } elseif ( $description && $value['type'] === 'checkbox' ) { + $description = wp_kses_post( $description ); + } elseif ( $description ) { + $description = '' . wp_kses_post( $description ) . ''; + } + + if ( $tooltip_html && $value['type'] === 'checkbox' ) { + $tooltip_html = '

' . $tooltip_html . '

'; + } elseif ( $tooltip_html ) { + $tooltip_html = wpm_help_tip( $tooltip_html ); + } + + return array( + 'description' => $description, + 'tooltip_html' => $tooltip_html, + ); + } + + /** + * Save admin fields. + * + * Loops though the WP Multilang options array and outputs each field. + * + * @param array $options Options array to output + * @param array $data Optional. Data to use for saving. Defaults to $_POST. + * @return bool + */ + public static function save_fields( $options, $data = null ) { + if ( null === $data ) { + $data = $_POST; + } + + if ( empty( $data ) ) { + return false; + } + + // Options to update will be stored here and saved later. + $update_options = array(); + + // Loop options and get values to save. + foreach ( $options as $option ) { + if ( ! isset( $option['id'], $option['type'] ) ) { + continue; + } + + // Get posted value. + if ( strpos($option['id'], '[') !== false ) { + parse_str( $option['id'], $option_name_array ); + $option_name = current( array_keys( $option_name_array ) ); + $setting_name = key( $option_name_array[ $option_name ] ); + $raw_value = isset( $data[ $option_name ][ $setting_name ] ) ? wp_unslash( $data[ $option_name ][ $setting_name ] ) : null; + } else { + $option_name = $option['id']; + $setting_name = ''; + $raw_value = isset( $data[ $option['id'] ] ) ? wp_unslash( $data[ $option['id'] ] ) : null; + } + + // Format the value based on option type. + switch ( $option['type'] ) { + case 'checkbox' : + $value = '1' === $raw_value || 'yes' === $raw_value ? 'yes' : 'no'; + break; + case 'textarea' : + $value = wp_kses_post( trim( $raw_value ) ); + break; + case 'multiselect' : + $value = array_filter( array_map( 'wpm_clean', (array) $raw_value ) ); + break; + case 'select': + $allowed_values = empty( $option['options'] ) ? array() : array_keys( $option['options'] ); + if ( empty( $option['default'] ) && empty( $allowed_values ) ) { + $value = null; + break; + } + $default = ( empty( $option['default'] ) ? $allowed_values[0] : $option['default'] ); + $value = in_array( $raw_value, $allowed_values ) ? $raw_value : $default; + break; + default : + $value = wpm_clean( $raw_value ); + break; + } + + /** + * Sanitize the value of an option. + */ + $value = apply_filters( 'wpm_admin_settings_sanitize_option', $value, $option, $raw_value ); + + /** + * Sanitize the value of an option by option name. + */ + $value = apply_filters( "wpm_admin_settings_sanitize_option_$option_name", $value, $option, $raw_value ); + + if ( null === $value ) { + continue; + } + + // Check if option is an array and handle that differently to single values. + if ( $option_name && $setting_name ) { + if ( ! isset( $update_options[ $option_name ] ) ) { + $update_options[ $option_name ] = get_option( $option_name, array() ); + } + if ( ! is_array( $update_options[ $option_name ] ) ) { + $update_options[ $option_name ] = array(); + } + $update_options[ $option_name ][ $setting_name ] = $value; + } else { + $update_options[ $option_name ] = $value; + } + } + + // Save all options in our array. + foreach ( $update_options as $name => $value ) { + update_option( $name, $value ); + } + + return true; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-taxonomies.php b/wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-taxonomies.php new file mode 100644 index 00000000..e6bfff47 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/admin/class-wpm-admin-taxonomies.php @@ -0,0 +1,188 @@ + __( 'Languages', 'wp-multilang' ) ) ); + } + + + /** + * Output language columns for taxonomies. + * + * @param $columns + * @param $column + * @param $term_id + * + * @return string + */ + public function render_language_column( $columns, $column, $term_id ) { + + if ( 'languages' === $column ) { + remove_filter( 'get_term', 'wpm_translate_term', 5 ); + $term = get_term( $term_id ); + add_filter( 'get_term', 'wpm_translate_term', 5, 2 ); + $output = array(); + $text = $term->name . $term->description; + $strings = wpm_value_to_ml_array( $text ); + $languages = wpm_get_lang_option(); + + foreach ( $languages as $code => $language ) { + if ( isset( $strings[ $code ] ) && ! empty( $strings[ $code ] ) ) { + $output[] = '' . esc_attr( $language['name'] ) . ''; + } + } + + if ( ! empty( $output ) ) { + $columns .= implode( ' ', $output ); + } + } + + return $columns; + } + + + /** + * Add languages to insert term form + */ + public function add_taxonomy_fields() { + + $languages = wpm_get_languages(); + $i = 0; + ?> +
+

+ $language ) { ?> + + +
+ term_id, '_languages', true ); + + if ( ! is_array( $term_languages ) ) { + $term_languages = array(); + } + + $languages = wpm_get_languages(); + $i = 0; + ?> + + + +
    + $language ) { ?> +
  • + +
  • + +
+ + + id_base ); + + if ( null === $widget_config ) { + return $instance; + } + + $instance = wpm_set_new_value( $old_instance, $new_instance, $widget_config ); + + return $instance; + } + + + /** + * Add language select field + * + * @param $widget object + * @param $return + * @param object \WP_Widget $instance + */ + public function add_language_fields( $widget, $return, $instance ) { + + if ( null === wpm_get_widget_config( $widget->id_base ) ) { + return; + } + + $instance = wp_parse_args( (array) $instance, array( 'languages' => array() ) ); + $languages = wpm_get_languages(); + $i = 0; + ?> +

+
+ $language ) { ?> +
+ +

+ id ) ) { + // Change the footer text + if ( ! get_option( 'wpm_admin_footer_text_rated' ) ) { + $footer_text = sprintf( + /* translators: 1: WP Multilang 2:: five stars */ + __( 'If you like %1$s please leave us a %2$s rating. A huge thanks in advance!', 'wp-multilang' ), + sprintf( '%s', esc_html__( 'WP Multilang', 'wp-multilang' ) ), + '★★★★★' + ); + wpm_enqueue_js( " + $('a.wpm-rating-link').click( function() { + $.post('" . wpm()->ajax_url() . "', {action: 'wpm_rated'}); + $(this).parent().text($(this).data('rated')); + }); + " ); + } else { + $footer_text = __( 'Thank you for translating with WP Multilang.', 'wp-multilang' ); + } + } + + return $footer_text; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/admin/meta-boxes/class-wpm-meta-box-comment-languages.php b/wp-content/plugins/wp-multilang/includes/admin/meta-boxes/class-wpm-meta-box-comment-languages.php new file mode 100644 index 00000000..71e75501 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/admin/meta-boxes/class-wpm-meta-box-comment-languages.php @@ -0,0 +1,78 @@ +comment_ID, '_languages', true ); + + if ( ! is_array( $comment_languages ) ) { + $comment_languages = array(); + } + + $languages = wpm_get_languages(); + $i = 0; + ?> +

+
    + $language ) { ?> +
  • + +
  • + +
+ comment_post_ID, 'wpm_comment_count' ); + + // Return regular value after updating + return $location; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/admin/meta-boxes/class-wpm-meta-box-post-languages.php b/wp-content/plugins/wp-multilang/includes/admin/meta-boxes/class-wpm-meta-box-post-languages.php new file mode 100644 index 00000000..80a99e4b --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/admin/meta-boxes/class-wpm-meta-box-post-languages.php @@ -0,0 +1,63 @@ +ID, '_languages', true ); + + if ( ! is_array( $post_languages ) ) { + $post_languages = array(); + } + + $languages = wpm_get_languages(); + $i = 0; + ?> +

+
    + $language ) { ?> +
  • + +
  • + +
+ id = 'additional'; + $this->label = __( 'Additional', 'wp-multilang' ); + + parent::__construct(); + + add_action( 'wpm_admin_field_localizations', array( $this, 'localizations' ) ); + add_action( 'wpm_admin_field_qtx_import', array( $this, 'qtx_import' ) ); + } + + /** + * Get settings array. + * + * @return array + */ + public function get_settings() { + + // Hide the save button + $GLOBALS['hide_save_button'] = true; + + $settings = apply_filters( 'wpm_' . $this->id . '_settings', array( + + array( 'title' => __( 'Actions', 'wp-multilang' ), 'type' => 'title', 'desc' => '', 'id' => 'additional_options' ), + + array( + 'title' => __( 'Installed localizations', 'wp-multilang' ), + 'id' => 'wpm_installed_localizations', + 'type' => 'localizations', + ), + + array( + 'title' => __( 'qTranslate import', 'wp-multilang' ), + 'id' => 'wpm_qtx_import', + 'type' => 'qtx_import', + ), + + array( 'type' => 'sectionend', 'id' => 'additional_options' ), + + ) ); + + return apply_filters( 'wpm_get_settings_' . $this->id, $settings ); + } + + /** + * Output the settings. + */ + public function output() { + + $main_params = array( + 'plugin_url' => wpm()->plugin_url(), + 'ajax_url' => admin_url( 'admin-ajax.php' ), + 'delete_localization_nonce' => wp_create_nonce( 'delete-localization' ), + 'qtx_import_nonce' => wp_create_nonce( 'qtx-import' ), + 'confirm_question' => __( 'Are you sure you want to delete this localization?', 'wp-multilang' ), + ); + wp_localize_script( 'wpm_additional_settings', 'wpm_additional_settings_params', $main_params ); + wp_enqueue_script( 'wpm_additional_settings' ); + + parent::output(); + } + + /** + * Get localizations field + * + * @param $value + */ + public function localizations( $value ) { + + $installed_localizations = wpm_get_installed_languages(); + $available_translations = wpm_get_available_translations(); + $options = get_option( 'wpm_languages', array() ); + $active = 0; + ?> + + +

+ + +

+ + +

+

+ + + + + +

+ + +

+ +

+

+ + + id = 'general'; + $this->label = __( 'General', 'wp-multilang' ); + + parent::__construct(); + + add_filter( 'wpm_general_settings', array( $this, 'add_uninstall_setting' ) ); + add_action( 'wpm_update_options_general', array( $this, 'update_wplang' ) ); + } + + /** + * Get settings array. + * + * @return array + */ + public function get_settings() { + + $languages = wpm_get_languages(); + + $language_options = array(); + foreach ( $languages as $code => $language ) { + $language_options[ $code ] = $language['name']; + } + + $settings = apply_filters( 'wpm_general_settings', array( + + array( + 'title' => __( 'General options', 'wp-multilang' ), + 'type' => 'title', + 'desc' => sprintf( __( 'Read Google guidelines before.', 'wp-multilang' ), esc_url( 'https://support.google.com/webmasters/answer/182192?hl=' . wpm_get_user_language() ) ), + 'id' => 'general_options' + ), + + array( + 'title' => __( 'Site Language', 'wp-multilang' ), + 'desc' => __( 'Set default site language.', 'wp-multilang' ), + 'id' => 'wpm_site_language', + 'default' => wpm_get_default_language(), + 'type' => 'select', + 'class' => 'wpm-enhanced-select', + 'css' => 'min-width: 350px;', + 'options' => $language_options, + ), + + array( + 'title' => __( 'Show untranslated', 'wp-multilang' ), + 'desc' => __( 'Show untranslated strings on language by default.', 'wp-multilang' ), + 'id' => 'wpm_show_untranslated_strings', + 'default' => 'yes', + 'type' => 'checkbox', + ), + + array( + 'title' => __( 'Browser redirect', 'wp-multilang' ), + 'desc' => __( 'Use redirect to user browser language in first time.', 'wp-multilang' ), + 'id' => 'wpm_use_redirect', + 'default' => 'no', + 'type' => 'checkbox', + ), + + array( + 'title' => __( 'Use prefix', 'wp-multilang' ), + 'desc' => __( 'Use prefix for language by default.', 'wp-multilang' ), + 'id' => 'wpm_use_prefix', + 'default' => 'no', + 'type' => 'checkbox', + ), + + array( 'type' => 'sectionend', 'id' => 'general_options' ), + + ) ); + + return apply_filters( 'wpm_get_settings_' . $this->id, $settings ); + } + + /** + * Add uninstall settings only for Super Admin + * + * @param $settings + * + * @return array + */ + public function add_uninstall_setting( $settings ) { + + if ( ! is_multisite() || ( is_main_site() ) ) { + $settings[] = array( + 'title' => __( 'Uninstalling', 'wp-multilang' ), + 'type' => 'title', + 'desc' => '', + 'id' => 'uninstall_options', + ); + + $settings[] = array( + 'title' => __( 'Delete translations', 'wp-multilang' ), + 'desc' => __( 'Delete translations when uninstalling plugin (some translations may not be deleted and you must delete them manually).', 'wp-multilang' ), + 'id' => 'wpm_uninstall_translations', + 'default' => 'no', + 'type' => 'checkbox', + ); + + $settings[] = array( 'type' => 'sectionend', 'id' => 'uninstall_options' ); + } + + return $settings; + } + + /** + * Save settings. + */ + public function save() { + $settings = $this->get_settings(); + + WPM_Admin_Settings::save_fields( $settings ); + } + + /** + * Update WPLANG option + */ + public function update_wplang() { + $value = WPM_Admin_Settings::get_option( 'wpm_site_language' ); + $languages = wpm_get_languages(); + $locale = $languages[ $value ]['translation']; + update_option( 'WPLANG', 'en_US' !== $locale ? $locale : '' ); + } +} diff --git a/wp-content/plugins/wp-multilang/includes/admin/settings/class-wpm-settings-languages.php b/wp-content/plugins/wp-multilang/includes/admin/settings/class-wpm-settings-languages.php new file mode 100644 index 00000000..239ebef8 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/admin/settings/class-wpm-settings-languages.php @@ -0,0 +1,149 @@ +id = 'languages'; + $this->label = __( 'Languages', 'wp-multilang' ); + + parent::__construct(); + + add_action( 'wpm_admin_field_languages', array( $this, 'get_languages' ) ); + } + + /** + * Get settings array. + * + * @return array + */ + public function get_settings() { + + $settings = apply_filters( 'wpm_' . $this->id . '_settings', array( + + array( 'title' => __( 'Languages', 'wp-multilang' ), 'type' => 'title', 'desc' => '', 'id' => 'languages_options' ), + + array( + 'title' => __( 'Installed languages', 'wp-multilang' ), + 'id' => 'wpm_languages', + 'type' => 'languages', + ), + + array( 'type' => 'sectionend', 'id' => 'languages_options' ), + + ) ); + + return apply_filters( 'wpm_get_settings_' . $this->id, $settings ); + } + + /** + * Get languages field + * + * @param $value + */ + public function get_languages( $value ) { + + $main_params = array( + 'plugin_url' => wpm()->plugin_url(), + 'flags_dir' => wpm_get_flags_dir(), + 'ajax_url' => admin_url( 'admin-ajax.php' ), + 'delete_lang_nonce' => wp_create_nonce( 'delete-lang' ), + 'confirm_question' => __( 'Are you sure you want to delete this language?', 'wp-multilang' ), + ); + wp_localize_script( 'wpm_languages', 'wpm_languages_params', $main_params ); + + wp_enqueue_script( 'wpm_languages' ); + wp_enqueue_style( 'select2' ); + + $languages = get_option( 'wpm_languages', array() ); + $flags = wpm_get_flags(); + + include_once __DIR__ . '/views/html-languages.php'; + } + + /** + * Save settings. + */ + public function save() { + + if ( $value = wpm_get_post_data_by_key( 'wpm_languages' ) ) { + + $option_name = 'wpm_languages'; + $languages = array(); + $error = false; + $translations = wpm_get_available_translations(); + $installed_languages = wpm_get_installed_languages(); + + foreach ( $installed_languages as $installed_language ) { + if ( isset( $translations[ $installed_language ] ) ) { + unset( $translations[ $installed_language ] ); + } + } + + foreach ( $value as $item ) { + + if ( empty( $item['code'] ) || empty( $item['locale'] ) ) { + $error = true; + break; + } + + $code = wpm_sanitize_lang_slug( $item['code'] ); + + if ( ! $code ) { + $error = true; + break; + } + + $languages[ $code ] = array( + 'enable' => $item['enable'] ? 1 : 0, + 'locale' => $item['locale'], + 'name' => $item['name'], + 'translation' => $item['translation'] ?: 'en_US', + 'date' => $item['date'], + 'time' => $item['time'], + 'flag' => $item['flag'], + ); + + if ( isset( $translations[ $item['translation'] ] ) && wp_can_install_language_pack() && current_user_can( 'install_languages' ) ) { + wp_download_language_pack( $item['translation'] ); + WPM_Admin_Notices::add_custom_notice( + $option_name . '_lang_pack_installed', + __( 'New language pack successfully installed', 'wp-multilang' ) + ); + } + } + + if ( $error ) { + return; + } + + $languages = apply_filters( 'wpm_save_languages', $languages, $value ); + $locale = $languages[ wpm_get_default_language() ]['translation']; + update_option( 'WPLANG', 'en_US' !== $locale ? $locale : '' ); + $user_locale = $languages[ wpm_get_user_language() ]['translation']; + update_user_meta( get_current_user_id(), 'locale', $user_locale ); + + + update_option( $option_name, $languages ); + }// End if(). + } +} diff --git a/wp-content/plugins/wp-multilang/includes/admin/settings/class-wpm-settings-page.php b/wp-content/plugins/wp-multilang/includes/admin/settings/class-wpm-settings-page.php new file mode 100644 index 00000000..da2cd090 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/admin/settings/class-wpm-settings-page.php @@ -0,0 +1,138 @@ +id, array( $this, 'output_sections' ) ); + add_action( 'wpm_settings_' . $this->id, array( $this, 'output' ) ); + add_action( 'wpm_settings_save_' . $this->id, array( $this, 'save' ) ); + } + + /** + * Get settings page ID. + * @return string + */ + public function get_id() { + return $this->id; + } + + /** + * Get settings page label. + * @return string + */ + public function get_label() { + return $this->label; + } + + /** + * Add this page to settings. + * + * @param array $pages + * + * @return mixed + */ + public function add_settings_page( $pages ) { + $pages[ $this->id ] = $this->label; + + return $pages; + } + + /** + * Get settings array. + * + * @return array + */ + public function get_settings() { + return apply_filters( 'wpm_get_settings_' . $this->id, array() ); + } + + /** + * Get sections. + * + * @return array + */ + public function get_sections() { + return apply_filters( 'wpm_get_sections_' . $this->id, array() ); + } + + /** + * Output sections. + */ + public function output_sections() { + global $current_section; + + $sections = $this->get_sections(); + + if ( empty( $sections ) || 1 === sizeof( $sections ) ) { + return; + } + + echo '
    '; + + $array_keys = array_keys( $sections ); + + foreach ( $sections as $id => $label ) { + echo '
  • ' . $label . ' ' . ( end( $array_keys ) == $id ? '' : '|' ) . '
  • '; + } + + echo '

'; + } + + /** + * Output the settings. + */ + public function output() { + $settings = $this->get_settings(); + + WPM_Admin_Settings::output_fields( $settings ); + } + + /** + * Save settings. + */ + public function save() { + global $current_section; + + $settings = $this->get_settings(); + WPM_Admin_Settings::save_fields( $settings ); + + if ( $current_section ) { + do_action( 'wpm_update_options_' . $this->id . '_' . $current_section ); + } + } +} diff --git a/wp-content/plugins/wp-multilang/includes/admin/settings/views/html-languages.php b/wp-content/plugins/wp-multilang/includes/admin/settings/views/html-languages.php new file mode 100644 index 00000000..eb99cc88 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/admin/settings/views/html-languages.php @@ -0,0 +1,210 @@ + + + + + + +
+
+ $language ) { ?> + +
+ +
+ + + + + +
+

+ + + [:] +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + title="" disabled="disabled"> + + + +
+ +
+ +
+ 'wpm_languages[' . $i . '][translation]', + 'id' => 'wpm_languages[' . $i . '][translation]', + 'selected' => $language['translation'], + 'languages' => get_available_languages(), + 'show_available_translations' => current_user_can( 'install_languages' ), + ) ); + ?> +
+ +
+ +
+ +
+ +
+
+
+ +
+
+ + +

+ +

+ + diff --git a/wp-content/plugins/wp-multilang/includes/admin/views/html-admin-settings.php b/wp-content/plugins/wp-multilang/includes/admin/views/html-admin-settings.php new file mode 100644 index 00000000..9b68a1e5 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/admin/views/html-admin-settings.php @@ -0,0 +1,56 @@ + +
+

+
+ +

+ +

+ + + + +

+
+
+ +
+ + + + +
diff --git a/wp-content/plugins/wp-multilang/includes/admin/views/html-notice-custom.php b/wp-content/plugins/wp-multilang/includes/admin/views/html-notice-custom.php new file mode 100644 index 00000000..e36e4572 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/admin/views/html-notice-custom.php @@ -0,0 +1,14 @@ + +
+ + +
diff --git a/wp-content/plugins/wp-multilang/includes/admin/views/html-notice-update.php b/wp-content/plugins/wp-multilang/includes/admin/views/html-notice-update.php new file mode 100644 index 00000000..59a04625 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/admin/views/html-notice-update.php @@ -0,0 +1,19 @@ + +
+

+

+
+ diff --git a/wp-content/plugins/wp-multilang/includes/admin/views/html-notice-updated.php b/wp-content/plugins/wp-multilang/includes/admin/views/html-notice-updated.php new file mode 100644 index 00000000..8e6b375f --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/admin/views/html-notice-updated.php @@ -0,0 +1,15 @@ + +
+ + +

+
diff --git a/wp-content/plugins/wp-multilang/includes/admin/views/html-notice-updating.php b/wp-content/plugins/wp-multilang/includes/admin/views/html-notice-updating.php new file mode 100644 index 00000000..2a131711 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/admin/views/html-notice-updating.php @@ -0,0 +1,13 @@ + +
+

+
diff --git a/wp-content/plugins/wp-multilang/includes/class-wp-multilang.php b/wp-content/plugins/wp-multilang/includes/class-wp-multilang.php new file mode 100644 index 00000000..57c71a44 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/class-wp-multilang.php @@ -0,0 +1,247 @@ +define_constants(); + $this->includes(); + $this->init_hooks(); + + do_action( 'wpm_loaded' ); + } + + /** + * Hook into actions and filters. + */ + private function init_hooks() { + register_activation_hook( __FILE__, array( 'WPM\Includes\WPM_Install', 'install' ) ); + add_action( 'init', array( $this, 'init' ), 0 ); + add_action( 'after_setup_theme', array( $this, 'translate_options' ), 1 ); + } + + /** + * Define WPM Constants. + */ + private function define_constants() { + $this->define( 'WPM_ABSPATH', dirname( WPM_PLUGIN_FILE ) . '/' ); + $this->define( 'WPM_PLUGIN_BASENAME', plugin_basename( WPM_PLUGIN_FILE ) ); + $this->define( 'WPM_VERSION', $this->version ); + } + + /** + * Define constant if not already set. + * + * @param string $name + * @param string|bool $value + */ + private function define( $name, $value ) { + if ( ! defined( $name ) ) { + define( $name, $value ); + } + } + + /** + * What type of request is this? + * + * @param string $type admin, ajax, cron or frontend. + * + * @return bool + */ + private function is_request( $type ) { + switch ( $type ) { + case 'admin': + return is_admin(); + case 'ajax': + return wp_doing_ajax(); + case 'cron': + return defined( 'DOING_CRON' ); + case 'frontend': + return ( ! is_admin() || wp_doing_ajax() ) && ! defined( 'DOING_CRON' ); + default: + return false; + } + } + + /** + * Include required core files used in admin and on the frontend. + */ + public function includes() { + /** + * Core classes. + */ + include_once WPM_ABSPATH . 'includes/wpm-core-functions.php'; + include_once WPM_ABSPATH . 'includes/wpm-widget-functions.php'; + + WPM_Install::init(); + $this->setup = new WPM_Setup(); + + if ( $this->is_request( 'frontend' ) ) { + WPM_Frontend_Scripts::init(); // Frontend Scripts + } + } + + /** + * Translate options + */ + public function translate_options() { + new WPM_Options(); + + if ( is_multisite() ) { + new WPM_Site_Options(); + } + } + + /** + * Init Multilang when WordPress Initialises. + */ + public function init() { + // Before init action. + do_action( 'before_wpm_init' ); + + // Set up localisation. + $this->load_plugin_textdomain(); + + WPM_AJAX::init(); + new WPM_REST_Settings(); + new WPM_Menus(); + new WPM_Posts(); + new WPM_Taxonomies(); + new WPM_Widgets(); + new WPM_Users(); + new WPM_Comments(); + new WPM_Shortcodes(); + + if ( $this->is_request( 'admin' ) ) { + new Admin\WPM_Admin(); + } + + // Init action. + do_action( 'wpm_init' ); + } + + /** + * Load Localisation files. + * + * Note: the first-loaded translation file overrides any following ones if the same translation is present. + */ + public function load_plugin_textdomain() { + load_plugin_textdomain( 'wp-multilang', false, plugin_basename( dirname( WPM_PLUGIN_FILE ) ) . '/languages' ); + } + + /** + * Get the plugin url. + * @return string + */ + public function plugin_url() { + return untrailingslashit( plugins_url( '/', WPM_PLUGIN_FILE ) ); + } + + /** + * Get the plugin path. + * @return string + */ + public function plugin_path() { + return untrailingslashit( plugin_dir_path( WPM_PLUGIN_FILE ) ); + } + + /** + * Get the templates path. + * @return string + */ + public function template_path() { + return $this->plugin_path() . '/templates/'; + } + + /** + * Get the flags path. + * @return string + */ + public function flags_dir() { + return $this->plugin_url() . '/flags/'; + } + + /** + * Get the flags path. + * @return string + */ + public function flags_path() { + return $this->plugin_path() . '/flags/'; + } + + /** + * Get Ajax URL. + * @return string + */ + public function ajax_url() { + return admin_url( 'admin-ajax.php', 'relative' ); + } +} diff --git a/wp-content/plugins/wp-multilang/includes/class-wpm-ajax.php b/wp-content/plugins/wp-multilang/includes/class-wpm-ajax.php new file mode 100644 index 00000000..23ee3847 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/class-wpm-ajax.php @@ -0,0 +1,297 @@ +hide_errors(); + } + } + + /** + * Send headers for WPM Ajax Requests + */ + private static function wpm_ajax_headers() { + send_origin_headers(); + @header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) ); + @header( 'X-Robots-Tag: noindex' ); + send_nosniff_header(); + nocache_headers(); + status_header( 200 ); + } + + /** + * Check for WPM Ajax request and fire action. + */ + public static function do_wpm_ajax() { + global $wp_query; + + if ( ! empty( $_GET['wpm-ajax'] ) ) { + $wp_query->set( 'wpm-ajax', sanitize_text_field( $_GET['wpm-ajax'] ) ); + } + + if ( $action = $wp_query->get( 'wpm-ajax' ) ) { + self::wpm_ajax_headers(); + do_action( 'wpm_ajax_' . sanitize_text_field( $action ) ); + die(); + } + } + + /** + * Hook in methods - uses WordPress ajax handlers (admin-ajax). + */ + public static function add_ajax_events() { + $ajax_events = array( + 'delete_lang' => false, + 'delete_localization' => false, + 'qtx_import' => false, + 'rated' => false, + ); + + foreach ( $ajax_events as $ajax_event => $nopriv ) { + add_action( 'wp_ajax_wpm_' . $ajax_event, array( __CLASS__, $ajax_event ) ); + + if ( $nopriv ) { + add_action( 'wp_ajax_nopriv_wpm_' . $ajax_event, array( __CLASS__, $ajax_event ) ); + + // GP AJAX can be used for frontend ajax requests + add_action( 'wpm_ajax_' . $ajax_event, array( __CLASS__, $ajax_event ) ); + } + } + } + + /** + * Remove installed language files and option + */ + public static function delete_lang() { + + check_ajax_referer( 'delete-lang', 'security' ); + + $language = wpm_get_post_data_by_key( 'language' ); + $options = wpm_get_lang_option(); + + if ( ! $language || ! isset( $options[ $language ] ) || ( wpm_get_user_language() === $language ) || ( wpm_get_default_language() === $language ) ) { + return; + } + + unset( $options[ $language ] ); + + global $wpdb; + $wpdb->update( $wpdb->options, array( 'option_value' => maybe_serialize( $options ) ), array( 'option_name' => 'wpm_languages' ) ); + + die(); + } + + /** + * Remove installed language files and option + */ + public static function delete_localization() { + + check_ajax_referer( 'delete-localization', 'security' ); + + $locale = wpm_get_post_data_by_key( 'locale' ); + $options = wpm_get_lang_option(); + + if ( ! $locale ) { + wp_send_json_error( __( 'No locale sending', 'wp-multilang' ) ); + } + + foreach ( $options as $language ) { + if ( $language['translation'] == $locale ) { + wp_send_json_error( __( 'Localization using', 'wp-multilang' ) ); + } + } + + $files_delete = array(); + $installed_plugin_translations = wp_get_installed_translations( 'plugins' ); + + foreach ( $installed_plugin_translations as $plugin => $translation ) { + if ( isset( $translation[ $locale ] ) ) { + $files_delete[] = WP_LANG_DIR . '/plugins/' . $plugin . '-' . $locale . '.mo'; + $files_delete[] = WP_LANG_DIR . '/plugins/' . $plugin . '-' . $locale . '.po'; + } + } + + $installed_themes_translations = wp_get_installed_translations( 'themes' ); + + foreach ( $installed_themes_translations as $theme => $translation ) { + if ( isset( $translation[ $locale ] ) ) { + $files_delete[] = WP_LANG_DIR . '/themes/' . $theme . '-' . $locale . '.mo'; + $files_delete[] = WP_LANG_DIR . '/themes/' . $theme . '-' . $locale . '.po'; + } + } + + $installed_core_translations = wp_get_installed_translations( 'core' ); + + foreach ( $installed_core_translations as $wp_file => $translation ) { + if ( isset( $translation[ $locale ] ) ) { + $files_delete[] = WP_LANG_DIR . '/' . $wp_file . '-' . $locale . '.mo'; + $files_delete[] = WP_LANG_DIR . '/' . $wp_file . '-' . $locale . '.po'; + } + } + + $files_delete[] = WP_LANG_DIR . '/' . $locale . '.po'; + $files_delete[] = WP_LANG_DIR . '/' . $locale . '.mo'; + + foreach ( $files_delete as $file ) { + wp_delete_file( $file ); + } + + wp_send_json_success( __( 'Localization deleted', 'wp-multilang' ) ); + } + + /** + * Set default language for object + * + * @param $object + * @param $object_config + * + * @return mixed + */ + private static function set_default_language_for_object( $object, $object_config ) { + + $lang = wpm_get_default_language(); + + foreach ( get_object_vars( $object ) as $key => $content ) { + if ( ! isset( $object_config[ $key ] ) ) { + continue; + } + + switch ( $key ) { + case 'attr_title': + case 'post_title': + case 'name': + case 'title': + $object->$key = wpm_set_new_value( $content, wpm_translate_string( $content, $lang ), $object_config[ $key ], $lang ); + break; + case 'post_excerpt': + case 'description': + case 'post_content': + if ( is_serialized_string( $content ) ) { + $content = unserialize( $content ); + $object->$key = serialize( wpm_set_new_value( $content, wpm_translate_value( $content, $lang ), $object_config[ $key ], $lang ) ); + break; + } + + if ( isJSON( $content ) ) { + $content = json_decode( $content, true ); + $object->$key = wp_json_encode( wpm_set_new_value( $content, wpm_translate_value( $content, $lang ), $object_config[ $key ], $lang ) ); + break; + } + + if ( ! wpm_is_ml_string( $content ) ) { + $object->$key = wpm_set_new_value( $content, wpm_translate_string( $content, $lang ), $object_config[ $key ], $lang ); + break; + } + } + } + + return $object; + } + + /** + * Import translations for terms from qTranslate + * + * @author Soft79 + */ + public static function qtx_import() { + + check_ajax_referer( 'qtx-import', 'security' ); + + $term_count = 0; + + if ( $qtranslate_terms = get_option( 'qtranslate_term_name', array() ) ) { + + $taxonomies = get_taxonomies(); + $terms = get_terms( array('taxonomy' => $taxonomies, 'hide_empty' => false ) ); + + foreach ( $terms as $term ) { + $original = $term->name; + + //Translation available? + if ( ! isset( $qtranslate_terms[ $original ] ) ) { + continue; + } + + //Translate the name + $strings = wpm_value_to_ml_array( $original ); + foreach ( $qtranslate_terms[ $original ] as $code => $translation ) { + $strings = wpm_set_language_value( $strings, $translation, array(), $code ); + } + + //Update the name + $term->name = wpm_ml_value_to_string( $strings ); + if ( $term->name !== $original ) { + $result = wp_update_term( $term->term_id, $term->taxonomy, array( 'name' => $term->name ) ); + if ( ! is_wp_error( $result ) ) { + $term_count++; + } + } + } + + delete_option( 'qtranslate_term_name' ); + } + + wp_send_json( sprintf( __( '%d terms were imported successfully.', 'wp-multilang' ), $term_count ) ); + } + + /** + * Triggered when clicking the rating footer. + */ + public static function rated() { + if ( ! current_user_can( 'manage_translations' ) ) { + wp_die( -1 ); + } + update_option( 'wpm_admin_footer_text_rated', 1 ); + wp_die(); + } +} diff --git a/wp-content/plugins/wp-multilang/includes/class-wpm-background-updater.php b/wp-content/plugins/wp-multilang/includes/class-wpm-background-updater.php new file mode 100644 index 00000000..29caea97 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/class-wpm-background-updater.php @@ -0,0 +1,101 @@ +is_process_running() ) { + // Background process already running. + return; + } + + if ( $this->is_queue_empty() ) { + // No data to process. + $this->clear_scheduled_event(); + return; + } + + $this->handle(); + } + + /** + * Schedule fallback event. + */ + protected function schedule_event() { + if ( ! wp_next_scheduled( $this->cron_hook_identifier ) ) { + wp_schedule_event( time() + 10, $this->cron_interval_identifier, $this->cron_hook_identifier ); + } + } + + /** + * Is the updater running? + * @return boolean + */ + public function is_updating() { + return false === $this->is_queue_empty(); + } + + /** + * Task + * + * Override this method to perform any actions required on each + * queue item. Return the modified item for further processing + * in the next pass through. Or, return false to remove the + * item from the queue. + * + * @param string $callback Update callback function + * @return mixed + */ + protected function task( $callback ) { + wpm_maybe_define_constant( 'WPM_UPDATING', true ); + + include_once __DIR__ . '/wpm-update-functions.php'; + + if ( is_callable( $callback ) ) { + call_user_func( $callback ); + } + + return false; + } + + /** + * Complete + * + * Override if applicable, but ensure that the below actions are + * performed, or, call parent::complete(). + */ + protected function complete() { + WPM_Install::update_db_version(); + parent::complete(); + } +} diff --git a/wp-content/plugins/wp-multilang/includes/class-wpm-comments.php b/wp-content/plugins/wp-multilang/includes/class-wpm-comments.php new file mode 100644 index 00000000..98fb49d4 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/class-wpm-comments.php @@ -0,0 +1,135 @@ +object_type}_metadata", array( $this, 'get_meta_field' ), 5, 3 ); + add_filter( "update_{$this->object_type}_metadata", array( $this, 'update_meta_field' ), 99, 5 ); + add_filter( "add_{$this->object_type}_metadata", array( $this, 'add_meta_field' ), 99, 5 ); + add_action( "delete_{$this->object_type}_metadata", array( $this, 'delete_meta_field' ), 99, 3 ); + } + + /** + * Separate comments py languages + * + * @param $query object WP_Comment_Query + * + * @return object WP_Comment_Query + */ + public function filter_comments_by_language( $query ) { + + if ( defined( 'DOING_CRON' ) || ( is_admin() && ! is_front_ajax() ) ) { + return $query; + } + + $lang = get_query_var( 'lang' ); + + if ( ! $lang ) { + $lang = wpm_get_user_language(); + } + + if ( 'all' !== $lang ) { + $meta_query = array( + array( + 'relation' => 'OR', + array( + 'key' => '_languages', + 'compare' => 'NOT EXISTS', + ), + array( + 'key' => '_languages', + 'value' => serialize( $lang ), + 'compare' => 'LIKE', + ), + ), + ); + + if ( isset( $query->query_vars['meta_query'] ) ) { + $meta_query = wp_parse_args( $query->query_vars['meta_query'], $meta_query ); + } + + $query->query_vars['meta_query'] = $meta_query; + } + + return $query; + } + + public function fix_comment_count( $count, $post_id ) { + + if ( defined( 'DOING_CRON' ) || ( is_admin() && ! is_front_ajax() ) ) { + return $count; + } + + $lang = get_query_var( 'lang' ); + + if ( ! $lang ) { + $lang = wpm_get_user_language(); + } + + $count_array = wp_cache_get( $post_id, 'wpm_comment_count' ); + + if ( isset( $count_array[ $lang ] ) ) { + return $count_array[ $lang ]; + } else { + $count_array = array(); + } + + global $wpdb; + + $meta_query = array( + array( + 'relation' => 'OR', + array( + 'key' => '_languages', + 'compare' => 'NOT EXISTS', + ), + array( + 'key' => '_languages', + 'value' => serialize( $lang ), + 'compare' => 'LIKE', + ), + ), + ); + + $meta_sql = get_meta_sql( $meta_query, 'comment', $wpdb->comments, 'comment_ID' ); + + $count = (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->comments} {$meta_sql['join']} WHERE comment_post_ID = %d AND comment_approved = '1' {$meta_sql['where']};", $post_id ) ); + + $count_array[ $lang ] = $count; + wp_cache_add( $post_id, $count_array, 'wpm_comment_count' ); + + return $count; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/class-wpm-config.php b/wp-content/plugins/wp-multilang/includes/class-wpm-config.php new file mode 100644 index 00000000..8e2564dd --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/class-wpm-config.php @@ -0,0 +1,124 @@ + $pd ) { + if ( is_plugin_active( $pf ) ) { + $plugin_slug = dirname( $pf ); + self::$active_plugins[] = $plugin_slug; + $config_file = WP_PLUGIN_DIR . '/' . $plugin_slug . '/wpm-config.json'; + if ( trim( $plugin_slug, '\/.' ) && file_exists( $config_file ) ) { + self::$config_files[ $plugin_slug ] = $config_file; + } + } + } + + foreach ( wp_get_mu_plugins() as $mup ) { + $plugin_dir_name = dirname( $mup ); + $plugin_base_name = basename( $mup, '.php' ); + self::$active_plugins[] = $plugin_base_name; + $plugin_sub_dir = $plugin_dir_name . '/' . $plugin_base_name; + if ( file_exists( $plugin_sub_dir . '/wpm-config.json' ) ) { + $config_file = $plugin_sub_dir . '/wpm-config.json'; + self::$config_files[ $plugin_base_name ] = $config_file; + } + } + } + + /** + * Load configs from WPM + */ + public static function load_core_configs() { + $plugins_config_path = WPM_ABSPATH . 'configs/plugins/'; + foreach ( glob( $plugins_config_path . '*.json' ) as $config_file ) { + $config_name = pathinfo( $config_file, PATHINFO_FILENAME ); + if ( ! isset( $config_files[ $config_name ] ) && in_array( $config_name, self::$active_plugins, true ) ) { + self::$config_files[ $config_name ] = $config_file; + } + } + + $theme_name = get_template(); + $theme_config_file = WPM_ABSPATH . 'configs/themes/' . $theme_name . '.json'; + if ( file_exists( $theme_config_file ) ) { + self::$config_files[ 'theme_' . $theme_name ] = $theme_config_file; + } + } + + /** + * Load configs from current theme + */ + public static function load_theme_config() { + + $config_file = get_template_directory() . '/wpm-config.json'; + if ( file_exists( $config_file ) ) { + self::$config_files[ 'theme_' . get_template() ] = $config_file; + } + + if ( get_template_directory() !== get_stylesheet_directory() ) { + $config_file = get_stylesheet_directory() . '/wpm-config.json'; + if ( file_exists( $config_file ) ) { + self::$config_files[ 'theme_' . get_stylesheet() ] = $config_file; + } + } + } + + /** + * Parsing config files to config array + */ + public static function parse_config_files() { + + $config_files = apply_filters( 'wpm_json_files', self::$config_files ); + + foreach ( $config_files as $name => $file ) { + + $file = apply_filters( "wpm_{$name}_json_file", $file ); + + if ( $file && is_readable( $file ) ) { + $config = json_decode( file_get_contents( $file ), true ); + + if ( is_array( $config ) && ! empty( $config ) ) { + self::$config = wpm_array_merge_recursive( self::$config, $config ); + } + } + } + } +} diff --git a/wp-content/plugins/wp-multilang/includes/class-wpm-frontend-scripts.php b/wp-content/plugins/wp-multilang/includes/class-wpm-frontend-scripts.php new file mode 100644 index 00000000..7267a2a6 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/class-wpm-frontend-scripts.php @@ -0,0 +1,198 @@ + array( + 'src' => wpm_asset_path( 'styles/main' . $suffix . '.css' ), + 'deps' => '', + 'version' => WPM_VERSION, + 'media' => 'all', + ), + ); + + return $styles; + } + + /** + * Register a script for use. + * + * @uses wp_register_script() + * @access private + * + * @param string $handle + * @param string $path + * @param string[] $deps + * @param string $version + * @param boolean $in_footer + */ + private static function register_script( $handle, $path, $deps = array( 'jquery' ), $version = WPM_VERSION, $in_footer = true ) { + self::$scripts[] = $handle; + wp_register_script( $handle, $path, $deps, $version, $in_footer ); + } + + /** + * Register and enqueue a script for use. + * + * @uses wp_enqueue_script() + * @access private + * + * @param string $handle + * @param string $path + * @param string[] $deps + * @param string $version + * @param boolean $in_footer + */ + private static function enqueue_script( $handle, $path = '', $deps = array( 'jquery' ), $version = WPM_VERSION, $in_footer = true ) { + if ( ! in_array( $handle, self::$scripts, true ) && $path ) { + self::register_script( $handle, $path, $deps, $version, $in_footer ); + } + wp_enqueue_script( $handle ); + } + + /** + * Register a style for use. + * + * @uses wp_register_style() + * @access private + * + * @param string $handle + * @param string $path + * @param string[] $deps + * @param string $version + * @param string $media + */ + private static function register_style( $handle, $path, $deps = array(), $version = WPM_VERSION, $media = 'all' ) { + self::$styles[] = $handle; + wp_register_style( $handle, $path, $deps, $version, $media ); + } + + /** + * Register and enqueue a styles for use. + * + * @uses wp_enqueue_style() + * @access private + * + * @param string $handle + * @param string $path + * @param string[] $deps + * @param string $version + * @param string $media + */ + private static function enqueue_style( $handle, $path = '', $deps = array(), $version = WPM_VERSION, $media = 'all' ) { + if ( ! in_array( $handle, self::$styles, true ) && $path ) { + self::register_style( $handle, $path, $deps, $version, $media ); + } + wp_enqueue_style( $handle ); + } + + /** + * Register/queue frontend scripts. + */ + public static function load_scripts() { + + if ( ! did_action( 'before_wpm_init' ) ) { + return; + } + + $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; + + // CSS Styles + if ( $enqueue_styles = self::get_styles() ) { + foreach ( $enqueue_styles as $handle => $args ) { + self::enqueue_style( $handle, $args['src'], $args['deps'], $args['version'], $args['media'] ); + } + } + } + + /** + * Localize a WPM script once. + * @access private + * + * @param string $handle + */ + private static function localize_script( $handle ) { + if ( ! in_array( $handle, self::$wp_localize_scripts, true ) && wp_script_is( $handle ) && ( $data = self::get_script_data( $handle ) ) ) { + $name = str_replace( '-', '_', $handle ) . '_params'; + self::$wp_localize_scripts[] = $handle; + wp_localize_script( $handle, $name, apply_filters( $name, $data ) ); + } + } + + /** + * Return data for script handles. + * @access private + * + * @param string $handle + * + * @return array|bool + */ + private static function get_script_data( $handle ) { + + /*switch ( $handle ) { + + }*/ + + return false; + } + + /** + * Localize scripts only when enqueued. + */ + public static function localize_printed_scripts() { + foreach ( self::$scripts as $handle ) { + self::localize_script( $handle ); + } + } +} diff --git a/wp-content/plugins/wp-multilang/includes/class-wpm-install.php b/wp-content/plugins/wp-multilang/includes/class-wpm-install.php new file mode 100644 index 00000000..4f503ab7 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/class-wpm-install.php @@ -0,0 +1,425 @@ + array( + 'wpm_update_178_datetime_format', + 'wpm_update_178_db_version', + ), + '1.8.0' => array( + 'wpm_update_180_flags', + 'wpm_update_180_db_version', + ), + '2.0.0' => array( + 'wpm_update_200_options', + 'wpm_update_200_db_version', + ), + '2.1.0' => array( + 'wpm_update_210_delete_config', + 'wpm_update_210_db_version', + ), + '2.1.1' => array( + 'wpm_update_211_change_options', + 'wpm_update_211_db_version', + ), + '2.1.4' => array( + 'wpm_update_214_change_syntax', + 'wpm_update_214_db_version', + ), + ); + + /** + * Background update class. + * + * @var object + */ + private static $background_updater; + + /** + * Hook in tabs. + */ + public static function init() { + add_action( 'init', array( __CLASS__, 'check_version' ), 5 ); + add_action( 'init', array( __CLASS__, 'init_background_updater' ), 5 ); + add_action( 'admin_init', array( __CLASS__, 'install_actions' ) ); + add_filter( 'plugin_action_links_' . WPM_PLUGIN_BASENAME, array( __CLASS__, 'plugin_action_links' ) ); + } + + /** + * Init background updates + */ + public static function init_background_updater() { + self::$background_updater = new WPM_Background_Updater(); + } + + /** + * Check WPM version and run the updater is required. + * + * This check is done on all requests and runs if he versions do not match. + */ + public static function check_version() { + if ( get_option( 'wpm_version' ) !== wpm()->version ) { + self::install(); + do_action( 'wpm_updated' ); + } + } + + /** + * Install actions when a update button is clicked within the admin area. + * + * This function is hooked into admin_init to affect admin only. + */ + public static function install_actions() { + if ( ! empty( $_GET['do_update_wpm'] ) ) { + self::update(); + WPM_Admin_Notices::add_notice( 'update' ); + } + if ( ! empty( $_GET['force_update_wpm'] ) ) { + do_action( 'wp_wpm_updater_cron' ); + wp_safe_redirect( admin_url( 'options-general.php?page=wpm-settings' ) ); + exit; + } + } + + /** + * Install WPM. + */ + public static function install() { + if ( ! is_blog_installed() ) { + return; + } + + // Check if we are not already running this routine. + if ( 'yes' === get_transient( 'wpm_installing' ) ) { + return; + } + + // If we made it till here nothing is running yet, lets set the transient now. + set_transient( 'wpm_installing', 'yes', MINUTE_IN_SECONDS * 10 ); + wpm_maybe_define_constant( 'WPM_INSTALLING', true ); + + self::remove_admin_notices(); + self::create_options(); + self::create_roles(); + WPM_Config::load_config_run(); + self::update_wpm_version(); + self::maybe_update_db_version(); + + delete_transient( 'wpm_installing' ); + + // Trigger action + do_action( 'wpm_flush_rewrite_rules' ); + do_action( 'wpm_installed' ); + } + + /** + * Reset any notices added to admin. + * + * @since 2.0.0 + */ + private static function remove_admin_notices() { + WPM_Admin_Notices::init(); + WPM_Admin_Notices::remove_all_notices(); + } + + /** + * Is a DB update needed? + * + * @since 1.7.8 + * + * @return boolean + */ + private static function needs_db_update() { + $current_db_version = get_option( 'wpm_db_version', null ); + $updates = self::get_db_update_callbacks(); + + return ( null !== $current_db_version ) && version_compare( $current_db_version, max( array_keys( $updates ) ), '<' ); + } + + /** + * See if we need to show or run database updates during install. + * + * @since 1.7.8 + */ + private static function maybe_update_db_version() { + if ( self::needs_db_update() ) { + if ( apply_filters( 'wpm_enable_auto_update_db', false ) ) { + self::init_background_updater(); + self::update(); + } else { + WPM_Admin_Notices::add_notice( 'update' ); + } + } else { + self::update_db_version(); + } + } + + /** + * Update WPM version to current. + */ + private static function update_wpm_version() { + + /* fix for update */ + if ( $old_version = get_option( 'wpm_version' ) ) { + if ( version_compare( $old_version, '1.7.7', 'le' ) ) { + add_option( 'wpm_db_version', '1.7.7' ); + } + } + + delete_option( 'wpm_version' ); + add_option( 'wpm_version', wpm()->version ); + } + + /** + * Get list of DB update callbacks. + * + * @since 1.7.8 + * + * @return array + */ + public static function get_db_update_callbacks() { + return self::$db_updates; + } + + /** + * Push all needed DB updates to the queue for processing. + * + * @since 1.7.8 + */ + private static function update() { + $current_db_version = get_option( 'wpm_db_version' ); + $update_queued = false; + + foreach ( self::get_db_update_callbacks() as $version => $update_callbacks ) { + if ( version_compare( $current_db_version, $version, '<' ) ) { + foreach ( $update_callbacks as $update_callback ) { + self::$background_updater->push_to_queue( $update_callback ); + $update_queued = true; + } + } + } + + if ( $update_queued ) { + self::$background_updater->save()->dispatch(); + } + } + + /** + * Update DB version to current. + * + * @since 1.7.8 + * + * @param string $version + */ + public static function update_db_version( $version = null ) { + delete_option( 'wpm_db_version' ); + add_option( 'wpm_db_version', null === $version ? wpm()->version : $version ); + } + + /** + * Default options. + * + * Sets up the default options used on the settings page. + */ + private static function create_options() { + + $settings = WPM_Admin_Settings::get_settings_pages(); + + foreach ( $settings as $section ) { + if ( ! method_exists( $section, 'get_settings' ) ) { + continue; + } + $subsections = array_unique( array_merge( array( '' ), array_keys( $section->get_sections() ) ) ); + + foreach ( $subsections as $subsection ) { + foreach ( $section->get_settings( $subsection ) as $value ) { + if ( isset( $value['default'], $value['id'] ) ) { + $autoload = isset( $value['autoload'] ) ? (bool) $value['autoload'] : true; + add_option( $value['id'], $value['default'], '', ( $autoload ? 'yes' : 'no' ) ); + } + } + } + } + + $languages = array(); + $available_translations = wpm_get_available_translations(); + + foreach ( wpm_get_installed_languages() as $locale ) { + + $code = sanitize_title( current( $available_translations[ $locale ]['iso'] ) ); + $flag = explode( '_', strtolower( $locale ) ); + + $languages[ $code ] = array( + 'enable' => 1, + 'locale' => $locale, + 'name' => $available_translations[ $locale ]['native_name'], + 'translation' => $locale, + 'date' => '', + 'time' => '', + 'flag' => ( isset( $flag[1] ) ? $flag[1] : $flag[0] ) . '.png', + ); + } + + add_option( 'wpm_languages', $languages ); + } + + + /** + * Create roles and capabilities. + */ + public static function create_roles() { + global $wp_roles; + + if ( ! class_exists( 'WP_Roles' ) ) { + return; + } + + if ( ! isset( $wp_roles ) ) { + $wp_roles = new \WP_Roles(); + } + + $capabilities = array( + 'level_7' => true, + 'level_6' => true, + 'level_5' => true, + 'level_4' => true, + 'level_3' => true, + 'level_2' => true, + 'level_1' => true, + 'level_0' => true, + 'read' => true, + 'read_private_pages' => true, + 'read_private_posts' => true, + 'edit_posts' => true, + 'edit_pages' => true, + 'edit_published_posts' => true, + 'edit_published_pages' => true, + 'edit_private_pages' => true, + 'edit_private_posts' => true, + 'edit_others_posts' => true, + 'edit_others_pages' => true, + 'manage_categories' => true, + 'manage_links' => true, + 'upload_files' => true, + ); + + // Translator role + $result = add_role( 'translator', __( 'Translator', 'wp-multilang' ), $capabilities ); + + if ( null === $result ) { + $translator = get_role( 'translator' ); + + foreach ( $capabilities as $cap => $value ) { + $translator->add_cap( $cap ); + } + } + + $capabilities = self::get_core_capabilities(); + + foreach ( $capabilities as $cap_group ) { + foreach ( $cap_group as $cap ) { + $wp_roles->add_cap( 'translator', $cap ); + } + } + + $wp_roles->add_cap( 'administrator', 'manage_translations' ); + } + + /** + * Get capabilities for WP Multilang - these are assigned to translator during installation or reset. + * + * @return array + */ + private static function get_core_capabilities() { + $capabilities = array(); + + $capabilities['core'] = array( + 'manage_translations', + ); + + $capability_types = apply_filters( 'wpm_role_translator_capability_types', array() ); + + foreach ( $capability_types as $capability_type ) { + + $capabilities[ $capability_type ] = array( + // Post type + "edit_{$capability_type}", + "read_{$capability_type}", + "edit_{$capability_type}s", + "edit_others_{$capability_type}s", + "read_private_{$capability_type}s", + "edit_private_{$capability_type}s", + "edit_published_{$capability_type}s", + + // Terms + "manage_{$capability_type}_terms", + "edit_{$capability_type}_terms", + ); + } + + return apply_filters( 'wpm_role_translator_capabilities', $capabilities ); + } + + + /** + * wpm_remove_roles function. + */ + public static function remove_roles() { + global $wp_roles; + + if ( ! class_exists( 'WP_Roles' ) ) { + return; + } + + if ( ! isset( $wp_roles ) ) { + $wp_roles = new \WP_Roles(); + } + + $capabilities = self::get_core_capabilities(); + + foreach ( $capabilities as $cap_group ) { + foreach ( $cap_group as $cap ) { + $wp_roles->remove_cap( 'translator', $cap ); + } + } + + $wp_roles->remove_cap( 'administrator', 'manage_translations' ); + + remove_role( 'translator' ); + } + + /** + * Show action links on the plugin screen. + * + * @param mixed $links Plugin Action links + * + * @return array + */ + public static function plugin_action_links( $links ) { + $action_links = array( + 'settings' => '' . esc_html__( 'Settings', 'wp-multilang' ) . '', + ); + + return array_merge( $action_links, $links ); + } +} diff --git a/wp-content/plugins/wp-multilang/includes/class-wpm-menus.php b/wp-content/plugins/wp-multilang/includes/class-wpm-menus.php new file mode 100644 index 00000000..99b751fc --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/class-wpm-menus.php @@ -0,0 +1,278 @@ +post_type ) ) { + if ( 'nav_menu_item' === $menu_item->post_type ) { + + if ( 'post_type' === $menu_item->type ) { + + $object = get_post_type_object( $menu_item->object ); + + if ( $object ) { + $menu_item->type_label = $object->labels->singular_name; + } else { + $menu_item->type_label = $menu_item->object; + } + + $original_object = get_post( $menu_item->object_id ); + + /** This filter is documented in wp-includes/post-template.php */ + $original_title = apply_filters( 'the_title', $original_object->post_title, $original_object->ID ); + + if ( '' === $original_title ) { + /* translators: %d: ID of a post */ + $original_title = sprintf( __( '#%d (no title)' ), $original_object->ID ); + } + + $menu_item->title = '' === $menu_item->post_title ? $original_title : $menu_item->post_title; + + } elseif ( 'post_type_archive' === $menu_item->type ) { + + $object = get_post_type_object( $menu_item->object ); + + if ( $object ) { + $menu_item->title = '' === $menu_item->post_title ? $object->labels->archives : $menu_item->post_title; + } else { + $menu_item->_invalid = true; + } + + $menu_item->type_label = __( 'Post Type Archive' ); + $menu_item->url = get_post_type_archive_link( $menu_item->object ); + + } elseif ( 'taxonomy' === $menu_item->type ) { + + $object = get_taxonomy( $menu_item->object ); + + if ( $object ) { + $menu_item->type_label = $object->labels->singular_name; + } else { + $menu_item->type_label = $menu_item->object; + } + + $original_title = get_term_field( 'name', $menu_item->object_id, $menu_item->object, 'raw' ); + + if ( is_wp_error( $original_title ) ) { + $original_title = false; + } + + $menu_item->title = '' === $menu_item->post_title ? $original_title : $menu_item->post_title; + + } else { + + $menu_item->type_label = __( 'Custom Link' ); + $menu_item->title = $menu_item->post_title; + }// End if(). + + $menu_item->attr_title = ! isset( $menu_item->attr_title ) ? apply_filters( 'nav_menu_attr_title', $menu_item->post_excerpt ) : $menu_item->attr_title; + if ( ! isset( $menu_item->description ) ) { + $menu_item->description = apply_filters( 'nav_menu_description', wp_trim_words( $menu_item->post_content, 200 ) ); + } + } else { + + $object = get_post_type_object( $menu_item->post_type ); + $menu_item->object = $object->name; + $menu_item->type_label = $object->labels->singular_name; + + if ( '' === $menu_item->post_title ) { + /* translators: %d: ID of a post */ + $menu_item->post_title = sprintf( __( '#%d (no title)' ), $menu_item->ID ); + } + + $menu_item->title = $menu_item->post_title; + + /** This filter is documented in wp-includes/nav-menu.php */ + $menu_item->attr_title = apply_filters( 'nav_menu_attr_title', '' ); + + /** This filter is documented in wp-includes/nav-menu.php */ + $menu_item->description = apply_filters( 'nav_menu_description', '' ); + }// End if(). + } elseif ( isset( $menu_item->taxonomy ) ) { + + $object = get_taxonomy( $menu_item->taxonomy ); + $menu_item->type_label = $object->labels->singular_name; + + $menu_item->title = $menu_item->name; + $menu_item->attr_title = ''; + $menu_item->description = get_term_field( 'description', $menu_item->term_id, $menu_item->taxonomy ); + + }// End if(). + + $menu_item->title = '' === $menu_item->title ? sprintf( __( '#%d (no title)' ), $menu_item->ID ) : $menu_item->title; + + return $menu_item; + } + + + /** + * Translation custom menu link + * + * @param $menu_item + * + * @return mixed + */ + public function translate_menu_url( $menu_item ) { + + if ( 'custom' === $menu_item->object && ! is_admin() ) { + $menu_item->url = wpm_translate_url( $menu_item->url ); + } + + return $menu_item; + } + + /** + * Add languages to menu + * + * @param $items + * + * @return string + */ + public function add_languages_to_menu( $items ) { + + foreach ( $items as $key => $item ) { + + if ( '#wpm-languages' === $item->url ) { + + $languages = wpm_get_languages(); + $count_languages = count( $languages ); + $lang = wpm_get_language(); + $new_items = array(); + $show_type = get_post_meta( $item->ID, '_menu_item_languages_show', true ); + $item_type = get_post_meta( $item->ID, '_menu_item_languages_type', true ); + $i = 1; + $was_current = false; + $first_lang = null; + + foreach ( $languages as $code => $language ) { + $new_item = new \stdClass(); + $new_item->ID = 'language-' . $code; + $new_item->db_id = 'language-' . $code; + $new_item->classes = $item->classes; + $new_item->type = 'language'; + $new_item->menu_item_parent = $item->menu_item_parent; + $new_item->parent_submenu_type = $item->parent_submenu_type; + $new_item->xfn = ''; + $new_item->target = ''; + $language_title = ''; + + if ( $lang === $code ) { + $was_current = true; + $new_item->classes[] = 'active-language'; + $new_item->url = '#'; + $new_item->current = true; + } else { + $new_item->url = esc_url( wpm_translate_current_url( $code ) ); + $new_item->current = false; + } + + if ( ( ( 'flag' === $show_type ) || ( 'both' === $show_type ) ) && ( $language['flag'] ) ) { + $language_title = '' . esc_attr( $language['name'] ) . ''; + } + + if ( ( 'name' === $show_type ) || ( 'both' === $show_type ) ) { + $language_title .= '' . esc_html( $language['name'] ) . ''; + } + + $new_item->title = $language_title; + + if ( 'dropdown' === $item_type ) { + if ( $lang === $code ) { + $new_item->classes[] = 'menu-item-has-children'; + } else { + $new_item->menu_item_parent = 'language-' . $lang; + } + } + + if ( 'single' === $item_type ) { + if ( 1 === $i ) { + $first_lang = $new_item; + } + + if ( ( $i === $count_languages ) && ( $lang === $code ) && $first_lang ) { + $new_items[] = $first_lang; + break; + } + + if ( $lang !== $code && $was_current ) { + $new_items[] = $new_item; + break; + } + + $i++; + continue; + } + + $new_items[] = $new_item; + }// End foreach(). + + $items = wpm_array_insert_after( $items, $key, $new_items ); + $sorted_array = array(); + + foreach ( $items as $k => $v ) { + $order = $k + 1; + $v->menu_order = $order; + $sorted_array[ $order ] = $v; + } + + $items = $sorted_array; + unset( $items[ $key ] ); + break; + }// End if(). + }// End foreach(). + + return $items; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/class-wpm-options.php b/wp-content/plugins/wp-multilang/includes/class-wpm-options.php new file mode 100644 index 00000000..3e885d5f --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/class-wpm-options.php @@ -0,0 +1,68 @@ +options_config = $config['options']; + + foreach ( $this->options_config as $key => $option ) { + add_filter( "option_{$key}", 'wpm_translate_value', 5 ); + add_action( "add_option_{$key}", 'update_option', 99, 2 ); + add_filter( "pre_update_option_{$key}", array( $this, 'wpm_update_option' ), 99, 3 ); + } + } + + + /** + * Update options with translate + * + * @param $value + * @param $old_value + * @param $option + * + * @return array|bool|mixed|string + */ + public function wpm_update_option( $value, $old_value, $option ) { + + if ( wpm_is_ml_value( $value ) ) { + return $value; + } + + $this->options_config[ $option ] = apply_filters( "wpm_option_{$option}_config", isset( $this->options_config[ $option ] ) ? $this->options_config[ $option ] : null ); + + if ( null === $this->options_config[ $option ] ) { + return $value; + } + + remove_filter( "option_{$option}", 'wpm_translate_value', 5 ); + $old_value = get_option( $option ); + add_filter( "option_{$option}", 'wpm_translate_value', 5 ); + $value = wpm_set_new_value( $old_value, $value, $this->options_config[ $option ] ); + + return $value; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/class-wpm-posts.php b/wp-content/plugins/wp-multilang/includes/class-wpm-posts.php new file mode 100644 index 00000000..54f568aa --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/class-wpm-posts.php @@ -0,0 +1,225 @@ +object_type}_metadata", array( $this, 'get_meta_field' ), 5, 3 ); + add_filter( "update_{$this->object_type}_metadata", array( $this, 'update_meta_field' ), 99, 5 ); + add_filter( "add_{$this->object_type}_metadata", array( $this, 'add_meta_field' ), 99, 5 ); + add_action( "delete_{$this->object_type}_metadata", array( $this, 'delete_meta_field' ), 99, 3 ); + add_action( 'wp', array( $this, 'translate_queried_object' ), 5 ); + add_filter( 'wp_insert_post_data', array( $this, 'save_post' ), 99, 2 ); + add_filter( 'wp_insert_attachment_data', array( $this, 'save_post' ), 99, 2 ); + add_filter( 'wp_get_attachment_link', array( $this, 'translate_attachment_link' ), 5 ); + } + + + /** + * Translate all posts + * + * @param $posts + * + * @return array + */ + public function translate_posts( $posts ) { + foreach ( $posts as &$post ) { + $post = wpm_translate_post( $post ); + } + + return $posts; + } + + /** + * Separate posts py languages + * + * @param $query object WP_Query + * + * @return object WP_Query + */ + public function filter_posts_by_language( $query ) { + + if ( defined( 'DOING_CRON' ) || ( is_admin() && ! is_front_ajax() ) ) { + return $query; + } + + if ( isset( $query->query_vars['post_type'] ) && ! empty( $query->query_vars['post_type'] ) ) { + $post_type = $query->query_vars['post_type']; + if ( is_string( $post_type ) && null === wpm_get_post_config( $post_type ) ) { + return $query; + } + } + + $lang = get_query_var( 'lang' ); + + if ( ! $lang ) { + $lang = wpm_get_user_language(); + } + + if ( 'all' !== $lang ) { + $lang_meta_query = array( + array( + 'relation' => 'OR', + array( + 'key' => '_languages', + 'compare' => 'NOT EXISTS', + ), + array( + 'key' => '_languages', + 'value' => serialize( $lang ), + 'compare' => 'LIKE', + ), + ), + ); + + if ( isset( $query->query_vars['meta_query'] ) ) { + $lang_meta_query = wp_parse_args( $query->query_vars['meta_query'], $lang_meta_query ); + } + + $query->set( 'meta_query', $lang_meta_query ); + } + + return $query; + } + + + /** + * Translate queried object in global $wp_query + */ + public function translate_queried_object() { + global $wp_query; + + if ( ( $post = $wp_query->queried_object ) && ( is_singular() || is_home() ) ) { + if ( null !== wpm_get_post_config( $post->post_type ) ) { + $wp_query->queried_object = wpm_translate_post( $post ); + } + } + } + + + /** + * Update post with translation + * + * @param $data + * @param $postarr + * + * @return mixed + */ + public function save_post( $data, $postarr ) { + + if ( 'auto-draft' === $data['post_status'] ) { + return $data; + } + + $post_config = wpm_get_post_config( $data['post_type'] ); + + if ( null === $post_config ) { + return $data; + } + + if ( 'attachment' !== $data['post_type'] ) { + + if ( 'trash' === $postarr['post_status'] ) { + return $data; + } + + if ( isset( $_GET['action'] ) && 'untrash' === $_GET['action'] ) { + return $data; + } + } + + $post_id = isset( $data['ID'] ) ? wpm_clean( $data['ID'] ) : ( isset( $postarr['ID'] ) ? wpm_clean( $postarr['ID'] ) : 0 ); + + foreach ( $data as $key => $content ) { + if ( isset( $post_config[ $key ] ) ) { + + $post_field_config = apply_filters( "wpm_post_{$data['post_type']}_field_{$key}_config", $post_config[ $key ], $content ); + $post_field_config = apply_filters( "wpm_post_field_{$key}_config", $post_field_config, $content ); + + + if ( $post_id ) { + $old_value = get_post_field( $key, $post_id, 'edit' ); + } else { + $old_value = ''; + } + + if ( ! wpm_is_ml_value( $data[ $key ] ) ) { + $data[ $key ] = wpm_set_new_value( $old_value, $data[ $key ], $post_field_config ); + } + } + } + + if ( 'nav_menu_item' === $data['post_type'] ) { + $screen = get_current_screen(); + + if ( 'POST' === $_SERVER['REQUEST_METHOD'] && 'update' === $_POST['action'] && ( $screen && 'nav-menus' === $screen->id ) ) { + // hack to get wp to create a post object when too many properties are empty + if ( '' === $data['post_title'] && '' === $data['post_content'] ) { + $data['post_content'] = ' '; + } + } + } + + if ( empty( $data['post_name'] ) ) { + $data['post_name'] = sanitize_title( wpm_translate_value( $data['post_title'] ) ); + } + + return $data; + } + + + /** + * Translate attachment link + * + * @param string $link + * + * @return string + */ + public function translate_attachment_link( $link ) { + $text = strip_tags( $link ); + $translated_text = wpm_translate_string( $text ); + + return str_replace( $text, $translated_text, $link ); + } +} diff --git a/wp-content/plugins/wp-multilang/includes/class-wpm-rest-settings.php b/wp-content/plugins/wp-multilang/includes/class-wpm-rest-settings.php new file mode 100644 index 00000000..834dd07f --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/class-wpm-rest-settings.php @@ -0,0 +1,211 @@ + __( 'Site Language', 'wp-multilang' ), + 'type' => 'string', + 'default' => false, + 'show_in_rest' => array( + 'name' => 'site_language', + ), + ) ); + + $language_options = apply_filters( 'wpm_rest_schema_languages', array( + 'enable' => array( + 'type' => 'boolean', + ), + 'code' => array( + 'type' => 'string', + ), + 'locale' => array( + 'type' => 'string', + ), + 'name' => array( + 'type' => 'string', + ), + 'translation' => array( + 'type' => 'string', + ), + 'date' => array( + 'type' => 'string', + ), + 'time' => array( + 'type' => 'string', + ), + 'flag' => array( + 'type' => 'string', + ), + )); + + register_setting( 'wpm-settings', 'wpm_languages', array( + 'description' => __( 'Multilingual Settings', 'wp-multilang' ), + 'default' => array(), + 'show_in_rest' => array( + 'name' => 'multilingual_settings', + 'schema' => array( + 'type' => 'array', + 'items' => array( + 'type' => 'object', + 'properties' => $language_options, + ), + ), + ), + ) ); + } + + /** + * Ges site languages + * + * @since 1.8.0 + * + * @param $value + * @param $name + * @param $args + * + * @return array + */ + public function get_languages_setting( $value, $name, $args ) { + + if ( 'multilingual_settings' !== $name ) { + return $value; + } + + $languages = get_option( $args['option_name'], $args['schema']['default'] ); + $format_languages = array(); + + foreach ( $languages as $locale => $language ) { + $language['locale'] = $locale; + $format_languages[] = $language; + } + + return $format_languages; + } + + /** + * Save WPM languages + * + * @param $updated + * @param $name + * @param $request + * + * @return bool + * + */ + public function update_languages_setting( $updated, $name, $request ) { + + if ( 'multilingual_settings' !== $name || ! current_user_can( 'manage_options' ) ) { + return $updated; + } + + $request = wpm_clean( $request ); + $languages = array(); + + if ( $request ) { + $error = false; + $translations = wpm_get_available_translations(); + $installed_languages = wpm_get_installed_languages(); + + foreach ( $installed_languages as $installed_language ) { + if ( isset( $translations[ $installed_language ] ) ) { + unset( $translations[ $installed_language ] ); + } + } + + foreach ( $request as $item ) { + + if ( empty( $item['code'] ) || empty( $item['locale'] ) ) { + $error = true; + break; + } + + $code = wpm_sanitize_lang_slug( $item['code'] ); + + if ( ! $code ) { + break; + } + + $languages[ $code ] = array( + 'enable' => $item['enable'] ? 1 : 0, + 'locale' => $item['locale'], + 'name' => $item['name'], + 'translation' => $item['translation'] ?: 'en_US', + 'date' => $item['date'], + 'time' => $item['time'], + 'flag' => $item['flag'], + ); + + if ( isset( $translations[ $item['translation'] ] ) && wp_can_install_language_pack() && ( ! is_multisite() || is_super_admin() ) ) { + wp_download_language_pack( $item['translation'] ); + } + } + + + if ( ! $error ) { + $languages = apply_filters( 'wpm_save_languages', $languages, $request ); + $locale = $languages[ wpm_get_default_language() ]['translation']; + update_option( 'WPLANG', 'en_US' !== $locale ? $locale : '' ); + update_option( 'wpm_languages', $languages ); + } + }// End if(). + + return true; + } + + + /** + * Save site language + * + * @since 2.0.0 + * + * @param $updated + * @param $name + * @param $request + * + * @return mixed + */ + public function update_site_language_setting( $updated, $name, $request ) { + + if ( 'site_language' !== $name || ! current_user_can( 'manage_options' ) ) { + return $updated; + } + + $request = wpm_clean( $request ); + $languages = wpm_get_languages(); + $locale = $languages[ $request ]['translation']; + + if ( $languages ) { + update_option( 'WPLANG', 'en_US' !== $locale ? $locale : '' ); + } + + return $updated; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/class-wpm-setup.php b/wp-content/plugins/wp-multilang/includes/class-wpm-setup.php new file mode 100644 index 00000000..70ac0ebb --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/class-wpm-setup.php @@ -0,0 +1,838 @@ +original_home_url ) { + $this->original_home_url = untrailingslashit( home_url() ); + } + + return $this->original_home_url; + } + + /** + * Get original request url + * + * @since 1.7.0 + * + * @return string + */ + private function get_original_request_uri() { + return $this->original_request_uri ?: '/'; + } + + /** + * Get site request url + * + * @since 2.0.1 + * + * @return string + */ + private function get_site_request_uri() { + if ( ! $this->site_request_uri ) { + $original_uri = $this->get_original_request_uri(); + + if ( isset( $_GET['lang'] ) ) { + $site_request_uri = $original_uri; + if ( $url_lang = $this->get_lang_from_url() ) { + $site_request_uri = str_replace( '/' . $url_lang . '/', '/', $original_uri ); + } + } else { + $site_request_uri = str_replace( home_url(), '', $this->get_original_home_url() . $original_uri ); + } + + $this->site_request_uri = $site_request_uri ?: '/'; + } + + return $this->site_request_uri ; + } + + /** + * Get installed languages + * + * @return array + */ + public function get_installed_languages() { + if ( ! $this->installed_languages ) { + $this->installed_languages = wp_parse_args( get_available_languages(), array( 'en_US' ) ); + } + + return $this->installed_languages; + } + + /** + * Get enables languages. Add installed languages to options. + * + * @return array + */ + public function get_languages() { + if ( ! $this->languages ) { + $options = self::get_option( 'languages', array() ); + $languages = array(); + + if ( version_compare( self::get_option( 'version' ), + '2.0.0', + '<' ) ) { + return array(); + } + + foreach ( $options as $code => $language ) { + if ( $language['enable'] ) { + $languages[ $code ] = $language; + } + } + + $this->languages = $languages; + } + + return $this->languages; + } + + /** + * Get site locale from options + * + * @return string + */ + public function get_default_locale() { + if ( ! $this->default_locale ) { + $option_lang = get_option( 'WPLANG' ); + $this->default_locale = $option_lang ?: 'en_US'; + } + + return $this->default_locale; + } + + /** + * Get site language + * + * @since 2.0.0 + * + * @return string + */ + public function get_default_language() { + if ( ! $this->default_language ) { + $default_language = self::get_option( 'site_language', false ); + + if ( ! $default_language ) { + $locale = explode( '_', $this->get_default_locale() ); + $default_language = $locale[0]; + } + + $this->default_language = $default_language; + } + + return $this->default_language; + } + + /** + * Set site locale + * + * @since 2.0.0 + * + * @param $locale + * + * @return mixed + */ + public function set_locale( $locale ) { + + $languages = $this->get_languages(); + + if ( ! $languages ) { + return $locale; + } + + if ( isset( $languages[ $this->get_user_language() ] ) ) { + return $languages[ $this->get_user_language() ]['translation']; + } + + return $this->get_default_locale(); + } + + /** + * Get user language + * + * @return string + */ + public function get_user_language() { + if ( ! $this->user_language ) { + $this->user_language = $this->set_user_language(); + } + + return $this->user_language; + } + + /** + * Set user language for frontend from url or browser + * Set admin language from cookie or url + */ + private function set_user_language() { + + if ( defined( 'WP_CLI' ) ) { + return $this->get_default_language(); + } + + $languages = $this->get_languages(); + $url = ''; + $user_language = ''; + + require_once ABSPATH . WPINC . '/pluggable.php'; + + if ( ! is_admin() ) { + $url = wpm_get_current_url(); + } + + if ( is_front_ajax() ) { + $url = wp_get_raw_referer(); + add_filter( 'get_user_metadata', array( $this, 'set_user_locale' ), 10, 4 ); + } + + if ( $url ) { + $this->original_request_uri = str_replace( set_url_scheme( $this->get_original_home_url() ), '', $url ); + + if ( $url_lang = $this->get_lang_from_url() ) { + $user_language = $url_lang; + } + } + + if ( isset( $_REQUEST['lang'] ) ) { + $lang = wpm_clean( $_REQUEST['lang'] ); + if ( isset( $languages[ $lang ] ) ) { + $user_language = $lang; + + if ( is_admin() && ! is_front_ajax() ) { + nocache_headers(); + update_user_meta( get_current_user_id(), 'user_lang', $lang ); + update_user_meta( get_current_user_id(), 'locale', $languages[ $lang ]['translation'] ); + } + } else { + if ( ! is_admin() ) { + add_action( 'template_redirect', array( $this, 'set_not_found' ) ); + } + } + } else { + if ( is_admin() && ! is_front_ajax() ) { + if ( $user_meta_language = get_user_meta( get_current_user_id(), 'user_lang', true ) ) { + if ( isset( $languages[ $user_meta_language ] ) ) { + $user_language = $user_meta_language; + } + } else { + update_user_meta( get_current_user_id(), 'user_lang', $this->get_default_language() ); + update_user_meta( get_current_user_id(), 'locale', $this->get_default_locale() ); + } + } elseif ( ! is_admin() && preg_match( '/^.*\.php$/i', wp_parse_url( $url, PHP_URL_PATH ) ) ) { + if ( isset( $_COOKIE['language'] ) ) { + $user_language = wpm_clean( $_COOKIE['language'] ); + } + } + } + + if ( ! $user_language || ! isset( $languages[ $user_language ] ) ) { + $user_language = $this->get_default_language(); + } + + return $user_language; + } + + /** + * Redirect to default language + */ + public function redirect_default_url() { + $user_language = $this->get_user_language(); + $default_language = $this->get_default_language(); + $url_lang = $this->get_lang_from_url(); + + if ( ! isset( $_GET['lang'] ) ) { + if ( self::get_option( 'use_prefix', 'no' ) === 'yes' ) { + if ( ! $url_lang ) { + wp_redirect( home_url( $this->get_original_request_uri() ) ); + exit; + } + } else { + if ( $url_lang && $user_language === $default_language ) { + wp_redirect( home_url( preg_replace( '!^/' . $url_lang . '(/|$)!i', '/', $this->get_original_request_uri() ) ) ); + exit; + } + } + } + + if ( isset( $_GET['lang'] ) && ! empty( $_GET['lang'] ) && $url_lang ) { + wp_redirect( $this->get_original_home_url() . $this->get_site_request_uri() ); + exit; + } + } + + /** + * Fix redirect when using lang param in $_GET + * + * @since 2.1.5 + * + * @param string $redirect_url + * + * @return string + */ + public function fix_canonical_redirect( $redirect_url ) { + if ( isset( $_GET['lang'] ) && ! empty( $_GET['lang'] ) ) { + $redirect_url = str_replace( home_url(), $this->get_original_home_url(), $redirect_url ); + } + + return $redirect_url; + } + + /** + * Get available translations + * + * @return array + */ + public function get_translations() { + if ( ! $this->translations ) { + require_once ABSPATH . 'wp-admin/includes/translation-install.php'; + $available_translations = wp_get_available_translations(); + $available_translations['en_US'] = array( + 'native_name' => 'English (US)', + 'iso' => array( 'en' ), + ); + + $this->translations = $available_translations; + } + + return $this->translations; + } + + /** + * Get config from options + * + * @return array + */ + public function get_config() { + + if ( ! $this->config ) { + if ( ! $config = wp_cache_get( 'config', 'wpm' ) ) { + WPM_Config::load_config_run(); + $config = WPM_Config::$config; + } + + $this->config = $config; + } + + $config = apply_filters( 'wpm_load_config', $this->config ); + $config['options'] = apply_filters( 'wpm_options_config', $config['options'] ); + + if ( is_multisite() ) { + $config['site_options'] = apply_filters( 'wpm_site_options_config', $config['site_options'] ); + } else { + unset( $config['site_options'] ); + } + + return $config; + } + + /** + * Add lang slug to home url + * + * @param $value + * + * @return string + */ + public function set_home_url( $value ) { + + if ( ! $value || ! $this->user_language || ! did_action( 'wpm_init' ) || ( ! empty( $_GET['lang'] ) && ! did_action( 'parse_request' ) ) || ( is_admin() && ! is_front_ajax() ) ) { + return $value; + } + + $user_language = wpm_get_user_language(); + $default_language = wpm_get_default_language(); + + if ( ( ( $user_language !== $default_language ) || ( self::get_option( 'use_prefix', 'no' ) === 'yes' ) ) && get_option( 'permalink_structure' ) ) { + $value .= '/' . $user_language; + } + + return $value; + } + + /** + * Load integration classes + */ + public function load_integrations() { + + do_action( 'wpm_integrations_init' ); + + $integrations = apply_filters( 'wpm_integrations', array( + 'advanced-custom-fields' => __NAMESPACE__ . '\Integrations\WPM_Acf', + 'advanced-custom-fields-pro' => __NAMESPACE__ . '\Integrations\WPM_Acf', + 'all-in-one-seo-pack' => __NAMESPACE__ . '\Integrations\WPM_AIOSP', + 'better-search' => __NAMESPACE__ . '\Integrations\WPM_Better_Search', + 'buddypress' => __NAMESPACE__ . '\Integrations\WPM_BuddyPress', + 'contact-form-7' => __NAMESPACE__ . '\Integrations\WPM_CF7', + 'js_composer' => __NAMESPACE__ . '\Integrations\WPM_VC', + 'mailchimp-for-wp' => __NAMESPACE__ . '\Integrations\WPM_MailChimp_For_WP', + 'masterslider' => __NAMESPACE__ . '\Integrations\WPM_Masterslider', + 'megamenu' => __NAMESPACE__ . '\Integrations\WPM_Megamenu', + 'newsletter' => __NAMESPACE__ . '\Integrations\WPM_Newsletter', + 'nextgen-gallery' => __NAMESPACE__ . '\Integrations\WPM_NGG', + 'siteorigin-panels' => __NAMESPACE__ . '\Integrations\WPM_PBSO', + 'tablepress' => __NAMESPACE__ . '\Integrations\WPM_Tablepress', + 'woocommerce' => __NAMESPACE__ . '\Integrations\WPM_WooCommerce', + 'wordpress-seo' => __NAMESPACE__ . '\Integrations\WPM_Yoast_Seo', + 'seo-by-rank-math' => __NAMESPACE__ . '\Integrations\WPM_Rank_Math', + ) ); + + $active_plugins = wp_cache_get( 'active_plugins', 'wpm' ); + + if ( is_array( $active_plugins ) ) { + foreach ( $active_plugins as $plugin ) { + if ( ! empty( $integrations[ $plugin ] ) ) { + $integration = apply_filters( "wpm_{$plugin}_integration", $integrations[ $plugin ] ); + new $integration(); + } + } + } + } + + /** + * Set 404 headers for not available language + */ + public function set_not_found() { + global $wp_query; + $wp_query->set_404(); + status_header( 404 ); + nocache_headers(); + } + + /** + * Add 'lang' param to allow params + * + * @param $public_query_vars + * + * @return array + */ + public function set_lang_var( $public_query_vars ) { + $public_query_vars[] = 'lang'; + + return $public_query_vars; + } + + /** + * Add query var 'lang' in global request + * + * @param $request + * + * @return object WP + */ + public function setup_query_var( $request ) { + if ( isset( $_GET['lang'] ) || ( isset( $request->query_vars['paged'] ) && count( $request->query_vars ) === 1 ) || ( '/' === wp_parse_url( $this->get_site_request_uri(), PHP_URL_PATH ) ) ) { + return $request; + } + + $request->query_vars['lang'] = $this->get_user_language(); + + return $request; + } + + /** + * Fix home page if isset 'lang' GET parameter + * + * @param $query_vars + * + * @return array + */ + public function set_home_page( $query_vars ) { + if ( isset( $_GET['lang'] ) && ( ( '/' === wp_parse_url( $this->get_site_request_uri(), PHP_URL_PATH ) ) || ( count( $query_vars ) === 2 && isset( $query_vars['paged'] ) ) ) ) { + unset( $query_vars['lang'] ); + } + + return $query_vars; + } + + /** + * Redirect to browser language + */ + public function redirect_to_user_language() { + + if ( ! defined( 'WP_CLI' ) && ! is_admin() ) { + $user_language = $this->get_user_language(); + + if ( ! isset( $_COOKIE['language'] ) ) { + + wpm_setcookie( 'language', $user_language, time() + YEAR_IN_SECONDS ); + + if ( self::get_option( 'use_redirect', 'no' ) === 'yes' ) { + + $browser_language = $this->get_browser_language(); + + if ( $browser_language && ( $browser_language !== $user_language ) ) { + wp_redirect( wpm_translate_current_url( $browser_language ) ); + exit; + } + } + } else { + if ( wpm_clean( $_COOKIE['language'] ) !== $user_language ) { + wpm_setcookie( 'language', $user_language, time() + YEAR_IN_SECONDS ); + do_action( 'wpm_changed_language' ); + } + } // End if(). + } // End if(). + } + + /** + * Detect browser language + * + * @return string + */ + private function get_browser_language() { + + if ( ! isset( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) || ! $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) { + return ''; + } + + if ( ! preg_match_all( '#([^;,]+)(;[^,0-9]*([0-9\.]+)[^,]*)?#i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches, PREG_SET_ORDER ) ) { + return ''; + } + + $detect = ''; + $prefered_languages = array(); + $priority = 1.0; + + foreach ( $matches as $match ) { + if ( ! isset( $match[3] ) ) { + $pr = $priority; + $priority -= 0.001; + } else { + $pr = (float)$match[3]; + } + $prefered_languages[ str_replace( '-', '_', $match[1] ) ] = $pr; + } + + arsort( $prefered_languages, SORT_NUMERIC ); + + $browser_languages = array_keys( $prefered_languages ); + $languages = $this->get_languages(); + + foreach ( $browser_languages as $browser_language ) { + foreach ( $languages as $key => $value ) { + if ( ! $locale = $value['locale'] ) { + $locale = $value['translation']; + } + + $locale = str_replace( '-', '_', $locale ); + + if ( $browser_language === $locale || wpm_sanitize_lang_slug( $browser_language ) === $key ) { + $detect = $key; + break 2; + } + } + } + + return $detect; + } + + /** + * Set user locale for AJAX front requests + * + * @param $check + * @param $object_id + * @param $meta_key + * @param $single + * + * @return array|string + */ + public function set_user_locale( $check, $object_id, $meta_key, $single ) { + if ( 'locale' === $meta_key ) { + if ( $single ) { + $check = get_locale(); + } else { + $check = array( get_locale() ); + } + } + + return $check; + } + + /** + * Fix REST url + * + * @param $url + * + * @return string + */ + public function fix_rest_url( $url ) { + if ( ! self::get_option( 'use_prefix', 'no' ) === 'yes' && wpm_get_language() != wpm_get_default_language() ) { + $url = str_replace( '/' . wpm_get_language() . '/', '/', $url ); + } + + return $url; + } + + /** + * Set date format for current language + * + * @since 1.8.0 + * + * @param $value + * + * @return string + */ + public function set_date_format( $value ) { + + require_once ABSPATH . 'wp-admin/includes/screen.php'; + + if ( is_admin() && ! is_front_ajax() ) { + $screen = get_current_screen(); + if ( $screen && 'options-general' === $screen->id ) { + return $value; + } + } + + if ( defined( 'REST_REQUEST' ) && ( '/wp/v2/settings' === $GLOBALS['wp']->query_vars['rest_route'] ) ) { + return $value; + } + + $languages = $this->get_languages(); + $user_language = $this->get_user_language(); + + if ( ! empty( $languages[ $user_language ]['date'] ) ) { + return $languages[ $user_language ]['date']; + } + + return $value; + } + + /** + * Set time format for current language + * + * @since 1.8.0 + * + * @param $value + * + * @return string + */ + public function set_time_format( $value ) { + + require_once ABSPATH . 'wp-admin/includes/screen.php'; + + if ( is_admin() && ! is_front_ajax() ) { + $screen = get_current_screen(); + if ( $screen && 'options-general' === $screen->id ) { + return $value; + } + } + + if ( defined( 'REST_REQUEST' ) && ( '/wp/v2/settings' === $GLOBALS['wp']->query_vars['rest_route'] ) ) { + return $value; + } + + $languages = $this->get_languages(); + $user_language = $this->get_user_language(); + + if ( ! empty( $languages[ $user_language ]['time'] ) ) { + return $languages[ $user_language ]['time']; + } + + return $value; + } + + /** + * Set locale for html + * + * @since 2.0.0 + * + * @param $translation + * @param $text + * + * @return mixed + */ + public function set_html_locale( $translation, $text ) { + + if ( 'html_lang_attribute' === $text ) { + $languages = $this->get_languages(); + $user_language = $this->get_user_language(); + + if ( $languages && isset( $languages[ $user_language ] ) && $languages[ $user_language ]['locale'] ) { + $translation = $languages[ $user_language ]['locale']; + } else { + $translation = get_locale(); + } + } + + return $translation; + } + + /** + * Get lang from url + * + * @since 2.0.3 + * + * @return string + */ + private function get_lang_from_url() { + if ( ! $this->url_language ) { + $url_lang = ''; + $parts = explode( '/', ltrim( trailingslashit( $this->get_original_request_uri() ), '/' ) ); + $lang = $parts[0]; + + if ( isset( $this->languages[ $lang ] ) ) { + $url_lang = $lang; + } + + $this->url_language = $url_lang; + } + + return $this->url_language; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/class-wpm-shortcodes.php b/wp-content/plugins/wp-multilang/includes/class-wpm-shortcodes.php new file mode 100644 index 00000000..f40c5e69 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/class-wpm-shortcodes.php @@ -0,0 +1,57 @@ + 'list', + 'show' => 'both' + ), $atts ); + + return wpm_get_language_switcher( $atts['type'], $atts['show'] ); + } + + /** + * Shorcode for using with uncompatible plugins + * + * @param array $atts + * @param string $content + * + * @return string + */ + + public function translate_via_shortcode( $atts, $content ) { + $atts = shortcode_atts( array( + 'lang' => wpm_get_language() + ), $atts ); + + return wpm_translate_string($content, $atts['lang']); + } +} diff --git a/wp-content/plugins/wp-multilang/includes/class-wpm-site-options.php b/wp-content/plugins/wp-multilang/includes/class-wpm-site-options.php new file mode 100644 index 00000000..33f78ba3 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/class-wpm-site-options.php @@ -0,0 +1,105 @@ +site_options_config = $config['site_options']; + + foreach ( $this->site_options_config as $key => $option ) { + add_filter( "site_option_{$key}", 'wpm_translate_value', 5 ); + add_filter( "pre_update_site_option_{$key}", array( $this, 'wpm_update_site_option' ), 99, 3 ); + add_filter( "pre_add_site_option_{$key}", array( $this, 'wpm_add_site_option' ), 99, 2 ); + } + } + + + /** + * Translate network name + * + * @param $_network + * + * @return mixed + */ + public function translate_network_name( $_network ) { + $_network->site_name = wpm_translate_string( $_network->site_name ); + + return $_network; + } + + + /** + * Update site options with translate + * + * @param $value + * @param $old_value + * @param $option + * + * @return array|bool|mixed|string + */ + public function wpm_update_site_option( $value, $old_value, $option ) { + + if ( wpm_is_ml_value( $value ) ) { + return $value; + } + + $this->site_options_config[ $option ] = apply_filters( "wpm_site_option_{$option}_config", isset( $this->site_options_config[ $option ] ) ? $this->site_options_config[ $option ] : null ); + + if ( null === $this->site_options_config[ $option ] ) { + return $value; + } + + remove_filter( "site_option_{$option}", 'wpm_translate_value', 5 ); + $old_value = get_site_option( $option ); + add_filter( "site_option_{$option}", 'wpm_translate_value', 5 ); + $value = wpm_set_new_value( $old_value, $value, $this->site_options_config[ $option ] ); + + return $value; + } + + + /** + * Add site options with translate + * + * @param mixed $value + * @param string $option + * + * @return array|bool|mixed|string + */ + public function wpm_add_site_option( $value, $option ) { + + if ( wpm_is_ml_value( $value ) ) { + return $value; + } + + $this->site_options_config[ $option ] = apply_filters( "wpm_site_option_{$option}_config", isset( $this->site_options_config[ $option ] ) ? $this->site_options_config[ $option ] : null ); + + if ( null === $this->site_options_config[ $option ] ) { + return $value; + } + + $value = wpm_set_new_value( array(), $value, $this->site_options_config[ $option ] ); + + return $value; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/class-wpm-taxonomies.php b/wp-content/plugins/wp-multilang/includes/class-wpm-taxonomies.php new file mode 100644 index 00000000..9b744996 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/class-wpm-taxonomies.php @@ -0,0 +1,310 @@ +object_type}_metadata", array( $this, 'get_meta_field' ), 5, 3 ); + add_filter( "update_{$this->object_type}_metadata", array( $this, 'update_meta_field' ), 99, 5 ); + add_filter( "add_{$this->object_type}_metadata", array( $this, 'add_meta_field' ), 99, 5 ); + add_action( "delete_{$this->object_type}_metadata", array( $this, 'delete_meta_field' ), 99, 3 ); + add_filter( 'pre_insert_term', array( $this, 'pre_insert_term' ), 5, 2 ); + add_filter( 'wp_insert_term_data', array( $this, 'insert_term' ), 99, 3 ); + add_action( 'created_term', array( $this, 'insert_description' ), 99, 3 ); + add_filter( 'wp_update_term_data', array( $this, 'update_term' ), 99, 4 ); + add_action( 'edited_term_taxonomy', array( $this, 'update_description' ), 5, 2 ); + add_filter( 'get_terms_args', array( $this, 'get_term_by_name' ), 99, 2 ); + } + + + /** + * Translate all terms + * + * @param $terms + * + * @return array + */ + public function translate_terms( $terms ) { + foreach ( $terms as &$term ) { + if ( is_object( $term ) ) { + $term = wpm_translate_term( $term, $term->taxonomy ); + } else { + $term = wpm_translate_value( $term ); + } + } + + return $terms; + } + + + /** + * Separate taxonomies by language + * + * @param $args + * @param $taxonomies + * + * @return mixed + */ + public function filter_terms_by_language( $args, $taxonomies ) { + + if ( defined( 'DOING_CRON' ) || ( is_admin() && ! is_front_ajax() ) ) { + return $args; + } + + if ( ! empty( $taxonomies ) ) { + + if ( count( $taxonomies ) === 1 ) { + $taxonomy = current( $taxonomies ); + if ( null === wpm_get_taxonomy_config( $taxonomy ) ) { + return $args; + } + } + } + + if ( isset( $args['lang'] ) && ! empty( $args['lang'] ) ) { + $lang = $args['lang']; + } else { + $lang = wpm_get_language(); + } + + if ( 'all' !== $lang ) { + $lang_meta_query = array( + array( + 'relation' => 'OR', + array( + 'key' => '_languages', + 'compare' => 'NOT EXISTS', + ), + array( + 'key' => '_languages', + 'value' => serialize( $lang ), + 'compare' => 'LIKE', + ), + ), + ); + + if ( isset( $args['meta_query'] ) ) { + $args['meta_query'] = wp_parse_args( $args['meta_query'], $lang_meta_query ); + } else { + $args['meta_query'] = $lang_meta_query; + } + } + + return $args; + } + + + /** + * Check if isset taxonomies in current language + * + * @param $term + * @param $taxonomy + * + * @return string + */ + public function pre_insert_term( $term, $taxonomy ) { + global $wpdb; + + if ( null === wpm_get_taxonomy_config( $taxonomy ) ) { + return $term; + } + + $name = wp_unslash( $term ); + $slug = sanitize_title( $name ); + $like = '%' . $wpdb->esc_like( esc_sql( '[:' . wpm_get_language() . ']' . $name . '[:' ) ) . '%'; + $results = $wpdb->get_results( $wpdb->prepare( "SELECT t.term_id, t.name, t.slug FROM {$wpdb->terms} AS t INNER JOIN {$wpdb->term_taxonomy} AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy = %s AND ( t.name LIKE %s OR t.slug = %s );", $taxonomy, $like, $slug ) ); + + foreach ( $results as $result ) { + $ml_term = wpm_translate_string( $result->name ); + if ( ( $ml_term === $name || $result->slug === $slug ) && ! is_taxonomy_hierarchical( $taxonomy ) ) { + return new \WP_Error( 'term_exists', __( 'A term with the name provided already exists in this taxonomy.' ), $result->term_id ); + } + } + + return $term; + } + + + /** + * Translate inserted term + * + * @param $data + * @param $taxonomy + * @param $args + * + * @return mixed + */ + public function insert_term( $data, $taxonomy, $args ) { + + $taxonomy_config = wpm_get_taxonomy_config( $taxonomy ); + + if ( null === $taxonomy_config ) { + return $data; + } + + if ( ! wpm_is_ml_value( $data['name'] ) ) { + $data['name'] = wpm_set_new_value( array(), $data['name'], $taxonomy_config['name'] ); + } + + $this->description = array( + 'new' => $args['description'], + ); + + return $data; + } + + + /** + * Update inserted description for term + * + * @param $term_id + * @param $tt_id + * @param $taxonomy + */ + public function insert_description( $term_id, $tt_id, $taxonomy ) { + + $taxonomy_config = wpm_get_taxonomy_config( $taxonomy ); + + if ( null === $taxonomy_config || ! $this->description ) { + return; + } + + $value = $this->description['new']; + + if ( wpm_is_ml_value( $value ) ) { + return; + } + + $description = wpm_set_new_value( array(), $value, $taxonomy_config['description'] ); + + global $wpdb; + $wpdb->update( $wpdb->term_taxonomy, compact( 'description' ), array( 'term_taxonomy_id' => $tt_id ) ); + } + + + /** + * Save taxonomies with translation + * + * @param $data + * @param $term_id + * @param $taxonomy + * @param $args + * + * @return mixed + */ + public function update_term( $data, $term_id, $taxonomy, $args ) { + + $taxonomy_config = wpm_get_taxonomy_config( $taxonomy ); + + if ( null === $taxonomy_config ) { + return $data; + } + + remove_filter( 'get_term', 'wpm_translate_term', 5 ); + $old_name = get_term_field( 'name', $term_id, $taxonomy, 'edit' ); + $old_description = get_term_field( 'description', $term_id, $taxonomy, 'edit' ); + add_filter( 'get_term', 'wpm_translate_term', 5, 2 ); + + if ( ! wpm_is_ml_value( $data['name'] ) ) { + $data['name'] = wpm_set_new_value( $old_name, $data['name'], $taxonomy_config['name'] ); + } + + $this->description = array( + 'old' => $old_description, + 'new' => $args['description'], + ); + + return $data; + } + + + /** + * Fix for saving taxonomy description + * + * @param $tt_id + * @param $taxonomy + */ + public function update_description( $tt_id, $taxonomy ) { + + $taxonomy_config = wpm_get_taxonomy_config( $taxonomy ); + + if ( null === $taxonomy_config || ! $this->description ) { + return; + } + + $value = $this->description['new']; + + if ( wpm_is_ml_value( $value ) ) { + return; + } + + $description = wpm_set_new_value( $this->description['old'], $value, $taxonomy_config['description'] ); + + global $wpdb; + $wpdb->update( $wpdb->term_taxonomy, compact( 'description' ), array( 'term_taxonomy_id' => $tt_id ) ); + } + + /** + * Set name__like for getting terms by name + * + * @since 2.1.1 + * + * @param $args + * @param $taxonomies + * + * @return mixed + */ + public function get_term_by_name( $args, $taxonomies ) { + + if ( ! empty( $args['name'] ) && empty( $args['name__like'] ) ) { + $taxonomy = current( $taxonomies ); + if ( null !== wpm_get_taxonomy_config( $taxonomy ) ) { + $args['name__like'] = '[:' . wpm_get_language() . ']' . $args['name'] . '[:'; + $args['name'] = ''; + } + } + + return $args; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/class-wpm-users.php b/wp-content/plugins/wp-multilang/includes/class-wpm-users.php new file mode 100644 index 00000000..4fcad205 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/class-wpm-users.php @@ -0,0 +1,40 @@ +object_type}_metadata", array( $this, 'get_meta_field' ), 5, 3 ); + add_filter( "update_{$this->object_type}_metadata", array( $this, 'update_meta_field' ), 99, 5 ); + add_filter( "add_{$this->object_type}_metadata", array( $this, 'add_meta_field' ), 99, 5 ); + add_action( "delete_{$this->object_type}_metadata", array( $this, 'delete_meta_field' ), 99, 3 ); + } +} diff --git a/wp-content/plugins/wp-multilang/includes/class-wpm-widgets.php b/wp-content/plugins/wp-multilang/includes/class-wpm-widgets.php new file mode 100644 index 00000000..f734ae89 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/class-wpm-widgets.php @@ -0,0 +1,39 @@ + null, + 'post_excerpt' => null, + ); + } + + return $config; + } + + + /** + * Save field object with translation + * + * @param $field + * + * @return array|bool|string + */ + public function update_field( $field ) { + + $old_field = maybe_unserialize( get_post_field( 'post_content', $field['ID'], 'edit' ) ); + + if ( ! $old_field ) { + return $field; + } + + $old_field = wpm_array_merge_recursive( $field, $old_field ); + $old_field = wpm_value_to_ml_array( $old_field ); + $field_name = get_post_field( 'post_title', $field['ID'], 'edit' ); + $old_field['label'] = wpm_value_to_ml_array( $field_name ); + + $default_config = array( + 'label' => array(), + 'placeholder' => array(), + 'instructions' => array(), + ); + + $acf_field_config = apply_filters( "wpm_acf_field_{$field['type']}_config", $default_config ); + $acf_field_config = apply_filters( "wpm_acf_field_name_{$field['name']}_config", $acf_field_config ); + + $new_field = wpm_set_language_value( $old_field, $field, $acf_field_config ); + $field = wpm_array_merge_recursive( $field, $new_field ); + $field = wpm_ml_value_to_string( $field ); + + return $field; + } + + /** + * Add translate config for text fields. + * + * @param $config + * + * @return array + */ + public function add_text_field_config( $config ) { + $config['default_value'] = array(); + + return $config; + } + + + /** + * Save value with translation + * + * @param $value + * @param $post_id + * @param $field + * + * @return array|bool|string + */ + public function update_value( $value, $post_id, $field ) { + + if ( wpm_is_ml_value( $value ) ) { + return $value; + } + + $info = acf_get_post_id_info( $post_id ); + + switch ( $info['type'] ) { + + case 'post': + $post_type = get_post_type( $info['id'] ); + if ( ! $post_type || null === wpm_get_post_config( $post_type ) ) { + return $value; + } + + break; + + case 'term': + $term = get_term( $info['id'] ); + if ( ! $term || is_wp_error( $term ) || null === wpm_get_taxonomy_config( $term->taxonomy ) ) { + return $value; + } + } + + $acf_field_config = apply_filters( "wpm_acf_{$info['type']}_config", null, $value, $post_id, $field ); + $acf_field_config = apply_filters( "wpm_acf_{$field['type']}_config", $acf_field_config, $value, $post_id, $field ); + $acf_field_config = apply_filters( "wpm_acf_name_{$field['name']}_config", $acf_field_config, $value, $post_id, $field ); + + if ( null === $acf_field_config ) { + return $value; + } + + remove_filter( 'acf/load_value', 'wpm_translate_value', 6 ); + $old_value = get_field( $field['name'], $post_id, false ); + add_filter( 'acf/load_value', 'wpm_translate_value', 6 ); + + $value = wpm_set_new_value( $old_value, $value, $acf_field_config ); + + return $value; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-aiosp.php b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-aiosp.php new file mode 100644 index 00000000..1394ec77 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-aiosp.php @@ -0,0 +1,160 @@ + '', + '_aioseop_description' => '', + '_aioseop_keywords' => '', + ); + + /** + * WPM_AIOSP constructor. + */ + public function __construct() { + add_filter( 'wpm_option_aioseop_options_config', array( $this, 'set_posts_config' ) ); + add_filter( 'delete_post_metadata', array( $this, 'save_old_fields' ), 10, 5 ); + add_filter( 'add_post_metadata', array( $this, 'update_old_fields' ), 10, 4 ); + add_filter( 'init', array( $this, 'translate_options' ) ); + + // AIOSP Sitemap do not support simple tag in sitemap like "xhtml:link" what needed in multilingual sitemap + //add_filter( 'aiosp_sitemap_xml_namespace', array( $this, 'add_namespace' ) ); + } + + /** + * Translate options array on init. + */ + public function translate_options() { + global $aioseop_options; + $aioseop_options = wpm_translate_value( $aioseop_options ); + } + + /** + * Add dynamically title setting for post types + * + * @param array $option_config + * + * @return array + */ + public function set_posts_config( $option_config ) { + + $post_types = get_post_types( array(), 'names' ); + + foreach ( $post_types as $post_type ) { + + if ( null === wpm_get_post_config( $post_type ) ) { + continue; + } + + $option_config[ "aiosp_{$post_type}_title_format" ] = array(); + } + + return $option_config; + } + + /** + * Save old translation before deleting + * + * @param $check + * @param $object_id + * @param $meta_key + * @param $meta_value + * @param $delete_all + * + * @return mixed + */ + public function save_old_fields( $check, $object_id, $meta_key, $meta_value, $delete_all ) { + + if ( $delete_all ) { + return $check; + } + + if ( null === wpm_get_post_config( get_post_type( $object_id ) ) ) { + return $check; + } + + if ( isset( $this->meta_fields[ $meta_key ] ) ) { + global $wpdb; + + $old_value = $wpdb->get_var( $wpdb->prepare( "SELECT meta_value FROM {$wpdb->postmeta} WHERE meta_key = %s AND post_id = %d;", $meta_key, $object_id ) ); + + if ( $old_value ) { + $this->meta_fields[ $meta_key ] = $old_value; + } + } + + return $check; + } + + /** + * Add field with new and old translations + * + * @param $check + * @param $object_id + * @param $meta_key + * @param $meta_value + * + * @return bool|int + */ + public function update_old_fields( $check, $object_id, $meta_key, $meta_value ) { + global $wpdb; + + if ( null === wpm_get_post_config( get_post_type( $object_id ) ) ) { + return $check; + } + + if ( ! empty( $this->meta_fields[ $meta_key ] ) ) { + + $meta_value = wpm_set_new_value( $this->meta_fields[ $meta_key ], $meta_value ); + $meta_value = maybe_serialize( $meta_value ); + + $result = $wpdb->insert( $wpdb->postmeta, array( + 'post_id' => $object_id, + 'meta_key' => $meta_key, + 'meta_value' => $meta_value, + ) ); + + if ( ! $result ) { + return false; + } + + $mid = (int) $wpdb->insert_id; + + wp_cache_delete( $object_id, 'post_meta' ); + + return $mid; + } + + return $check; + } + + /** + * Add namespace to sitemap + * + * @since 2.0.0 + * + * @param $namespace + * + * @return mixed + */ + public function add_namespace( $namespace ) { + $namespace['xmlns:xhtml'] = 'http://www.w3.org/1999/xhtml'; + + return $namespace; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-better-search.php b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-better-search.php new file mode 100644 index 00000000..3f4b9b57 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-better-search.php @@ -0,0 +1,64 @@ +post_excerpt; + } + if ( '' == $content ) { + $content = get_post( $id )->post_content; + } + + $content = wpm_translate_string( $content ); + $output = strip_tags( strip_shortcodes( $content ) ); + + if ( $excerpt_length > 0 ) { + $output = wp_trim_words( $output, $excerpt_length ); + } + + return $output; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-buddypress.php b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-buddypress.php new file mode 100644 index 00000000..8d41bd00 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-buddypress.php @@ -0,0 +1,210 @@ +get_post_object(); + $untranslated_post = wpm_untranslate_post( $post ); + $lang = get_user_meta( $to, 'wpm_lang', true ); + $translated_post = wpm_translate_object( $untranslated_post, $lang ); + $email->set_post_object( $translated_post ); + + return $email; + } + + + /** + * Translate activity meta value + * + * @param $value + * + * @return array|mixed|string + */ + public function translate_meta_value( $value ) { + if ( ! is_admin() ) { + $value = wpm_translate_value( $value ); + } + + return $value; + } + + + /** + * Untranslate field group name and set new lang value before saving + * + * @param string $name + * @param integer $field_group_id + * + * @return string + */ + public function save_group_name( $name, $field_group_id ) { + + if ( ! $this->field_group ) { + $this->field_group = xprofile_get_field_group( $field_group_id ); + } + + $name = wpm_set_new_value( $this->field_group->name, $name ); + + return $name; + } + + + /** + * Untranslate field group description and set new lang value before saving + * + * @param string $description + * + * @return string + */ + public function save_group_description( $description ) { + $description = wpm_set_new_value( $this->field_group->description, $description ); + + return $description; + } + + + /** + * Untranslate field name and set new lang value before saving + * + * @param string $name + * @param integer $field_id + * + * @return string + */ + public function save_field_name( $name, $field_id ) { + + if ( ! $this->field ) { + $this->field = xprofile_get_field( $field_id ); + } + + $name = wpm_set_new_value( $this->field->name, $name ); + + return $name; + } + + + /** + * Untranslate field description and set new lang value before saving + * + * @param string $description + * + * @return string + */ + public function save_field_description( $description ) { + $description = wpm_set_new_value( $this->field->description, $description ); + + return $description; + } + + /** + * Remove translate filter before display options in admin + * + * @param array $children + * + * @return array + */ + public function remove_filter( $children ) { + remove_filter( 'attribute_escape', 'wpm_attribute_escape', 5 ); + + return $children; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-cf7.php b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-cf7.php new file mode 100644 index 00000000..5c612bfb --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-cf7.php @@ -0,0 +1,51 @@ +get_slider( $slider_id ); + $old_params = json_decode( base64_decode( $old_slider['params'] ), true ); + $params = json_decode( base64_decode( $msp_data ), true ); + + if ( isset( $params['MSPanel.Slide'] ) ) { + + $slider_config = array( + 'info' => array(), + 'bgAlt' => array(), + 'bgTitle' => array(), + 'linkTitle' => array() + ); + + foreach ( $params['MSPanel.Slide'] as $key => $slide ) { + $slide = json_decode( $slide, true ); + if ( $old_params && is_array( $old_params ) && $old_params['MSPanel.Slide'] ) { + foreach ( $old_params['MSPanel.Slide'] as $old_slide ) { + $old_slide = json_decode( $old_slide, true ); + if ( $slide['id'] === $old_slide['id'] ) { + $slide = wpm_set_new_value( $old_slide, $slide, $slider_config ); + } + } + } else { + if ( ! wpm_is_ml_value( $slide ) ) { + $slide = wpm_set_new_value( array(), $slide, $slider_config ); + } + } + $params['MSPanel.Slide'][ $key ] = wp_json_encode( $slide ); + } + } + + if ( isset( $params['MSPanel.Layer'] ) ) { + + $layer_config = array( + 'title' => array(), + 'content' => array() + ); + + foreach ( $params['MSPanel.Layer'] as $key => $layer ) { + $layer = json_decode( $layer, true ); + if ( $old_params && is_array( $old_params ) && $old_params['MSPanel.Layer'] ) { + foreach ( $old_params['MSPanel.Layer'] as $old_layer ) { + $old_layer = json_decode( $old_layer, true ); + if ( $layer['id'] === $old_layer['id'] ) { + $layer = wpm_set_new_value( $old_layer, $layer, $layer_config ); + } + } + } else { + if ( ! wpm_is_ml_value( $layer ) ) { + $layer = wpm_set_new_value( array(), $layer, $layer_config ); + } + } + $params['MSPanel.Layer'][ $key ] = wp_json_encode( $layer ); + } + } + + $_REQUEST['msp_data'] = base64_encode( wp_json_encode( $params ) ); + } + + + /** + * Translate slider + */ + public function translate_slider() { + global $wp_scripts; + + $data = $wp_scripts->get_data( 'jquery-core', 'data' ); + $data_array = explode( "\n", $data ); + $slider_data = ''; + + foreach ( $data_array as $key => $item ) { + if ( strpos( $item, '__MSP_DATA' ) ) { + $slider_data = str_replace( 'var __MSP_DATA = ', '', substr( $item, 0, - 1 ) ); + unset( $data_array[ $key ] ); + break; + } + } + + if ( $slider_data && $slider_data !== 'null' ) { + $slider_data = json_decode( base64_decode( $slider_data ), true ); + + if ( ! empty( $slider_data ) ) { + if ( isset( $slider_data['MSPanel.Slide'] ) ) { + foreach ( $slider_data['MSPanel.Slide'] as $key => $slide ) { + $slide = json_decode( $slide, true ); + $slide = wpm_translate_value( $slide ); + $slider_data['MSPanel.Slide'][ $key ] = wp_json_encode( $slide ); + } + } + + if ( isset( $slider_data['MSPanel.Layer'] ) ) { + foreach ( $slider_data['MSPanel.Layer'] as $key => $layer ) { + $layer = json_decode( $layer, true ); + $layer = wpm_translate_value( $layer ); + $slider_data['MSPanel.Layer'][ $key ] = wp_json_encode( $layer ); + } + } + } + + $data_array[] = 'var __MSP_DATA = "' . base64_encode( wp_json_encode( $slider_data ) ) . '";'; + $data = implode( "\n", $data_array ); + $wp_scripts->add_data( 'jquery-core', 'data', $data ); + } + } + + + /** + * Add language_switcher + * + * @param $config + * + * @return array + */ + public function add_language_switcher( $config ) { + $screen = get_current_screen(); + $screen_id = $screen ? $screen->id : ''; + if ( $screen_id === 'toplevel_page_masterslider' && isset( $_GET['slider_id'] ) ) { + $config[] = 'toplevel_page_masterslider'; + } + + return $config; + } + + /** + * Add access to master slider for translator + * + * @since 2.0.0 + * + * @param $capabilities + * + * @return array + */ + public function add_core_capabilities( $capabilities ) { + $capabilities['core'][] = 'access_masterslider'; + + return $capabilities; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-megamenu.php b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-megamenu.php new file mode 100644 index 00000000..89340383 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-megamenu.php @@ -0,0 +1,73 @@ +id : ''; + + if ( 'admin_page_newsletter_emails_edit' === $screen_id ) { + remove_filter( 'wpm_attribute_escape', 'wpm_escaping_text', 5 ); + remove_filter( 'esc_textarea', 'wpm_escaping_text', 5 ); + remove_filter( 'esc_html', 'wpm_escaping_text', 5 ); + wpm_show_notice(); + } + } + + + /** + * Translate options + */ + public function translate_options() { + \NewsletterSubscription::instance()->options = wpm_translate_value( \NewsletterSubscription::instance()->options ); + \Newsletter::instance()->options = wpm_translate_value( \Newsletter::instance()->options ); + + /** + * Compatibility with extension WP Users Integration + */ + if ( class_exists( 'NewsletterWpUsers' ) ) { + \NewsletterWpUsers::$instance->options = wpm_translate_value( \NewsletterWpUsers::$instance->options ); + } + + /** + * Compatibility with extension Locked Content + */ + if ( class_exists( 'NewsletterLock' ) ) { + \NewsletterLock::$instance->options = wpm_translate_value( \NewsletterLock::$instance->options ); + } + } + + + public function save_profile_20( $data ) { + $data['profile_20'] = wpm_get_language(); + + return $data; + } + + + public function translate_email( $text, $user ) { + + if ( is_object( $user ) && $user->profile_20 ) { + $text = wpm_translate_string( $text, $user->profile_20 ); + } + + return $text; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-ngg.php b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-ngg.php new file mode 100644 index 00000000..a43f0490 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-ngg.php @@ -0,0 +1,233 @@ + 'name', 'album_desc' => 'albumdesc' ); + $data = array(); + + foreach ( $fields as $key => $field ) { + $data[ $key ] = $_POST[ $key ]; + } + + if ( $album = \C_Album_Mapper::get_instance()->find( wpm_clean( $_POST['act_album'] ) ) ) { + foreach ( $data as $key => $value ) { + if ( ! wpm_is_ml_string( $value ) ) { + $_POST[ $key ] = wpm_set_new_value( $album->{$fields[ $key ]}, $value ); + } + } + } + } + + if ( isset( $_POST['page'] ) && 'manage-images' === $_POST['page'] ) { + + if ( isset( $_POST['updatepictures'] ) ) { + + check_admin_referer( 'ngg_updategallery' ); + + if ( ! isset( $_GET['s'] ) ) { + + $fields = array( 'title', 'galdesc' ); + $data = array(); + + foreach ( $fields as $field ) { + $data[ $field ] = $_POST[ $field ]; + } + + // Update the gallery + $mapper = \C_Gallery_Mapper::get_instance(); + if ( $entity = $mapper->find( wpm_clean( $_GET['gid'] ) ) ) { + foreach ( $data as $key => $value ) { + if ( ! wpm_is_ml_string( $value ) ) { + $_POST[ $key ] = wpm_set_new_value( $entity->$key, $value ); + } + } + } + } + + $image_mapper = \C_Image_Mapper::get_instance(); + + foreach ( $_POST['images'] as $pid => $image ) { + + $data = array(); + + if ( isset( $image['description'] ) ) { + $data['description'] = stripslashes( $image['description'] ); + } + if ( isset( $image['alttext'] ) ) { + $data['alttext'] = stripslashes( $image['alttext'] ); + } + + $old_image = $image_mapper->find( $pid ); + + // Update all fields + foreach ( $data as $key => $value ) { + if ( ! wpm_is_ml_string( $value ) ) { + $_POST['images'][ $pid ][ $key ] = wpm_set_new_value( $old_image->$key, $value ); + } + } + } + }// End if(). + }// End if(). + } + + + /** + * Add pages for display language switcher + * + * @param $pages_config + * + * @return array + */ + public function add_admin_pages( $pages_config ) { + + $screen = get_current_screen(); + $screen_id = $screen ? $screen->id : ''; + + $admin_pages = array( + '_page_nggallery-manage-gallery', + '_page_nggallery-manage-album', + '_page_ngg_display_settings', + ); + + foreach ( $admin_pages as $admin_page ) { + if ( strpos( $screen_id, $admin_page ) !== false ) { + $pages_config[] = $screen_id; + } + } + + return $pages_config; + } + + + /** + * Translate some field without PHP filters by javascript for displaying + * + * @param array $admin_html_tags + * + * @return array + */ + public function add_admin_html_tags( $admin_html_tags ) { + $screen = get_current_screen(); + $screen_id = $screen ? $screen->id : ''; + + $admin_pages = array( + '_page_nggallery-manage-gallery', + '_page_nggallery-manage-album', + ); + + foreach ( $admin_pages as $admin_page ) { + if ( strpos( $screen_id, $admin_page ) !== false ) { + + $html_tags = array(); + + if ( '_page_nggallery-manage-album' === $admin_page ) { + if ( 'POST' === $_SERVER['REQUEST_METHOD'] && isset( $_POST['act_album'] ) ) { + $html_tags = array( + 'value' => array( + '#album_name', + '#album_desc', + ) + ); + } + } + + if ( '_page_nggallery-manage-gallery' === $admin_page ) { + if ( 'POST' === $_SERVER['REQUEST_METHOD'] && ( isset( $_POST['page'] ) && 'manage-images' === $_POST['page'] ) && isset( $_POST['updatepictures'] ) ) { + $html_tags = array( + 'value' => array( + '#gallery_title', + '#gallery_description', + ) + ); + } + } + + $admin_html_tags[ $screen_id ] = $html_tags; + } + } + + return $admin_html_tags; + } + + + /** + * Translate gallery fields before display + * + * @param $fields + * + * @return mixed + */ + public function filter_fields( $fields ) { + + $translate_fields = array( + 'title', + 'description', + ); + + foreach ( $translate_fields as $field ) { + if ( isset( $fields['left'][ $field ] ) ) { + $fields['left'][ $field ]['callback'][0]->gallery = $this->translate_gallery_object( $fields['left'][ $field ]['callback'][0]->gallery ); + } + } + + return $fields; + } + + + /** + * Translate gallery object for displaying + * + * @param $object + * + * @return mixed + */ + public function translate_gallery_object( $object ) { + + foreach ( get_object_vars( $object ) as $key => $content ) { + switch ( $key ) { + case 'title': + case 'galdesc': + case 'alttext': + case 'description': + $object->$key = wpm_translate_string( $content ); + break; + } + } + + return $object; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-pbso.php b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-pbso.php new file mode 100644 index 00000000..5c360a57 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-pbso.php @@ -0,0 +1,125 @@ + $widget ) { + if ( isset( $widget['frames'] ) ) { + foreach ( $widget['frames'] as $_key => $frame ) { + if ( ! empty( $frame['content'] ) ) { + + if ( isJSON( $frame['content'] ) ) { + $frame['content'] = json_decode( $frame['content'], true ); + } + + if ( ! empty( $frame['content']['widgets'] )) { + $meta_value['widgets'][ $key ]['frames'][ $_key ]['content'] = $this->formatting_updated_value( $frame['content'] ); + } + } + } + } + } + } + + return $meta_value; + } + + /** + * Filter old values recursively + * + * @param $old_value + * @param $meta_value + * + * @return mixed + */ + public function filter_old_value( $old_value, $meta_value ) { + + $new_old_value = $meta_value; + $new_old_value['widgets'] = array(); + + foreach ( $meta_value['widgets'] as $key => $widget ) { + foreach ( $old_value['widgets'] as $_widget ) { + if ( $widget['panels_info']['widget_id'] === $_widget['panels_info']['widget_id'] ) { + $new_old_value['widgets'][ $key ] = $_widget; + if ( ! empty( $widget['frames'] ) ) { + foreach ( $widget['frames'] as $_key => $frame ) { + if ( ! empty( $frame['content'] ) && isset( $frame['content']['widgets'] ) ) { + foreach ( $_widget['frames'] as $_frame ) { + $new_old_value['widgets'][ $key ]['frames'][ $_key ]['content'] = $this->filter_old_value( $_frame['content'], $frame['content'] ); + } + } + } + } + } + } + } + + return $new_old_value; + } + + /** + * Add config for values recursively + * + * @param $config + * @param array $meta_value + * + * @return array + */ + public function add_recursive_config( $config, $meta_value ) { + + if ( is_array( $meta_value ) && isset( $meta_value['widgets'] ) ) { + foreach ( $meta_value['widgets'] as $widget ) { + if ( isset( $widget['frames'] ) ) { + foreach ( $widget['frames'] as $frame ) { + if ( ! empty( $frame['content'] ) ) { + if ( isJSON( $frame['content'] ) ) { + $frame['content'] = json_decode( $frame['content'], true ); + } + + if ( ! empty( $frame['content']['widgets'] ) ) { + $config['widgets']['wpm_each']['frames']['wpm_each']['content'] = $this->add_recursive_config( $config, $frame['content'] ); + } + } + } + } + } + } + + return $config; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-rank-math.php b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-rank-math.php new file mode 100644 index 00000000..8b35ad2d --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-rank-math.php @@ -0,0 +1,186 @@ + array(), + "pt_{$post_type}_description" => array(), + "pt_{$post_type}_default_rich_snippet" => array(), + "pt_{$post_type}_default_snippet_name" => array(), + "pt_{$post_type}_default_snippet_desc" => array(), + "pt_{$post_type}_default_article_type" => array(), + "pt_{$post_type}_custom_robots" => array(), + "pt_{$post_type}_link_suggestions" => array(), + "pt_{$post_type}_ls_use_fk" => array(), + "pt_{$post_type}_primary_taxonomy" => array(), + "pt_{$post_type}_add_meta_box" => array(), + "pt_{$post_type}_bulk_editing" => array(), + ); + + $option_config = wpm_array_merge_recursive( $option_post_config, $option_config ); + } + + $taxonomies = get_taxonomies(); + + foreach ( $taxonomies as $taxonomy ) { + + if ( null === wpm_get_taxonomy_config( $taxonomy ) ) { + continue; + } + + $option_taxonomy_config = array( + "tax_{$taxonomy}_title" => array(), + "tax_{$taxonomy}_description" => array(), + "tax_{$taxonomy}_custom_robots" => array(), + "tax_{$taxonomy}_robots" => array(), + "tax_{$taxonomy}_add_meta_box" => array(), + "remove_{$taxonomy}_snippet_data" => array(), + ); + + $option_config = wpm_array_merge_recursive( $option_taxonomy_config, $option_config ); + } + + return $option_config; + } + + /** + * Add filter for each type + * + * @param $type + * + * @return mixed + */ + public function add_filter_for_maps( $type ) { + add_filter( "rank_math/sitemap/{$type}_urlset", array( $this, 'add_namespace_to_xml' ) ); + return $type; + } + + /** + * Add namespace for xmlns:xhtml + * + * @param $urlset + * + * @return mixed + */ + public function add_namespace_to_xml( $urlset ) { + $urlset = str_replace( + array( + 'http://www.google.com/schemas/sitemap-image/1.1/sitemap-image.xsd', + 'xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"' + ), + array( + 'http://www.google.com/schemas/sitemap-image/1.1/sitemap-image.xsd http://www.w3.org/1999/xhtml http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd', + 'xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:xhtml="http://www.w3.org/1999/xhtml"' + ), + $urlset ); + + return $urlset; + } + + /** + * Add separating by language to url + * + * @param array $url + * @param string $type + * @param object $object + * + * @return array + */ + public function add_lang_to_url( $url, $type, $object ) { + + $languages = array(); + + switch ( $type ) { + case 'post': + $languages = get_post_meta( $object->ID, '_languages', true ); + break; + case 'term': + $languages = get_term_meta( $object->term_id, '_languages', true ); + break; + } + + if ( $languages ) { + $url['languages'] = $languages; + } + + return $url; + } + + /** + * Add alternate links to sitemap + * + * @param string $output + * @param array $url + * + * @return string + */ + public function add_alternate_sitemaplinks( $output, $url ) { + $loc = $output; + $new_output = ''; + + foreach ( wpm_get_languages() as $code => $language ) { + + if ( isset( $url['languages'] ) && ! in_array( $code, $url['languages'] ) ) { + continue; + } + + $alternate = array(); + $new_loc = str_replace( $url['loc'], esc_url( wpm_translate_url( $url['loc'], $code ) ), $loc ); + + foreach ( wpm_get_languages() as $key => $lg ) { + if ( isset( $url['languages'] ) && ! in_array( $key, $url['languages'] ) ) { + continue; + } + + $alternate[ $key ] = sprintf( "\t\n\t", esc_attr( wpm_sanitize_lang_slug( $lg['locale'] ) ), esc_url( wpm_translate_url( $url['loc'], $key ) ) ); + } + + $alternate = apply_filters( 'wpm_sitemap_alternate_links', $alternate, $url['loc'], $code ); + $new_loc = str_replace( '', implode( '', $alternate ) . '', $new_loc ); + $new_output .= $new_loc; + } + + return $new_output; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-tablepress.php b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-tablepress.php new file mode 100644 index 00000000..f69624ee --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-tablepress.php @@ -0,0 +1,73 @@ + array( + 'wpm_each' => array(), + ), + ); + + $old_table = json_decode( get_post_field( 'post_content', wpm_clean( $postarr['ID'] ), 'edit' ), true ); + $new_table = json_decode( stripslashes_from_strings_only( $data['post_content'] ), true ); + $value = wpm_set_new_value( $old_table, $new_table, $options ); + $data['post_content'] = addslashes_gpc( wp_json_encode( $value ) ); + + return $data; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-vc.php b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-vc.php new file mode 100644 index 00000000..7fed84db --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-vc.php @@ -0,0 +1,105 @@ +'; + $inline_url = vc_frontend_editor()->getInlineUrl(); + $active_language = wpm_get_language(); + $languages = wpm_get_languages(); + foreach ( $languages as $code => $language ) { + $output .= ''; + } + $output .= ''; + + return $output; + } + + /** + * Add menu item + * + * @param $list + * + * @return array + */ + public function nav_controls_frontend( $list ) { + if ( is_array( $list ) ) { + $list[] = array( 'wpm', '
  • ' . $this->generate_select_frontend() . '
  • ' ); + } + + return $list; + } + + /** + * Generate edit link + * + * @param $link + * + * @return string + */ + public function render_edit_button_link( $link ) { + return add_query_arg( 'edit_lang', wpm_get_language(), $link ); + } +} diff --git a/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-woocommerce.php b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-woocommerce.php new file mode 100644 index 00000000..3b249fa6 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-woocommerce.php @@ -0,0 +1,373 @@ +get_instance_option_key(), array() ); + + $setting_config = array( + 'title' => array(), + ); + + $settings = wpm_set_new_value( $old_settings, $settings, $setting_config ); + + return $settings; + } + + /** + * Translate methods for zone + * + * @param array $methods + * + * @return array + */ + public function translate_zone_shipping_methods( $methods ) { + + foreach ( $methods as &$method ) { + $method->title = wpm_translate_string( $method->title ); + } + + return $methods; + } + + /** + * Remove translation result query for products in shortcode + * + * @param array $query_args + * + * @return array + */ + public function remove_filter( $query_args ) { + + $query_args['suppress_filters'] = true; + + return $query_args; + } + + /** + * Add capability for translating products for user role + * + * @since 2.0.0 + * + * @param array $types + * + * @return array + */ + public function add_capabilities_types( $types ) { + + $types[] = 'product'; + + return $types; + } + + /** + * Set attribute taxonomies for translate + * + * @param $taxonomies_config + * + * @return array + */ + public function add_attribute_taxonomies( $taxonomies_config ) { + + if ( ! $this->attribute_taxonomies_config ) { + + if ( ! $attribute_taxonomies = get_transient( 'wc_attribute_taxonomies' ) ) { + $attribute_taxonomies = array(); + } + + foreach ( $attribute_taxonomies as $tax ) { + if ( $name = wc_attribute_taxonomy_name( $tax->attribute_name ) ) { + $this->attribute_taxonomies_config[ $name ] = array(); + } + } + } + + return wpm_array_merge_recursive( $this->attribute_taxonomies_config, $taxonomies_config ); + } + + /** + * Translate attribute taxonomies + * + * @param $attribute_taxonomies + * + * @return mixed + */ + public function translate_attribute_taxonomies( $attribute_taxonomies ) { + + foreach ( $attribute_taxonomies as &$tax ) { + $tax->attribute_label = wpm_translate_string( $tax->attribute_label ); + } + + return $attribute_taxonomies; + } + + /** + * Filter action for save and add attribute taxonomies + */ + public function set_translation_for_attribute_taxonomies() { + $action = ''; + + // Action to perform: add, edit, delete or none + if ( ! empty( $_POST['add_new_attribute'] ) ) { + $action = 'add'; + } elseif ( ! empty( $_POST['save_attribute'] ) && ! empty( $_GET['edit'] ) ) { + $action = 'edit'; + } + + switch ( $action ) { + case 'add': + $this->process_add_attribute(); + break; + case 'edit': + $this->process_edit_attribute(); + break; + } + } + + /** + * Add new attribute with translate + */ + private function process_add_attribute() { + check_admin_referer( 'woocommerce-add-new_attribute' ); + + $label = ''; + + if ( isset( $_POST['attribute_label'] ) ) { + $label = wpm_set_new_value( '', wc_clean( stripslashes( $_POST['attribute_label'] ) ) ); + } + + $_POST['attribute_label'] = $label; + } + + /** + * Save new attribute with translate + */ + private function process_edit_attribute() { + $attribute_id = absint( $_GET['edit'] ); + check_admin_referer( 'woocommerce-save-attribute_' . $attribute_id ); + + $label = ''; + + if ( isset( $_POST['attribute_label'] ) ) { + $attribute = wc_get_attribute( $attribute_id ); + $label = wpm_set_new_value( $attribute->name, wc_clean( stripslashes( $_POST['attribute_label'] ) ) ); + } + + $_POST['attribute_label'] = $label; + } + + /** + * + * @param $count + * @param $product \WC_Product + * + * @return null|string + */ + public function fix_product_review_count( $count, $product ) { + + if ( ( is_admin() && ! is_front_ajax() ) || defined( 'DOING_CRON' ) ) { + return $count; + } + + $lang = get_query_var( 'lang' ); + + if ( ! $lang ) { + $lang = wpm_get_user_language(); + } + + $count_array = wp_cache_get( $product->get_id(), 'wpm_comment_count' ); + + if ( $count_array ) { + if ( isset( $count_array[ $lang ] ) ) { + return $count_array[ $lang ]; + } + } else { + $count_array = array(); + } + + global $wpdb; + + $meta_query = array( + array( + 'relation' => 'OR', + array( + 'key' => '_languages', + 'compare' => 'NOT EXISTS', + ), + array( + 'key' => '_languages', + 'value' => serialize( $lang ), + 'compare' => 'LIKE', + ), + ), + ); + + $meta_sql = get_meta_sql( $meta_query, 'comment', $wpdb->comments, 'comment_ID' ); + + $count = $wpdb->get_var( $wpdb->prepare(" + SELECT COUNT( DISTINCT({$wpdb->comments}.comment_ID) ) FROM {$wpdb->comments} + {$meta_sql['join']} + WHERE comment_parent = 0 + AND comment_post_ID = %d + AND comment_approved = '1' + {$meta_sql['where']} + ", $product->get_id() ) ); + + $count_array[ $lang ] = $count; + wp_cache_add( $product->get_id(), $count_array, 'wpm_comment_count' ); + + return $count; + } + + /** + * Remove filters when product is duplication + */ + public function remove_filters() { + remove_filter( 'woocommerce_product_get_name', 'wpm_translate_string' ); + remove_filter( 'woocommerce_product_get_description', 'wpm_translate_string' ); + remove_filter( 'woocommerce_product_get_short_description', 'wpm_translate_string' ); + remove_filter( 'woocommerce_product_title', 'wpm_translate_string' ); + } + + /** + * Translate response data for REST Requests + * + * @param $response + * @param $object + * @param $request + * + * @return object + */ + public function translate_rest_object( $response, $object, $request ) { + + if ( 'view' !== $request['context'] ) { + $response->data = wpm_translate_value( $response->data ); + } + + if ( isset( $response->data['meta_data'] ) && is_array( $response->data['meta_data'] ) ) { + + foreach ( $response->data['meta_data'] as $meta_data ) { + + if ( is_string( $meta_data->value ) ) { + $meta_value = wpm_translate_string( trim( $meta_data->value, '"' ) ); + } else { + $meta_value = wpm_translate_value( $meta_data->value ); + } + + $meta_data->value = $meta_value; + $meta_data->apply_changes(); + } + } + + return $response; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-yoast-seo.php b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-yoast-seo.php new file mode 100644 index 00000000..4b782525 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/integrations/class-wpm-yoast-seo.php @@ -0,0 +1,315 @@ + array(), + "metadesc-{$post_type}" => array(), + "metakey-{$post_type}" => array(), + "title-ptarchive-{$post_type}" => array(), + "metadesc-ptarchive-{$post_type}" => array(), + ); + + $option_config = wpm_array_merge_recursive( $option_post_config, $option_config ); + } + + $taxonomies = get_taxonomies(); + + foreach ( $taxonomies as $taxonomy ) { + + if ( null === wpm_get_taxonomy_config( $taxonomy ) ) { + continue; + } + + $option_taxonomy_config = array( + "title-tax-{$taxonomy}" => array(), + "metadesc-tax-{$taxonomy}" => array(), + ); + + $option_config = wpm_array_merge_recursive( $option_taxonomy_config, $option_config ); + } + + return $option_config; + } + + /** + * Translate page title + * + * @param $title + * + * @return string + */ + public function translate_title( $title ) { + $separator = wpseo_replace_vars( '%%sep%%', array() ); + $separator = ' ' . trim( $separator ) . ' '; + $titles_part = explode( $separator, $title ); + $titles_part = wpm_translate_value( $titles_part ); + $title = implode( $separator, $titles_part ); + + return $title; + } + + /** + * Add filter for each type + * + * @param $type + * + * @return mixed + */ + public function add_filter_for_maps( $type ) { + add_filter( "wpseo_sitemap_{$type}_urlset", array( $this, 'add_namespace_to_xml' ) ); + return $type; + } + + /** + * Add namespace for xmlns:xhtml + * + * @param $urlset + * + * @return mixed + */ + public function add_namespace_to_xml( $urlset ) { + $urlset = str_replace( + array( + 'http://www.google.com/schemas/sitemap-image/1.1/sitemap-image.xsd', + 'xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"' + ), + array( + 'http://www.google.com/schemas/sitemap-image/1.1/sitemap-image.xsd http://www.w3.org/1999/xhtml http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd', + 'xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:xhtml="http://www.w3.org/1999/xhtml"' + ), + $urlset ); + + return $urlset; + } + + /** + * Add separating by language to url + * + * @param array $url + * @param string $type + * @param object $object + * + * @return array + */ + public function add_lang_to_url( $url, $type, $object ) { + + $languages = array(); + + switch ( $type ) { + case 'post': + $languages = get_post_meta( $object->ID, '_languages', true ); + break; + case 'term': + $languages = get_term_meta( $object->term_id, '_languages', true ); + break; + } + + if ( $languages ) { + $url['languages'] = $languages; + } + + return $url; + } + + /** + * Add alternate links to sitemap + * + * @param string $output + * @param array $url + * + * @return string + */ + public function add_alternate_sitemaplinks( $output, $url ) { + $loc = $output; + $new_output = ''; + + foreach ( wpm_get_languages() as $code => $language ) { + + if ( isset( $url['languages'] ) && ! in_array( $code, $url['languages'] ) ) { + continue; + } + + $alternate = array(); + $new_loc = str_replace( $url['loc'], esc_url( wpm_translate_url( $url['loc'], $code ) ), $loc ); + + foreach ( wpm_get_languages() as $key => $lg ) { + if ( isset( $url['languages'] ) && ! in_array( $key, $url['languages'] ) ) { + continue; + } + + $alternate[ $key ] = sprintf( "\t\n\t", esc_attr( wpm_sanitize_lang_slug( $lg['locale'] ) ), esc_url( wpm_translate_url( $url['loc'], $key ) ) ); + } + + $alternate = apply_filters( 'wpm_sitemap_alternate_links', $alternate, $url['loc'], $code ); + $new_loc = str_replace( '', implode( '', $alternate ) . '', $new_loc ); + $new_output .= $new_loc; + } + + return $new_output; + } + + /** + * Set locale for opengraph + * + * @since 2.0.3 + * + * @param $count + * @param $lang + */ + public function set_opengraph_locale( $lang, $count ) { + $options = get_option( 'wpm_languages', array() ); + $value = ''; + + if ( isset( $options[ $lang ]['wpseo_og_locale'] ) ) { + $value = $options[ $lang ]['wpseo_og_locale']; + } + ?> + + + + +

    + + + 'string' ); + + return $schema; + } + + /** + * Save languages + * + * @since 2.0.3 + * + * @param $languages + * @param $request + * + * @return mixed + */ + public function save_languages( $languages, $request ) { + foreach ( $request as $value ) { + if ( isset( $languages[ $value['code'] ], $value['wpseo_og_locale'] ) ) { + $languages[ $value['code'] ]['wpseo_og_locale'] = $value['wpseo_og_locale']; + } + } + + return $languages; + } + + /** + * Set locale for opengraph + * + * @since 2.0.0 + * + * @param $locale + * + * @return string + */ + public function add_opengraph_locale( $locale ) { + $languages = wpm_get_languages(); + $user_language = wpm_get_language(); + + if ( ! empty( $languages[ $user_language ]['wpseo_og_locale'] ) ) { + $locale = $languages[ $user_language ]['wpseo_og_locale']; + } + + return $locale; + } + + /** + * Set alternate locale for opengraph + * + * @since 2.2.0 + */ + public function add_alternate_opengraph_locale() { + global $wpseo_og; + + $languages = array(); + + if ( is_singular() ) { + $languages = get_post_meta( get_the_ID(), '_languages', true ); + } elseif ( is_category() || is_tax() || is_tag() ) { + $languages = get_term_meta( get_queried_object_id(), '_languages', true ); + } + + foreach ( wpm_get_languages() as $code => $language ) { + + if ( ( $languages && ! isset( $languages[ $code ] ) ) || $code === wpm_get_language() ) { + continue; + } + + if ( ! empty( $language['wpseo_og_locale'] ) ) { + $wpseo_og->og_tag( 'og:locale:alternate', $language['wpseo_og_locale'] ); + } + } + } +} diff --git a/wp-content/plugins/wp-multilang/includes/libraries/abstract-wp-async-request.php b/wp-content/plugins/wp-multilang/includes/libraries/abstract-wp-async-request.php new file mode 100644 index 00000000..e551c8be --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/libraries/abstract-wp-async-request.php @@ -0,0 +1,160 @@ +identifier = $this->prefix . '_' . $this->action; + + add_action( 'wp_ajax_' . $this->identifier, array( $this, 'maybe_handle' ) ); + add_action( 'wp_ajax_nopriv_' . $this->identifier, array( $this, 'maybe_handle' ) ); + } + + /** + * Set data used during the request + * + * @param array $data Data. + * + * @return $this + */ + public function data( $data ) { + $this->data = $data; + + return $this; + } + + /** + * Dispatch the async request + * + * @return array|WP_Error + */ + public function dispatch() { + $url = add_query_arg( $this->get_query_args(), $this->get_query_url() ); + $args = $this->get_post_args(); + + return wp_remote_post( esc_url_raw( $url ), $args ); + } + + /** + * Get query args + * + * @return array + */ + protected function get_query_args() { + if ( property_exists( $this, 'query_args' ) ) { + return $this->query_args; + } + + return array( + 'action' => $this->identifier, + 'nonce' => wp_create_nonce( $this->identifier ), + ); + } + + /** + * Get query URL + * + * @return string + */ + protected function get_query_url() { + if ( property_exists( $this, 'query_url' ) ) { + return $this->query_url; + } + + return admin_url( 'admin-ajax.php' ); + } + + /** + * Get post args + * + * @return array + */ + protected function get_post_args() { + if ( property_exists( $this, 'post_args' ) ) { + return $this->post_args; + } + + return array( + 'timeout' => 0.01, + 'blocking' => false, + 'body' => $this->data, + 'cookies' => $_COOKIE, + 'sslverify' => apply_filters( 'https_local_ssl_verify', false ), + ); + } + + /** + * Maybe handle + * + * Check for correct nonce and pass to handler. + */ + public function maybe_handle() { + // Don't lock up other requests while processing + session_write_close(); + + check_ajax_referer( $this->identifier, 'nonce' ); + + $this->handle(); + + wp_die(); + } + + /** + * Handle + * + * Override this method to perform any actions required + * during the async request. + */ + abstract protected function handle(); +} diff --git a/wp-content/plugins/wp-multilang/includes/libraries/abstract-wp-background-process.php b/wp-content/plugins/wp-multilang/includes/libraries/abstract-wp-background-process.php new file mode 100644 index 00000000..39cd75d5 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/libraries/abstract-wp-background-process.php @@ -0,0 +1,502 @@ +cron_hook_identifier = $this->identifier . '_cron'; + $this->cron_interval_identifier = $this->identifier . '_cron_interval'; + + add_action( $this->cron_hook_identifier, array( $this, 'handle_cron_healthcheck' ) ); + add_filter( 'cron_schedules', array( $this, 'schedule_cron_healthcheck' ) ); + } + + /** + * Dispatch + * + * @access public + * @return void + */ + public function dispatch() { + // Schedule the cron healthcheck. + $this->schedule_event(); + + // Perform remote post. + return parent::dispatch(); + } + + /** + * Push to queue + * + * @param mixed $data Data. + * + * @return $this + */ + public function push_to_queue( $data ) { + $this->data[] = $data; + + return $this; + } + + /** + * Save queue + * + * @return $this + */ + public function save() { + $key = $this->generate_key(); + + if ( ! empty( $this->data ) ) { + update_site_option( $key, $this->data ); + } + + return $this; + } + + /** + * Update queue + * + * @param string $key Key. + * @param array $data Data. + * + * @return $this + */ + public function update( $key, $data ) { + if ( ! empty( $data ) ) { + update_site_option( $key, $data ); + } + + return $this; + } + + /** + * Delete queue + * + * @param string $key Key. + * + * @return $this + */ + public function delete( $key ) { + delete_site_option( $key ); + + return $this; + } + + /** + * Generate key + * + * Generates a unique key based on microtime. Queue items are + * given a unique key so that they can be merged upon save. + * + * @param int $length Length. + * + * @return string + */ + protected function generate_key( $length = 64 ) { + $unique = md5( microtime() . rand() ); + $prepend = $this->identifier . '_batch_'; + + return substr( $prepend . $unique, 0, $length ); + } + + /** + * Maybe process queue + * + * Checks whether data exists within the queue and that + * the process is not already running. + */ + public function maybe_handle() { + // Don't lock up other requests while processing + session_write_close(); + + if ( $this->is_process_running() ) { + // Background process already running. + wp_die(); + } + + if ( $this->is_queue_empty() ) { + // No data to process. + wp_die(); + } + + check_ajax_referer( $this->identifier, 'nonce' ); + + $this->handle(); + + wp_die(); + } + + /** + * Is queue empty + * + * @return bool + */ + protected function is_queue_empty() { + global $wpdb; + + $table = $wpdb->options; + $column = 'option_name'; + + if ( is_multisite() ) { + $table = $wpdb->sitemeta; + $column = 'meta_key'; + } + + $key = $wpdb->esc_like( $this->identifier . '_batch_' ) . '%'; + + $count = $wpdb->get_var( $wpdb->prepare( " + SELECT COUNT(*) + FROM {$table} + WHERE {$column} LIKE %s + ", $key ) ); + + return ( $count > 0 ) ? false : true; + } + + /** + * Is process running + * + * Check whether the current process is already running + * in a background process. + */ + protected function is_process_running() { + if ( get_site_transient( $this->identifier . '_process_lock' ) ) { + // Process already running. + return true; + } + + return false; + } + + /** + * Lock process + * + * Lock the process so that multiple instances can't run simultaneously. + * Override if applicable, but the duration should be greater than that + * defined in the time_exceeded() method. + */ + protected function lock_process() { + $this->start_time = time(); // Set start time of current process. + + $lock_duration = ( property_exists( $this, 'queue_lock_time' ) ) ? $this->queue_lock_time : 60; // 1 minute + $lock_duration = apply_filters( $this->identifier . '_queue_lock_time', $lock_duration ); + + set_site_transient( $this->identifier . '_process_lock', microtime(), $lock_duration ); + } + + /** + * Unlock process + * + * Unlock the process so that other instances can spawn. + * + * @return $this + */ + protected function unlock_process() { + delete_site_transient( $this->identifier . '_process_lock' ); + + return $this; + } + + /** + * Get batch + * + * @return \stdClass Return the first batch from the queue + */ + protected function get_batch() { + global $wpdb; + + $table = $wpdb->options; + $column = 'option_name'; + $key_column = 'option_id'; + $value_column = 'option_value'; + + if ( is_multisite() ) { + $table = $wpdb->sitemeta; + $column = 'meta_key'; + $key_column = 'meta_id'; + $value_column = 'meta_value'; + } + + $key = $wpdb->esc_like( $this->identifier . '_batch_' ) . '%'; + + $query = $wpdb->get_row( $wpdb->prepare( " + SELECT * + FROM {$table} + WHERE {$column} LIKE %s + ORDER BY {$key_column} ASC + LIMIT 1 + ", $key ) ); + + $batch = new \stdClass(); + $batch->key = $query->$column; + $batch->data = maybe_unserialize( $query->$value_column ); + + return $batch; + } + + /** + * Handle + * + * Pass each queue item to the task handler, while remaining + * within server memory and time limit constraints. + */ + protected function handle() { + $this->lock_process(); + + do { + $batch = $this->get_batch(); + + foreach ( $batch->data as $key => $value ) { + $task = $this->task( $value ); + + if ( false !== $task ) { + $batch->data[ $key ] = $task; + } else { + unset( $batch->data[ $key ] ); + } + + if ( $this->time_exceeded() || $this->memory_exceeded() ) { + // Batch limits reached. + break; + } + } + + // Update or delete current batch. + if ( ! empty( $batch->data ) ) { + $this->update( $batch->key, $batch->data ); + } else { + $this->delete( $batch->key ); + } + } while ( ! $this->time_exceeded() && ! $this->memory_exceeded() && ! $this->is_queue_empty() ); + + $this->unlock_process(); + + // Start next batch or complete process. + if ( ! $this->is_queue_empty() ) { + $this->dispatch(); + } else { + $this->complete(); + } + } + + /** + * Memory exceeded + * + * Ensures the batch process never exceeds 90% + * of the maximum WordPress memory. + * + * @return bool + */ + protected function memory_exceeded() { + $memory_limit = $this->get_memory_limit() * 0.9; // 90% of max memory + $current_memory = memory_get_usage( true ); + $return = false; + + if ( $current_memory >= $memory_limit ) { + $return = true; + } + + return apply_filters( $this->identifier . '_memory_exceeded', $return ); + } + + /** + * Get memory limit + * + * @return int + */ + protected function get_memory_limit() { + if ( function_exists( 'ini_get' ) ) { + $memory_limit = ini_get( 'memory_limit' ); + } else { + // Sensible default. + $memory_limit = '128M'; + } + + if ( ! $memory_limit || -1 === intval( $memory_limit ) ) { + // Unlimited, set to 32GB. + $memory_limit = '32000M'; + } + + return intval( $memory_limit ) * 1024 * 1024; + } + + /** + * Time exceeded. + * + * Ensures the batch never exceeds a sensible time limit. + * A timeout limit of 30s is common on shared hosting. + * + * @return bool + */ + protected function time_exceeded() { + $finish = $this->start_time + apply_filters( $this->identifier . '_default_time_limit', 20 ); // 20 seconds + $return = false; + + if ( time() >= $finish ) { + $return = true; + } + + return apply_filters( $this->identifier . '_time_exceeded', $return ); + } + + /** + * Complete. + * + * Override if applicable, but ensure that the below actions are + * performed, or, call parent::complete(). + */ + protected function complete() { + // Unschedule the cron healthcheck. + $this->clear_scheduled_event(); + } + + /** + * Schedule cron healthcheck + * + * @access public + * @param mixed $schedules Schedules. + * @return mixed + */ + public function schedule_cron_healthcheck( $schedules ) { + $interval = apply_filters( $this->identifier . '_cron_interval', 5 ); + + if ( property_exists( $this, 'cron_interval' ) ) { + $interval = apply_filters( $this->identifier . '_cron_interval', $this->cron_interval_identifier ); + } + + // Adds every 5 minutes to the existing schedules. + $schedules[ $this->identifier . '_cron_interval' ] = array( + 'interval' => MINUTE_IN_SECONDS * $interval, + 'display' => sprintf( __( 'Every %d minutes', 'wp-multilang' ), $interval ), + ); + + return $schedules; + } + + /** + * Handle cron healthcheck + * + * Restart the background process if not already running + * and data exists in the queue. + */ + public function handle_cron_healthcheck() { + if ( $this->is_process_running() ) { + // Background process already running. + exit; + } + + if ( $this->is_queue_empty() ) { + // No data to process. + $this->clear_scheduled_event(); + exit; + } + + $this->handle(); + + exit; + } + + /** + * Schedule event + */ + protected function schedule_event() { + if ( ! wp_next_scheduled( $this->cron_hook_identifier ) ) { + wp_schedule_event( time(), $this->cron_interval_identifier, $this->cron_hook_identifier ); + } + } + + /** + * Clear scheduled event + */ + protected function clear_scheduled_event() { + $timestamp = wp_next_scheduled( $this->cron_hook_identifier ); + + if ( $timestamp ) { + wp_unschedule_event( $timestamp, $this->cron_hook_identifier ); + } + } + + /** + * Cancel Process + * + * Stop processing queue items, clear cronjob and delete batch. + * + */ + public function cancel_process() { + if ( ! $this->is_queue_empty() ) { + $batch = $this->get_batch(); + + $this->delete( $batch->key ); + + wp_clear_scheduled_hook( $this->cron_hook_identifier ); + } + + } + + /** + * Task + * + * Override this method to perform any actions required on each + * queue item. Return the modified item for further processing + * in the next pass through. Or, return false to remove the + * item from the queue. + * + * @param mixed $item Queue item to iterate over. + * + * @return mixed + */ + abstract protected function task( $item ); + +} diff --git a/wp-content/plugins/wp-multilang/includes/libraries/class-wpm-walker-nav-menu-edit.php b/wp-content/plugins/wp-multilang/includes/libraries/class-wpm-walker-nav-menu-edit.php new file mode 100644 index 00000000..67d4e578 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/libraries/class-wpm-walker-nav-menu-edit.php @@ -0,0 +1,85 @@ + + */ +class WPM_Walker_Nav_Menu_Edit extends \Walker_Nav_Menu_Edit { + + /** + * Start the element output. + * + * We're injecting our custom fields after the div.submitbox + * + * @see Walker_Nav_Menu::start_el() + * @since 0.1.0 + * @since 0.2.0 Update regex pattern to support WordPress 4.7's markup. + * + * @param string $output Passed by reference. Used to append additional content. + * @param object $item Menu item data object. + * @param int $depth Depth of menu item. Used for padding. + * @param array $args Menu item args. + * @param int $id Nav menu ID. + */ + function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) { + $item_output = ''; + + parent::start_el( $item_output, $item, $depth, $args, $id ); + + $output .= preg_replace( + // NOTE: Check this regex from time to time! + '/(?=<(fieldset|p)[^>]+class="[^"]*field-move)/', + $this->get_fields( $item, $depth, $args ), + $item_output + ); + } + + + /** + * Get custom fields + * + * @access protected + * @since 0.1.0 + * @uses add_action() Calls 'menu_item_custom_fields' hook + * + * @param object $item Menu item data object. + * @param int $depth Depth of menu item. Used for padding. + * @param array $args Menu item args. + * @param int $id Nav menu ID. + * + * @return string Form fields + */ + protected function get_fields( $item, $depth, $args = array(), $id = 0 ) { + ob_start(); + + /** + * Get menu item custom fields from plugins/themes + * + * @since 0.1.0 + * @since 1.0.0 Pass correct parameters. + * + * @param int $item_id Menu item ID. + * @param object $item Menu item data object. + * @param int $depth Depth of menu item. Used for padding. + * @param array $args Menu item args. + * @param int $id Nav menu ID. + * + * @return string Custom fields HTML. + */ + do_action( 'wp_nav_menu_item_custom_fields', $item->ID, $item, $depth, $args, $id ); + + return ob_get_clean(); + } +} diff --git a/wp-content/plugins/wp-multilang/includes/widgets/class-wpm-widget-language-switcher.php b/wp-content/plugins/wp-multilang/includes/widgets/class-wpm-widget-language-switcher.php new file mode 100644 index 00000000..121832e6 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/widgets/class-wpm-widget-language-switcher.php @@ -0,0 +1,79 @@ +widget_cssclass = 'wpm widget_language_switcher'; + $this->widget_description = __( 'Display language switcher.', 'wp-multilang' ); + $this->widget_id = 'wpm_language_switcher'; + $this->widget_name = __( 'Language Switcher', 'wp-multilang' ); + $this->settings = array( + 'title' => array( + 'type' => 'text', + 'std' => __( 'Languages', 'wp-multilang' ), + 'label' => __( 'Title', 'wp-multilang' ), + ), + 'show' => array( + 'type' => 'select', + 'std' => 'both', + 'options' => array( + 'both' => __( 'Both', 'wp-multilang' ), + 'flag' => __( 'Flag', 'wp-multilang' ), + 'name' => __( 'Name', 'wp-multilang' ), + ), + 'label' => __( 'Show', 'wp-multilang' ), + ), + 'type' => array( + 'type' => 'select', + 'std' => 'list', + 'options' => array( + 'list' => __( 'List', 'wp-multilang' ), + 'dropdown' => __( 'Dropdown', 'wp-multilang' ), + 'select' => __( 'Select', 'wp-multilang' ), + ), + 'label' => __( 'Switcher Type', 'wp-multilang' ), + ), + ); + parent::__construct(); + } + + /** + * Display language switcher + * + * @param array $args + * @param array $instance + */ + public function widget( $args, $instance ) { + + ob_start(); + + $this->widget_start( $args, $instance ); + + wpm_language_switcher( $instance['type'], $instance['show'] ); + + $this->widget_end( $args ); + + $content = ob_get_clean(); + + echo $content; + + } +} diff --git a/wp-content/plugins/wp-multilang/includes/wpm-config-functions.php b/wp-content/plugins/wp-multilang/includes/wpm-config-functions.php new file mode 100644 index 00000000..c9549341 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/wpm-config-functions.php @@ -0,0 +1,91 @@ +setup->get_config(); +} + +/** + * Get post type config + * + * @param $post_type + * + * @return array + */ +function wpm_get_post_config( $post_type ) { + $config = wpm_get_config(); + $posts_config = apply_filters( 'wpm_posts_config', $config['post_types'] ); + $post_config = apply_filters( "wpm_post_{$post_type}_config", isset( $posts_config[ $post_type ] ) ? $posts_config[ $post_type ] : null ); + + if ( null !== $post_config ) { + $default_fields = array( + 'post_title' => array(), + 'post_excerpt' => array(), + 'post_content' => array(), + ); + + $post_config = wpm_array_merge_recursive( $default_fields, $post_config ); + } + + return $post_config; +} + +/** + * Get taxonomy config + * + * @param $taxonomy + * + * @return array + */ +function wpm_get_taxonomy_config( $taxonomy ) { + $config = wpm_get_config(); + $taxonomies_config = apply_filters( 'wpm_taxonomies_config', $config['taxonomies'] ); + $taxonomy_config = apply_filters( "wpm_taxonomy_{$taxonomy}_config", isset( $taxonomies_config[ $taxonomy ] ) ? $taxonomies_config[ $taxonomy ] : null ); + + if ( null !== $taxonomy_config ) { + $default_fields = array( + 'name' => array(), + 'description' => array(), + ); + + $taxonomy_config = wpm_array_merge_recursive( $default_fields, $taxonomy_config ); + } + + return $taxonomy_config; +} + +/** + * Get widget config + * + * @param $widget + * + * @return array + */ +function wpm_get_widget_config( $widget ) { + $config = wpm_get_config(); + $widgets_config = apply_filters( 'wpm_widgets_config', $config['widgets'] ); + $widget_config = apply_filters( "wpm_widget_{$widget}_config", array_key_exists( $widget, $widgets_config ) ? $widgets_config[ $widget ] : array() ); + + if ( null !== $widget_config ) { + + $default_fields = array( + 'title' => array(), + 'text' => array(), + ); + + $widget_config = wpm_array_merge_recursive( $default_fields, $widget_config ); + } + + return $widget_config; +} diff --git a/wp-content/plugins/wp-multilang/includes/wpm-core-functions.php b/wp-content/plugins/wp-multilang/includes/wpm-core-functions.php new file mode 100644 index 00000000..2a4bb683 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/wpm-core-functions.php @@ -0,0 +1,523 @@ +template_path(); + + // Look in yourtheme/slug-name.php and yourtheme/wp-multilang/slug-name.php + if ( $name ) { + $template = locate_template( array( "{$slug}-{$name}.php", "wp-multilang/{$slug}-{$name}.php" ) ); + } + + // If a custom path was defined, check that next + if ( ! $template && $custom_dir && file_exists( trailingslashit( $custom_dir ) . "{$slug}-{$name}.php" ) ) { + $template = trailingslashit( $custom_dir ) . "{$slug}-{$name}.php"; + } + + // Get default slug-name.php + if ( ! $template && $name && file_exists( $template_path . "{$slug}-{$name}.php" ) ) { + $template = $template_path . "{$slug}-{$name}.php"; + } + + // If template file doesn't exist, look in yourtheme/slug.php and yourtheme/wp-multilang/slug.php + if ( ! $template ) { + $template = locate_template( array( "{$slug}.php", "wp-multilang/{$slug}.php" ) ); + } + + // If a custom path was defined, check that next + if ( ! $template && $custom_dir && file_exists( trailingslashit( $custom_dir ) . "{$slug}.php" ) ) { + $template = trailingslashit( $custom_dir ) . "{$slug}.php"; + } + + // Get default slug-name.php + if ( ! $template && file_exists( $template_path . "{$slug}.php" ) ) { + $template = $template_path . "{$slug}.php"; + } + + // Allow 3rd party plugin filter template file from their plugin + $template = apply_filters( 'wpm_get_template_part', $template, $slug, $name ); + + // Load template if we've found one + if ( $template ) { + + // Extract args if there are any + if ( is_array( $args ) && count( $args ) > 0 ) { + extract( $args ); + } + + do_action( 'wpm_before_template_part', $template, $slug, $name, $custom_dir, $args ); + + ob_start(); + + include( $template ); + + do_action( 'wpm_after_template_part', $template, $slug, $name, $custom_dir, $args ); + + return ob_get_clean(); + } +} + +/** + * Load assets + * + * @param $filename + * + * @return string + */ +function wpm_asset_path( $filename ) { + $dist_path = str_replace( array( 'http:', 'https:' ), '', wpm()->plugin_url() ) . '/assets/'; + $directory = dirname( $filename ) . '/'; + $file = basename( $filename ); + + return $dist_path . $directory . $file; +} + +/** + * Queue some JavaScript code to be output in the footer. + * + * @param string $code + */ +function wpm_enqueue_js( $code ) { + global $wpm_queued_js; + + if ( empty( $wpm_queued_js ) ) { + $wpm_queued_js = ''; + } + + $wpm_queued_js .= "\n" . $code . "\n"; +} + +/** + * Output any queued javascript code in the footer. + */ +function wpm_print_js() { + global $wpm_queued_js; + + if ( ! empty( $wpm_queued_js ) ) { + // Sanitize. + $wpm_queued_js = wp_check_invalid_utf8( $wpm_queued_js ); + $wpm_queued_js = preg_replace( '/&#(x)?0*(?(1)27|39);?/i', "'", $wpm_queued_js ); + $wpm_queued_js = str_replace( "\r", '', $wpm_queued_js ); + + $js = "\n\n"; + + /** + * game_portal_queued_js filter. + * + * @param string $js JavaScript code. + */ + echo $js; + + unset( $wpm_queued_js ); + } +} + +/** + * Set a cookie - wrapper for setcookie using WP constants. + * + * @param string $name Name of the cookie being set. + * @param string $value Value of the cookie. + * @param integer $expire Expiry of the cookie. + * @param bool $secure Whether the cookie should be served only over https. + */ +function wpm_setcookie( $name, $value, $expire = 0, $secure = false ) { + if ( ! headers_sent() ) { + setcookie( $name, $value, $expire, COOKIEPATH ? COOKIEPATH : '/', null, $secure ); + if ( COOKIEPATH != SITECOOKIEPATH ) { + setcookie( $name, $value, $expire, SITECOOKIEPATH, null, $secure ); + } + } elseif ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { + headers_sent( $file, $line ); + trigger_error( "{$name} cookie cannot be set - headers already sent by {$file} on line {$line}", E_USER_NOTICE ); + } +} + + +/** + * Get current url from $_SERVER + * + * @return string + */ +function wpm_get_current_url() { + $url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ); + + return $url; +} + + +/** + * Get current url from $_SERVER and translate it + * + * @param string $lang + * + * @return string + */ +function wpm_translate_current_url( $lang = '' ) { + $url = wpm_get_current_url(); + + if ( ! $lang ) { + $lang = wpm_get_language(); + } + + $url = wpm_translate_url( $url, $lang ); + + return apply_filters( 'wpm_get_current_url', $url, $lang ); +} + +/** + * Get original home url + * + * @see WPM_Setup::get_original_home_url() + * + * @since 1.7.0 + * + * @return string + */ +function wpm_get_orig_home_url() { + $home_url = wpm()->setup->get_original_home_url(); + + return apply_filters( 'wpm_get_original_home_url', $home_url ); +} + + +/** + * Translate escaping text + * + * @param string $string + * + * @return string + */ +function wpm_escaping_text( $string ) { + if ( 'GET' === $_SERVER['REQUEST_METHOD'] ) { + $string = wpm_translate_string( $string ); + } + + return $string; +} + +/** + * Translate attributes if it is json string + * + * @param $string + * + * @return string + */ +function wpm_attribute_escape( $string ) { + if ( 'GET' === $_SERVER['REQUEST_METHOD'] ) { + $string = wp_specialchars_decode( $string, ENT_QUOTES ); + + if ( isJSON( $string ) ) { + $array = json_decode( $string, true ); + $array = wpm_translate_value( $array ); + $string = wp_json_encode( $array ); + } else { + $string = wpm_translate_string( $string ); + } + + $string = _wp_specialchars( $string, ENT_QUOTES ); + } + + return $string; +} + +add_filter( 'attribute_escape', 'wpm_attribute_escape', 5 ); +add_filter( 'esc_textarea', 'wpm_escaping_text', 5 ); +add_filter( 'esc_html', 'wpm_escaping_text', 5 ); +add_filter( 'localization', 'wpm_translate_string', 5 ); +add_filter( 'gettext', 'wpm_translate_string', 5 ); + +if ( ! function_exists( 'remove_class_filter' ) ) { + /** + * Remove Class Filter Without Access to Class Object + * + * In order to use the core WordPress remove_filter() on a filter added with the callback + * to a class, you either have to have access to that class object, or it has to be a call + * to a static method. This method allows you to remove filters with a callback to a class + * you don't have access to. + * + * Works with WordPress 1.2+ (4.7+ support added 9-19-2016) + * Updated 2-27-2017 to use internal WordPress removal for 4.7+ (to prevent PHP warnings output) + * + * @param string $tag Filter to remove + * @param string $class_name Class name for the filter's callback + * @param string $method_name Method name for the filter's callback + * @param int $priority Priority of the filter (default 10) + * + * @return bool Whether the function is removed. + */ + function remove_class_filter( $tag, $class_name = '', $method_name = '', $priority = 10 ) { + global $wp_filter; + // Check that filter actually exists first + if ( ! isset( $wp_filter[ $tag ] ) ) { + return false; + } + /** + * If filter config is an object, means we're using WordPress 4.7+ and the config is no longer + * a simple array, rather it is an object that implements the ArrayAccess interface. + * + * To be backwards compatible, we set $callbacks equal to the correct array as a reference (so $wp_filter is updated) + * + * @see https://make.wordpress.org/core/2016/09/08/wp_hook-next-generation-actions-and-filters/ + */ + if ( is_object( $wp_filter[ $tag ] ) && isset( $wp_filter[ $tag ]->callbacks ) ) { + // Create $fob object from filter tag, to use below + $fob = $wp_filter[ $tag ]; + $callbacks = &$wp_filter[ $tag ]->callbacks; + } else { + $callbacks = &$wp_filter[ $tag ]; + } + // Exit if there aren't any callbacks for specified priority + if ( ! isset( $callbacks[ $priority ] ) || empty( $callbacks[ $priority ] ) ) { + return false; + } + // Loop through each filter for the specified priority, looking for our class & method + foreach ( (array) $callbacks[ $priority ] as $filter_id => $filter ) { + // Filter should always be an array - array( $this, 'method' ), if not goto next + if ( ! isset( $filter['function'] ) || ! is_array( $filter['function'] ) ) { + continue; + } + // If first value in array is not an object, it can't be a class + if ( ! is_object( $filter['function'][0] ) ) { + continue; + } + // Method doesn't match the one we're looking for, goto next + if ( $filter['function'][1] !== $method_name ) { + continue; + } + // Method matched, now let's check the Class + if ( get_class( $filter['function'][0] ) === $class_name ) { + // WordPress 4.7+ use core remove_filter() since we found the class object + if ( isset( $fob ) ) { + // Handles removing filter, reseting callback priority keys mid-iteration, etc. + $fob->remove_filter( $tag, $filter['function'], $priority ); + } else { + // Use legacy removal process (pre 4.7) + unset( $callbacks[ $priority ][ $filter_id ] ); + // and if it was the only filter in that priority, unset that priority + if ( empty( $callbacks[ $priority ] ) ) { + unset( $callbacks[ $priority ] ); + } + // and if the only filter for that tag, set the tag to an empty array + if ( empty( $callbacks ) ) { + $callbacks = array(); + } + // Remove this filter from merged_filters, which specifies if filters have been sorted + unset( $GLOBALS['merged_filters'][ $tag ] ); + } + return true; + } + } + + return false; + } +} + +if ( ! function_exists( 'remove_class_action' ) ) { + /** + * Remove Class Action Without Access to Class Object + * + * In order to use the core WordPress remove_action() on an action added with the callback + * to a class, you either have to have access to that class object, or it has to be a call + * to a static method. This method allows you to remove actions with a callback to a class + * you don't have access to. + * + * Works with WordPress 1.2+ (4.7+ support added 9-19-2016) + * + * @param string $tag Action to remove + * @param string $class_name Class name for the action's callback + * @param string $method_name Method name for the action's callback + * @param int $priority Priority of the action (default 10) + * + * @return bool Whether the function is removed. + */ + function remove_class_action( $tag, $class_name = '', $method_name = '', $priority = 10 ) { + return remove_class_filter( $tag, $class_name, $method_name, $priority ); + } +} + +/** + * Define a constant if it is not already defined. + * + * @since 1.8.0 + * @param string $name Constant name. + * @param string $value Value. + */ +function wpm_maybe_define_constant( $name, $value ) { + if ( ! defined( $name ) ) { + define( $name, $value ); + } +} + +/** + * Get an item of post data if set, otherwise return a default value. + * + * @since 1.8.0 + * @param string $key + * @param string $default + * @return mixed value sanitized by wpm_clean + */ +function wpm_get_post_data_by_key( $key, $default = '' ) { + return wpm_clean( wpm_get_var( $_POST[ $key ], $default ) ); +} + +/** + * Get data if set, otherwise return a default value or null. Prevents notices when data is not set. + * + * @since 1.8.0 + * @param mixed $var + * @param string $default + * @return mixed value sanitized by wpm_clean + */ +function wpm_get_var( &$var, $default = null ) { + return isset( $var ) ? $var : $default; +} + +/** + * Delete expired transients. + * + * Deletes all expired transients. The multi-table delete syntax is used. + * to delete the transient record from table a, and the corresponding. + * transient_timeout record from table b. + * + * Based on code inside core's upgrade_network() function. + * + * @since 1.8.0 + * + * @return int Number of transients that were cleared. + */ +function wpm_delete_expired_transients() { + global $wpdb; + + $sql = "DELETE a, b FROM $wpdb->options a, $wpdb->options b + WHERE a.option_name LIKE %s + AND a.option_name NOT LIKE %s + AND b.option_name = CONCAT( '_transient_timeout_', SUBSTRING( a.option_name, 12 ) ) + AND b.option_value < %d"; + $rows = $wpdb->query( $wpdb->prepare( $sql, $wpdb->esc_like( '_transient_' ) . '%', $wpdb->esc_like( '_transient_timeout_' ) . '%', time() ) ); + + $sql = "DELETE a, b FROM $wpdb->options a, $wpdb->options b + WHERE a.option_name LIKE %s + AND a.option_name NOT LIKE %s + AND b.option_name = CONCAT( '_site_transient_timeout_', SUBSTRING( a.option_name, 17 ) ) + AND b.option_value < %d"; + $rows2 = $wpdb->query( $wpdb->prepare( $sql, $wpdb->esc_like( '_site_transient_' ) . '%', $wpdb->esc_like( '_site_transient_timeout_' ) . '%', time() ) ); + + return absint( $rows + $rows2 ); +} +add_action( 'wpm_installed', 'wpm_delete_expired_transients' ); + +/** + * Display a WP Multilang help tip. + * + * @since 2.1.1 + * + * @param string $tip Help tip text + * @param bool $allow_html Allow sanitized HTML if true or escape + * @return string + */ +function wpm_help_tip( $tip, $allow_html = false ) { + if ( $allow_html ) { + $tip = wpm_sanitize_tooltip( $tip ); + } else { + $tip = esc_attr( $tip ); + } + + return ''; +} + +/** + * Get post by title + * + * @param $page_title + * @param string $output + * @param string $post_type + * + * @return array|null|WP_Post + */ +function wpm_get_page_by_title( $page_title, $output = OBJECT, $post_type = 'page' ) { + global $wpdb; + + $like = '%' . $wpdb->esc_like( esc_sql( '[:' . wpm_get_language() . ']' . $page_title . '[:' ) ) . '%'; + + if ( is_array( $post_type ) ) { + $post_type = esc_sql( $post_type ); + $post_type_in_string = "'" . implode( "','", $post_type ) . "'"; + $sql = $wpdb->prepare( " + SELECT ID, post_title + FROM $wpdb->posts + WHERE post_title LIKE %s + AND post_type IN ($post_type_in_string) + ", $like ); + } else { + $sql = $wpdb->prepare( " + SELECT ID, post_title + FROM $wpdb->posts + WHERE post_title LIKE %s + AND post_type = %s + ", $like, $post_type ); + } + + $page = $wpdb->get_var( $sql ); + + if ( $page ) { + return get_post( $page, $output ); + } +} + +if ( ! function_exists( 'is_admin_url' ) ) { + /** + * Check if is admin url + * + * @param $url + * + * @return bool + */ + function is_admin_url( $url ) { + return ! strpos( $url, 'wp-admin/' ) === false; + } +} + +if ( ! function_exists( 'is_front_ajax' ) ) { + /** + * Check if it is ajax from front + * + * @return bool + */ + function is_front_ajax() { + return wp_doing_ajax() && ( $referrer = wp_get_raw_referer() ) && ! is_admin_url( $referrer ) ; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/wpm-formatting-functions.php b/wp-content/plugins/wp-multilang/includes/wpm-formatting-functions.php new file mode 100644 index 00000000..789c0cea --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/wpm-formatting-functions.php @@ -0,0 +1,192 @@ + & $value ) { + if ( is_array( $value ) && isset( $merged[ $key ] ) && is_array( $merged[ $key ] ) ) { + $merged[ $key ] = wpm_array_merge_recursive( $merged[ $key ], $value ); + } elseif ( is_numeric( $key ) ) { + if ( ! in_array( $value, $merged, true ) ) { + $merged[] = $value; + } + } else { + $merged[ $key ] = $value; + } + } + + return $merged; +} + +/** + * Diff multidimensional array + * + * @param $array1 + * @param $array2 + * + * @return array + */ +function wpm_array_diff_recursive( $array1, $array2 ) { + $result = array(); + foreach ( $array1 as $key => $val ) { + if ( isset( $array2[ $key ] ) ) { + if ( is_array( $val ) && $array2[ $key ] ) { + if ( $result_item = wpm_array_diff_recursive( $val, $array2[ $key ] ) ) { + $result[ $key ] = $result_item; + } + } + } else { + $result[ $key ] = $val; + } + } + + return $result; +} + +/** + * Insert a value or key/value pair after a specific key in an array. If key doesn't exist, value is appended + * to the end of the array. + * + * @param array $array + * @param string $key + * @param array $new + * + * @return array + */ +function wpm_array_insert_after( array $array, $key, array $new ) { + $keys = array_keys( $array ); + $index = array_search( $key, $keys ); + $pos = false === $index ? count( $array ) : $index + 1; + return array_merge( array_slice( $array, 0, $pos ), $new, array_slice( $array, $pos ) ); +} + +/** + * Sanitize a string destined to be a tooltip. + * + * @since 2.1.1 Tooltips are encoded with htmlspecialchars to prevent XSS. Should not be used in conjunction with esc_attr() + * @param string $var + * @return string + */ +function wpm_sanitize_tooltip( $var ) { + return htmlspecialchars( wp_kses( html_entity_decode( $var ), array( + 'br' => array(), + 'em' => array(), + 'strong' => array(), + 'small' => array(), + 'span' => array(), + 'ul' => array(), + 'li' => array(), + 'ol' => array(), + 'p' => array(), + ) ) ); +} + +/** + * Formatting language slug + * + * @param string $slag + * + * @return string + */ +function wpm_sanitize_lang_slug( $slag ) { + $slag = str_replace( '_', '-', strtolower( sanitize_title( $slag ) ) ); + + return $slag; +} + +/** + * Filter fields in config for safe requests to base for post + * + * @since 2.1.1 + * + * @param $fields + * + * @return array + */ +function wpm_filter_post_config_fields( $fields ) { + + $default_fields = array( + 'post_author', + 'post_date', + 'post_date_gmt', + 'post_content', + 'post_title', + 'post_excerpt', + 'post_status', + 'comment_status', + 'ping_status', + 'post_password', + 'post_name', + 'to_ping', + 'pinged', + 'post_modified', + 'post_modified_gmt', + 'post_content_filtered', + 'post_parent', + 'guid', + 'menu_order', + 'post_type', + 'post_mime_type', + 'comment_count', + ); + + return array_intersect( $default_fields, $fields ); +} + +/** + * Strip protocol from url + * + * @param $url + * + * @return string + */ +function wpm_strip_protocol( $url ) { + + // strip the protical + return preg_replace( '#^https?://#i', '', $url ); +} + +/** + * Check if is JSON string + */ +if ( ! function_exists( 'isJSON' ) ) { + function isJSON( $string ) { + return is_string( $string ) && is_array( json_decode( $string, true ) ) && ( json_last_error() == JSON_ERROR_NONE ) ? true : false; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/wpm-language-functions.php b/wp-content/plugins/wp-multilang/includes/wpm-language-functions.php new file mode 100644 index 00000000..20bc2be5 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/wpm-language-functions.php @@ -0,0 +1,142 @@ +setup->get_languages(); +} + +/** + * Get user language + * + * @see WPM_Setup::get_user_language() + * + * @return string + */ +function wpm_get_user_language() { + return wpm()->setup->get_user_language(); +} + +/** + * Get default locale + * + * @see WPM_Setup::get_default_locale() + * + * @return string + */ +function wpm_get_default_locale() { + return wpm()->setup->get_default_locale(); +} + +/** + * Get site language + * + * @since 2.0.0 + * + * @see WPM_Setup::get_default_language() + * + * @return string + */ +function wpm_get_default_language() { + return wpm()->setup->get_default_language(); +} + +/** + * Get options + * + * @see WPM_Setup::get_options() + * + * @return array + */ +function wpm_get_lang_option() { + if ( version_compare( WPM_Setup::get_option( 'version' ), '2.0.0', '<' ) ) { + return array(); + } + + return WPM_Setup::get_option( 'languages' ); +} + +/** + * Get installed languages + * + * @see WPM_Setup::get_installed_languages() + * + * @return array + */ +function wpm_get_installed_languages() { + return wpm()->setup->get_installed_languages(); +} + +/** + * Get available translation + * + * @see WPM_Setup::get_translations() + * + * @return array + */ +function wpm_get_available_translations() { + return wpm()->setup->get_translations(); +} + +/** + * Get language for translation + * + * @since 1.7.0 + * + * @return string + */ +function wpm_get_language() { + + $referrer = wp_get_raw_referer(); + + if ( ( defined( 'REST_REQUEST' ) && ( 'GET' !== $_SERVER['REQUEST_METHOD'] || is_admin_url( $referrer ) ) ) || is_admin() ) { + + $languages = wpm_get_languages(); + $query = $_REQUEST; + + if ( wp_doing_ajax() ) { + if ( $referrer && ! is_front_ajax() ) { + $query = wp_parse_url( $referrer, PHP_URL_QUERY ); + } else { + return wpm_get_user_language(); + } + } + + if ( isset( $query['edit_lang'], $languages [ wpm_clean( $query['edit_lang'] ) ] ) ) { + $lang = wpm_clean( $query['edit_lang'] ); + } else { + $edit_lang = get_user_meta( get_current_user_id(), 'edit_lang', true ); + if ( $edit_lang && isset( $languages[ $edit_lang ] ) ) { + $lang = $edit_lang; + } else { + $lang = wpm_get_user_language(); + } + } + + } else { + $lang = wpm_get_user_language(); + } + + return $lang; +} diff --git a/wp-content/plugins/wp-multilang/includes/wpm-template-functions.php b/wp-content/plugins/wp-multilang/includes/wpm-template-functions.php new file mode 100644 index 00000000..30d540e1 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/wpm-template-functions.php @@ -0,0 +1,463 @@ +flags_path() ); +} + + +/** + * Get flags dir url + * + * @return string + */ +function wpm_get_flags_dir() { + return apply_filters( 'wpm_flags_dir', wpm()->flags_dir() ); +} + + +/** + * Get flag url + * + * @param string $filename + * + * @return string + */ +function wpm_get_flag_url( $filename = '' ) { + return wpm_get_flags_dir() . $filename; +} + + +/** + * Display language switcher in templates + * + * @param string $type + * @param string $show + * + * @return string + * @internal param array $args + * + */ +function wpm_get_language_switcher( $type = 'list', $show = 'both' ) { + + $languages = wpm_get_languages(); + + if ( count( $languages ) <= 1 ) { + return ''; + } + + $vars = array( + 'languages' => wpm_get_languages(), + 'lang' => wpm_get_language(), + 'type' => $type, + 'show' => $show, + ); + + switch ( $type ) { + + case 'dropdown': + $template = wpm_get_template( 'language-switcher', $type, '', $vars ); + break; + + case 'select': + $template = wpm_get_template( 'language-switcher', $type, '', $vars ); + break; + + default: + $template = wpm_get_template( 'language-switcher', $type, '', $vars ); + } + + return $template; +} + + +/** + * Display language switcher + * + * @param string $type + * @param string $show + * + * @internal param array $args + */ +function wpm_language_switcher( $type = 'list', $show = 'both' ) { + echo wpm_get_language_switcher( $type, $show ); +} + + +/** + * Translate page titles + */ +add_filter( 'document_title_parts', 'wpm_translate_value', 5 ); + + +/** + * Add meta params to 'head' + */ +function wpm_set_alternate_links() { + $languages = array(); + + if ( is_single() ) { + $languages = get_post_meta( get_the_ID(), '_languages', true ); + } + + if ( is_category() || is_tag() || is_tax() ) { + $languages = get_term_meta( get_queried_object_id(), '_languages', true ); + } + + $hreflangs = array(); + + foreach ( wpm_get_languages() as $code => $language ) { + + if ( $languages && ! isset( $languages[ $code ] ) ) { + continue; + } + + if ( wpm_get_default_language() === $code ) { + $hreflangs['x-default'] = sprintf( "\n", esc_url( wpm_translate_current_url( $code ) ) ); + } + + $hreflangs[ $code ] = sprintf( "\n", esc_attr( wpm_sanitize_lang_slug( $language['locale'] ) ), esc_url( wpm_translate_current_url( $code ) ) ); + } + + $hreflangs = apply_filters( 'wpm_alternate_links', $hreflangs, wpm_get_current_url() ); + + echo implode( '', $hreflangs ); +} + +add_action( 'wp_head', 'wpm_set_alternate_links' ); + + +/** + * Fix for generation image. + * use get_post + * + * @param $html + * @param $attr + * @param $content + * + * @return string + */ +function wpm_media_image( $html, $attr, $content ) { + + $atts = shortcode_atts( array( + 'id' => '', + 'align' => 'alignnone', + 'width' => '', + 'caption' => '', + 'class' => '', + ), $attr, 'caption' ); + + $atts['caption'] = wpm_translate_string( $atts['caption'] ); + $atts['width'] = (int) $atts['width']; + if ( $atts['width'] < 1 || empty( $atts['caption'] ) ) { + return $content; + } + + if ( ! empty( $atts['id'] ) ) { + $atts['id'] = 'id="' . esc_attr( sanitize_html_class( $atts['id'] ) ) . '" '; + } + + $class = trim( 'wp-caption ' . $atts['align'] . ' ' . $atts['class'] ); + + $html5 = current_theme_supports( 'html5', 'caption' ); + // HTML5 captions never added the extra 10px to the image width + $width = $html5 ? $atts['width'] : ( 10 + $atts['width'] ); + + /** + * Filters the width of an image's caption. + * + * By default, the caption is 10 pixels greater than the width of the image, + * to prevent post content from running up against a floated image. + * + * @since 3.7.0 + * + * @see img_caption_shortcode() + * + * @param int $width Width of the caption in pixels. To remove this inline style, + * return zero. + * @param array $atts Attributes of the caption shortcode. + * @param string $content The image element, possibly wrapped in a hyperlink. + */ + $caption_width = apply_filters( 'img_caption_shortcode_width', $width, $atts, $content ); + + $style = ''; + if ( $caption_width ) { + $style = 'style="width: ' . (int) $caption_width . 'px" '; + } + + if ( $html5 ) { + $html .= '
    ' . do_shortcode( $content ) . '
    ' . $atts['caption'] . '
    '; + } else { + $html .= '
    ' . do_shortcode( $content ) . '

    ' . $atts['caption'] . '

    '; + } + + return $html; +} + +add_filter( 'img_caption_shortcode', 'wpm_media_image', 10, 3 ); + + +/** + * Redeclare gallery code for translate caption text + * + * @param string $html + * @param array $attr + * @param $instance + * + * @return string + */ +function wpm_media_gallery( $html, $attr, $instance ) { + $post = get_post(); + $html5 = current_theme_supports( 'html5', 'gallery' ); + $atts = shortcode_atts( array( + 'order' => 'ASC', + 'orderby' => 'menu_order ID', + 'id' => $post ? $post->ID : 0, + 'itemtag' => $html5 ? 'figure' : 'dl', + 'icontag' => $html5 ? 'div' : 'dt', + 'captiontag' => $html5 ? 'figcaption' : 'dd', + 'columns' => 3, + 'size' => 'thumbnail', + 'include' => '', + 'exclude' => '', + 'link' => '' + ), $attr, 'gallery' ); + + $id = (int)$atts['id']; + + if ( ! empty( $atts['include'] ) ) { + $_attachments = get_posts( array( 'include' => $atts['include'], 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby'] ) ); + + $attachments = array(); + foreach ( $_attachments as $key => $val ) { + $attachments[$val->ID] = wpm_translate_post( $_attachments[$key] ); + } + } elseif ( ! empty( $atts['exclude'] ) ) { + $attachments = get_children( array( 'post_parent' => $id, 'exclude' => $atts['exclude'], 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby'] ) ); + } else { + $attachments = get_children( array( 'post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby'] ) ); + } + + if ( empty( $attachments ) ) { + return ''; + } + + if ( is_feed() ) { + $output = "\n"; + foreach ( $attachments as $att_id => $attachment ) { + $output .= wp_get_attachment_link( $att_id, $atts['size'], true ) . "\n"; + } + return $output; + } + + $itemtag = tag_escape( $atts['itemtag'] ); + $captiontag = tag_escape( $atts['captiontag'] ); + $icontag = tag_escape( $atts['icontag'] ); + $valid_tags = wp_kses_allowed_html( 'post' ); + if ( ! isset( $valid_tags[ $itemtag ] ) ) { + $itemtag = 'dl'; + } + if ( ! isset( $valid_tags[ $captiontag ] ) ) { + $captiontag = 'dd'; + } + if ( ! isset( $valid_tags[ $icontag ] ) ) { + $icontag = 'dt'; + } + + $columns = (int)$atts['columns']; + $itemwidth = $columns > 0 ? floor(100/$columns) : 100; + $float = is_rtl() ? 'right' : 'left'; + + $selector = "gallery-{$instance}"; + + $gallery_style = ''; + + /** + * Filters whether to print default gallery styles. + * + * @since 3.1.0 + * + * @param bool $print Whether to print default gallery styles. + * Defaults to false if the theme supports HTML5 galleries. + * Otherwise, defaults to true. + */ + if ( apply_filters( 'use_default_gallery_style', ! $html5 ) ) { + $gallery_style = " + \n\t\t"; + } + + $size_class = sanitize_html_class( $atts['size'] ); + $gallery_div = "\n"; + + return $output; +} + +add_filter( 'post_gallery', 'wpm_media_gallery', 10, 3 ); + + +/** + * Add lang class to body + * + * @param array $classes + * + * @return array + */ +function wpm_add_body_class( $classes ) { + $classes[] = 'language-' . wpm_get_language(); + + return $classes; +} + +add_filter( 'body_class', 'wpm_add_body_class' ); + + +/** + * Display language switcher in admin + */ +function wpm_admin_language_switcher() { + + $args = array( + 'languages' => wpm_get_languages(), + 'lang' => wpm_get_language(), + ); + + echo wpm_get_template( 'admin-language-switcher', '', '', $args ); +} + + +/** + * Display language switcher in customizer + */ +function wpm_admin_language_switcher_customizer() { + + $args = array( + 'languages' => wpm_get_languages(), + 'lang' => wpm_get_language(), + ); + + echo wpm_get_template( 'admin-language-switcher', 'customizer', '', $args ); +} + + +/** + * Get flag list + * + * @since 2.0.0 + * + * @return array + */ +function wpm_get_flags() { + $flags = array(); + $flags_path = wpm_get_flags_path(); + if ( $dir_handle = @opendir( $flags_path ) ) { + while ( false !== ( $file = readdir( $dir_handle ) ) ) { + if ( preg_match( "/\.(jpeg|jpg|gif|png|svg)$/i", $file ) ) { + $flags[] = $file; + } + } + sort( $flags ); + } + + return $flags; +} + + +/** + * Show notice for strings that cant`t be translated for displaying in admin. + * + * @param bool $echo + * + * @return string + */ +function wpm_show_notice( $echo = true ) { + $notise = '

    ' . sprintf( esc_attr__( 'For multilingual string, use syntax like %s.', 'wp-multilang' ), '[:en]Text on english[:de]Text auf Deutsch[:]' ) . '

    '; + if ( $echo ) { + echo $notise; + } else { + return $notise; + } +} diff --git a/wp-content/plugins/wp-multilang/includes/wpm-translation-functions.php b/wp-content/plugins/wp-multilang/includes/wpm-translation-functions.php new file mode 100644 index 00000000..6c49ecfc --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/wpm-translation-functions.php @@ -0,0 +1,535 @@ + $item ) { + $result[ $k ] = wpm_translate_value( $item, $language ); + } + + return $result; + } + + return wpm_translate_string( $value, $language ); +} + +/** + * Transform multilingual string to multilingual array + * + * @param $string + * + * @return array|mixed|string + */ +function wpm_string_to_ml_array( $string ) { + + /** + * Karim: + * Allow multilanguage json + * + * original => if ( ! is_string( $string ) || $string === '' || is_serialized_string( $string ) || isJSON( $old_value ) ) + */ + if ( ! is_string( $string ) || $string === '' || is_serialized_string( $string ) ) { + return $string; + } + + $string = htmlspecialchars_decode( $string ); + $blocks = preg_split( '#\[:([a-z-]*)\]#im', $string, - 1, PREG_SPLIT_DELIM_CAPTURE ); + + if ( empty( $blocks ) ) { + return $string; + } + + $languages = wpm_get_lang_option(); + $result = array_fill_keys( array_keys( $languages ), '' ); + $language = count( $blocks ) === 1 ? wpm_get_default_language() : ''; + + foreach ( $blocks as $idx => $block ) { + // Every odd block contains the language of '[:language]'. + if ( $idx % 2 === 1 ) { + $language = $block; + } elseif ( isset( $result[ $language ] ) ) { + $result[ $language ] .= $block; + } + } + + return array_map( 'trim', $result ); +} + +/** + * Transform multidimensional array with multilingual strings to multidimensional array with multilingual arrays + * + * @param $value + * + * @return array|mixed|string + */ +function wpm_value_to_ml_array( $value ) { + if ( is_array( $value ) ) { + return array_map( 'wpm_value_to_ml_array', $value ); + } + + return wpm_string_to_ml_array( $value ); +} + +/** + * Transform multilingual array to multilingual string + * + * @param $strings + * + * @return string + */ +function wpm_ml_array_to_string( $strings ) { + + $string = ''; + + if ( ! wpm_is_ml_array( $strings ) ) { + return $string; + } + + $languages = wpm_get_lang_option(); + foreach ( $strings as $key => $value ) { + if ( ( '' !== $value ) && isset( $languages[ $key ] ) ) { + if ( wpm_is_ml_string( $value ) ) { + $string = wpm_translate_string( $string ); + } + $string .= '[:' . $key . ']' . trim( $value ); + } + } + + if ( $string ) { + $string .= '[:]'; + } + + return $string; +} + +/** + * Transform multidimensional array with multilingual arrays to multidimensional array with multilingual strings + * + * @param $value + * + * @return array|string + */ +function wpm_ml_value_to_string( $value ) { + + if ( is_array( $value ) && ! empty( $value ) ) { + + if ( wpm_is_ml_array( $value ) ) { + return wpm_ml_array_to_string( $value ); + } + + return array_map( 'wpm_ml_value_to_string', $value ); + } + + return $value; +} + +/** + * Set new value to multidimensional array with multilingual arrays by config + * + * @param $localize_array + * @param mixed $value + * @param array $config + * @param string $lang + * + * @return array|bool + */ +function wpm_set_language_value( $localize_array, $value, $config = array(), $lang = '' ) { + $languages = wpm_get_languages(); + $new_value = array(); + + if ( ! $lang || ! isset( $languages[ $lang ] ) ) { + $lang = wpm_get_language(); + } + + if ( is_array( $value ) && null !== $config ) { + foreach ( $value as $key => $item ) { + if ( isset( $config['wpm_each'] ) ) { + $config_key = $config['wpm_each']; + } else { + $config_key = ( isset( $config[ $key ] ) ? $config[ $key ] : null ); + } + + if ( ! isset( $localize_array[ $key ] ) ) { + $localize_array[ $key ] = array(); + } + + $new_value[ $key ] = wpm_set_language_value( $localize_array[ $key ], $value[ $key ], $config_key, $lang ); + } + } else { + if ( null !== $config && ! is_bool( $value ) ) { + + if ( wpm_is_ml_string( $value ) ) { + $value = wpm_translate_string( $value ); + } + + if ( wpm_is_ml_array( $localize_array ) ) { + $new_value = $localize_array; + $new_value[ $lang ] = $value; + } else { + if ( isJSON( $value ) || is_serialized_string( $value ) ) { + $new_value = $value; + } else { + $result = array_fill_keys( array_keys( $languages ), '' ); + $result[ $lang ] = $value; + $new_value = $result; + } + } + } else { + $new_value = $value; + } + }// End if(). + + return $new_value; +} + + +/** + * Translate WP object + * + * @param $object + * @param string $lang + * + * @return mixed + */ +function wpm_translate_object( $object, $lang = '' ) { + + foreach ( get_object_vars( $object ) as $key => $content ) { + switch ( $key ) { + case 'attr_title': + case 'post_title': + case 'name': + case 'title': + $object->$key = wpm_translate_string( $content, $lang ); + break; + case 'post_excerpt': + case 'description': + case 'post_content': + if ( is_serialized_string( $content ) ) { + $object->$key = serialize( wpm_translate_value( unserialize( $content ), $lang ) ); + break; + } + + if ( isJSON( $content ) ) { + $object->$key = wp_json_encode( wpm_translate_value( json_decode( $content, true ), $lang ) ); + break; + } + + if ( wpm_is_ml_string( $content ) ) { + $object->$key = wpm_translate_string( $content, $lang ); + break; + } + } + } + + return $object; +} + + +/** + * Translate post + * + * @param $post + * + * @param string $lang + * + * @return object WP_Post + */ +function wpm_translate_post( $post, $lang = '' ) { + + if ( ! is_object( $post ) || null === wpm_get_post_config( $post->post_type ) ) { + return $post; + } + + return wpm_translate_object( $post, $lang ); +} + + +/** + * Translate term + * + * @param $term + * + * @param $taxonomy + * + * @param string $lang + * + * @return object WP_Term + */ +function wpm_translate_term( $term, $taxonomy, $lang = '' ) { + + if ( null === wpm_get_taxonomy_config( $taxonomy ) ) { + return $term; + } + + if ( is_object( $term ) ) { + return wpm_translate_object( $term, $lang ); + } + + if ( is_array( $term ) ) { + return wpm_translate_value( $term, $lang ); + } + + return $term; +} + + +/** + * Untranslate WP_Post object + * + * @param $post + * + * @return mixed + */ +function wpm_untranslate_post( $post ) { + if ( $post instanceof WP_Post ) { + global $wpdb; + $orig_post = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->posts} WHERE ID = %d;", $post->ID ) ); + foreach ( get_object_vars( $post ) as $key => $content ) { + switch ( $key ) { + case 'post_title': + case 'post_content': + case 'post_excerpt': + $post->$key = $orig_post->$key; + break; + } + } + } + + return $post; +} + +/** + * Check if array is multilingual + * + * @param $array + * + * @return bool + */ +function wpm_is_ml_array( $array ) { + + if ( ! is_array( $array ) || wp_is_numeric_array( $array ) ) { + return false; + } + + $languages = wpm_get_lang_option(); + + foreach ( $array as $key => $item ) { + if ( ! isset( $languages[ $key ] ) ) { + return false; + } + } + + return true; +} + +/** + * Check if string is multilingual + * + * @param $string + * + * @return bool + */ +function wpm_is_ml_string( $string ) { + if ( ! is_string( $string ) || is_serialized_string( $string ) || isJSON( $string ) ) { + return false; + } + + return preg_match( '#\[:[a-z-]+\]#im', $string ); +} + +/** + * Check if value with multilingual strings + * + * @param $value + * + * @return bool + */ +function wpm_is_ml_value( $value ) { + + if ( is_array( $value ) && ! empty( $value ) ) { + foreach ( $value as $item ) { + if ( wpm_is_ml_value( $item ) ) { + return true; + } + } + + return false; + } + + return wpm_is_ml_string( $value ); +} + +/** + * Set new data to value + * + * @param $old_value + * @param $new_value + * @param array $config + * @param string $lang + * + * @return array|bool|string + */ +function wpm_set_new_value( $old_value, $new_value, $config = array(), $lang = '' ) { + + if ( is_bool( $new_value ) ) { + return $new_value; + } + + /** + * Karim: + * Allow multilanguage json + * + * original => if ( is_serialized_string( $old_value ) || isJSON( $old_value ) ) + */ + if ( is_serialized_string( $old_value ) ) { + return $old_value; + } + + $old_value = wpm_value_to_ml_array( $old_value ); + + if ( wpm_is_ml_array( $old_value ) ) { + foreach ($old_value as $key => $lang_value) { + if ( strpos($lang_value, '{"') || strpos($lang_value, ':{"') || strpos($lang_value, '""') || strpos($lang_value, '":"') ) { + $old_value[ $key ] = wp_slash( $lang_value ); + } + } + } + + $value = wpm_set_language_value( $old_value, $new_value, $config, $lang ); + $value = wpm_ml_value_to_string( $value ); + + return $value; +} diff --git a/wp-content/plugins/wp-multilang/includes/wpm-update-functions.php b/wp-content/plugins/wp-multilang/includes/wpm-update-functions.php new file mode 100644 index 00000000..462591c8 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/wpm-update-functions.php @@ -0,0 +1,169 @@ + $language ) { + $language['date'] = $language['date'] ? $language['date'] : ''; + $language['time'] = $language['time'] ? $language['time'] : ''; + $updated_languages[ $locale ] = $language; + } + + update_option( 'wpm_languages', $updated_languages ); + WPM_Setup::set_option( 'languages', $updated_languages ); +} + +/** + * Update DB Version. + */ +function wpm_update_178_db_version() { + WPM_Install::update_db_version( '1.7.8' ); +} + +/** + * Update language flag + */ +function wpm_update_180_flags() { + $updated_languages = array(); + + foreach ( wpm_get_languages() as $locale => $language ) { + $language['flag'] = $language['flag'] . '.png'; + $updated_languages[ $locale ] = $language; + } + + update_option( 'wpm_languages', $updated_languages ); + WPM_Setup::set_option( 'languages', $updated_languages ); +} + +/** + * Update DB Version. + */ +function wpm_update_180_db_version() { + WPM_Install::update_db_version( '1.8.0' ); +} + +/** + * Update language flag + */ +function wpm_update_200_options() { + + $updated_languages = array(); + + foreach ( get_option( 'wpm_languages', array() ) as $locale => $language ) { + if ( isset( $language['slug'] ) ) { + $code = $language['slug']; + $updated_languages[ $code ] = array( + 'enable' => $language['enable'], + 'locale' => $locale, + 'name' => $language['name'], + 'translation' => $locale, + 'date' => $language['date'], + 'time' => $language['time'], + 'flag' => $language['flag'], + ); + } + } + + if ( $updated_languages ) { + update_option( 'wpm_languages', $updated_languages ); + WPM_Setup::set_option( 'languages', $updated_languages ); + } +} + +/** + * Update DB Version. + */ +function wpm_update_200_db_version() { + WPM_Install::update_db_version( '2.0.0' ); +} + +/** + * Delete configs from base. Move configs to cache. + */ +function wpm_update_210_delete_config() { + delete_option( 'wpm_config' ); +} + +/** + * Update DB Version. + */ +function wpm_update_210_db_version() { + WPM_Install::update_db_version( '2.1.0' ); +} + +/** + * Change options value. + */ +function wpm_update_211_change_options() { + $options = array( + 'wpm_show_untranslated_strings', + 'wpm_use_redirect', + 'wpm_use_prefix', + 'wpm_uninstall_translations', + ); + + foreach ( $options as $option ) { + $value = get_option( $option ); + update_option( $option, 1 == $value ? 'yes' : 'no' ); + } +} + +/** + * Update DB Version. + */ +function wpm_update_211_db_version() { + WPM_Install::update_db_version( '2.1.1' ); +} + +/** + * Change syntax for term and post title. + */ +function wpm_update_214_change_syntax() { + global $wpdb; + + //Replace '' and '{:xx}' by '[:xx]'. + $adjust_syntax = function( $value ) { + $value = preg_replace('##im', '[$1]', $value ); + $value = preg_replace('#{(:[a-z-]*)}#im', '[$1]', $value ); + return $value; + }; + + $results = $wpdb->get_results( "SELECT ID, post_title FROM {$wpdb->posts} WHERE post_title LIKE '%{:__}%' OR post_title LIKE '%%';" ); + + foreach ( $results as $result ) { + $post_title = $adjust_syntax( $result->post_title ); + $wpdb->update( $wpdb->posts, array( 'post_title' => $post_title ), array( 'ID' => $result->ID ) ); + } + + $results = $wpdb->get_results( "SELECT term_id, `name` FROM {$wpdb->terms} WHERE `name` LIKE '%{:__}%' OR `name` LIKE '%%';" ); + + foreach ( $results as $result ) { + $name = $adjust_syntax( $result->name ); + $wpdb->update( $wpdb->terms, array( 'name' => $name ), array( 'term_id' => $result->term_id ) ); + } +} + +/** + * Update DB Version. + */ +function wpm_update_214_db_version() { + WPM_Install::update_db_version( '2.1.4' ); +} diff --git a/wp-content/plugins/wp-multilang/includes/wpm-widget-functions.php b/wp-content/plugins/wp-multilang/includes/wpm-widget-functions.php new file mode 100644 index 00000000..b63c3352 --- /dev/null +++ b/wp-content/plugins/wp-multilang/includes/wpm-widget-functions.php @@ -0,0 +1,22 @@ +W#oRnsT|0fB$cb}u=f)5>TXBL=i%2t4OF4fAB|;cnK;J zpYQX`?CqW}#sWqje`lU~p5N>D_j{hbAARtS3m(@A?vHc-?K?d0%i!<)EdOym`!3IW zKlmJYA9xYG7rYLB1bhSB0saTL0o?L#&*RYx!Jh-40N)G#Hn<8r2Ufug;70Jz!8^cz z2Y(*?DX8`DdykWUH>maN3)~9o`(E%)@DTVR@MwWk;3?jJ6I=`a3#j=YL-{@6y&x*Q z9iY}90HyaZC_BbM&2NAo09)We@V7wC{~joPe+_;Vd;^>T-vaLfQ;bEW_cSPZ=RxWF z1}MK@06z?VAG{lU1GN5wviGN;{7d0yS?Q ztbl(8{uq1{l>8pT^!+VRdhS4o1htZUSY`-s1i9pyE0Ksvf@t9s&OVd;>^#0x*p7GgE>Q2+wUt}8mzUxy zF00NIi$mPX?SAeN?($MR<-2&K3s=3}-0$GNgIib4fvr7C*7gGRPsLJoRbCGi568;^ za8L2P1ysxw@ABHqgW-k__EN6IJ6)8ht(9G%ICPYI6Sw$9+1cw+{@>0mF6mNDD<8Uc za*LzN+xxjc!>wzKTRpG59xER}^%~XJ>S7EUT7FYz{p%5)#DUGl$N}NKBMq}QicJ<~ ztzezUTNWhk)Jz9SV8V7MPO_k3(r&#Tr0Hb0)tae#BdG~fYlo=*Aa00)qF{O~5w>dqo`>pVczEte=cE?%M z+nvPIX^>!HBTNX6x2KyVLDWaXc-A+z#^*GP+vZRho%Hr9zWd{(?PuQJVAAilgtD#x z(;84%j%A4-r7deiy3&}LZU&L*Mq!j@eybHmQ>N4EP7(jLX-t9!*PFIKW1=`S6Uw?DepiK1qo>_(8L`jA@vSU zT4P(`$-s?Xd3s)E=gT~!XgbXX44qIi0zcc@^$IaPmkGl~CWg2nY52Gq3*PW z%7@wuRc}ccG`z#HV{>3qB7^|%(M}LeC4Q%AoUz_m4C9W?bON(0sW<6I-Vr*8dC)ga zy2AD~Bk3C2M=}*;+t-Xwke-ukb{vS~Dg2!3(sQsdNFRK_-%-T3>Kz%5o#z@DAZFWw zGigW>mZ`4llk@IqGoJSJ9~}_##}Nq*qnaD)$kO2h%}0z=wR(f5vNtMZO5^|bzToOs6vnwWQ-y6M1!@bti=k^N=%hN7qG zWmA^>bgINm6y3VNf`&C2CK#S!Q`LKnnu)TR$Q%j%i8yU$e&jtCLh-?fK;VKSgQMQy z%TkdHjjH~OIv$=r@WIeS=wTU~@o<)G{VTsXqkg~^5MVgnGNlu)_D-+?(@dT%GbmQnK6Dvo8Q=tNK%Xx=zw^G^>CpELGEUC(|z;D;gzEI#v2_?j5`|)G@D_fW5sRky4q_Qun$7+x@vvnfOR*ki~Y@TZX)Lx!j}6tW)y;fyua(_?8g%@uSu@q@(&&k?hv~Ed ztEM}Zw(a&R{Z6y9H0LO3tp|IY?KR_!@5}vMFf$z|jZ~XY&5Vz48xOXPN3{*>H*On0 zEvPe6K18Q$o9pZKElBI*ewHOH=syNakHrFgYG&S@y9nc07vXj?)>Pb}yTp zp7C*-R;DEM=L~oj`0O`hM5QuHTvqz9?{vM@Wnb5X`>S6_Z#icJLfDS{TTa?oGkyvS zZY^q4jRKDvak6TK!+r0me6IIo{(3&2U(e_DX7WqD^S!6@S;N@t`Hg(B_ax)<%$n64 z(>vQc!|+`1SzZ_I>ECGCY`&m*`Q>~rzg{)@xAVpPTJQXNlYf_yrLRuXRj2EUB$U4m z@{9Rv`6X-6eE%0h{=8x8EMHKqhXvFxO0}%+oi|e0dj<=7XL{#)&+&4Gd6#=<`7o;` zeFvE#V`i;E2;keI^K!20<=?={t8Oh`%(;*Fb)Dy7mj``Y#9-MXBNROeC_~lzYCg-L zB59a%!v=U3B{s}b?^Y6mVeP&18j$E&962u&WCw!g6o-6ah0hDUbNTCrm=OKm*O0yF zCf#8C8jEdm-IJHUfZ%!StMZQAYci3Me8HNGI^v|*yk^~T@xVL8+Dw#&?EL?gby0eY zPVkB^2u8nic1PJS$>VI^W^0(GkJkjJvZ>!kC=;}6(|N+s%n`8)=(uj z*sqt$NV#A@FZh2Br-_W0|GvtBAd}Z3BS<4E_O@b-N+$oVl`S@xg)`@g-bFO84!#V# zb&b`iQbtfZ3x^>2+fTn?jlL|E`TT88!(M`@l_Xuo2?;D2tX6CJQkdk{F+j%{xM6Vp}@Z0?|B1heqQdfbY8ze)uf2kS(c;Zn_{zS6a(n9&uOf9uyiWA z$6|g}>#cm-q8t}(-s~^brRGXwfg-pXxUAX^O`9u55i@Ilz0#1sVHf$oPvUD?xNb(AV*6f#%sJ^sVu*2zg+l^9> z4F!W_+|$gy>}tvRsn)3Su|!+d|Lu?Ofm*q(zVdCQz_MUY1z>BA(AlPI zn^m8S7aeb3aHV8t!>-}FQjy<80=5Wx1wB(=U$Y5P`3&~*K1Xi;Mb9p9mNu$(NOKo0 z@~hg1=JOjS|9VM{|MSm$sUdrGkpCgawi{uPP8HDjo7f}z4F|i3jyevN_O=@WEL>jk zFA`C;f2eA=6Z_(t+*Nh6Yus*+7xS@L?F1c{-6mG9RUP!hh8DYv*kW0ENvXl6NK{sF zy^Z*?<(3<GXKAotf zv-twuNl}$BZF}l`vSV3$!9d$X*!Naw(KJCP#U|+zeMb@;7lwZER##fT+SDrRoZs39 zbhxtTLM*d;If4qSTykBps`JXB^+v~Q{XjS;AGC?%54(z(W@RBqJM3UjpJ%Gpzp4^J zKI;`sc-(tN+tgDk=Hht2?CgvO&zC`!4Ac9H?X&jyeAQP?yq4yB~T%?=$X% zy+U`=!i)H!B3(L8IQLaWBo(!4K4)&8SRCbtW)(@ktrmcX%XJTmBt18seT#E`*?(aY zlav#RmP8b%;bIi0Y!jce2T^;1ar?ZEJw&a1d1}Q!TNU-87*p3y)DZI4Q%lH z@E@q0GedjI;AG1jTPNkV+CNei&bS&Z7`sgN@-4Z))-u|KXlOk>#\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.8.4\n" +"X-Poedit-Basepath: ..\n" +"X-Poedit-WPHeader: wp-multilang.php\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" +"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" +"_nx_noop:3c,1,2;__ngettext_noop:1,2\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPathExcluded-0: *.js\n" +"X-Poedit-SearchPathExcluded-1: .idea\n" +"X-Poedit-SearchPathExcluded-2: assets\n" +"X-Poedit-SearchPathExcluded-3: vendor\n" + +#: includes/admin/class-wpm-admin-edit-menus.php:38 +#: includes/admin/class-wpm-admin-menus.php:160 +#: includes/admin/class-wpm-admin-menus.php:175 +#: includes/admin/class-wpm-admin-menus.php:178 +#: includes/admin/class-wpm-admin-meta-boxes.php:101 +#: includes/admin/class-wpm-admin-meta-boxes.php:106 +#: includes/admin/class-wpm-admin-posts.php:80 +#: includes/admin/class-wpm-admin-taxonomies.php:66 +#: includes/admin/settings/class-wpm-settings-languages.php:27 +#: includes/admin/settings/class-wpm-settings-languages.php:43 +#: includes/widgets/class-wpm-widget-language-switcher.php:31 +msgid "Languages" +msgstr "Езици" + +#: includes/admin/class-wpm-admin-edit-menus.php:116 +msgid "Show item only in:" +msgstr "Показвай елемента само в:" + +#: includes/admin/class-wpm-admin-menus.php:113 +msgid "WP Multilang Settings" +msgstr "WP Multilang настройки" + +#. Plugin Name of the plugin/theme +#: includes/admin/class-wpm-admin-menus.php:113 +#: includes/admin/class-wpm-admin.php:90 +msgid "WP Multilang" +msgstr "WP Multilang" + +#: includes/admin/class-wpm-admin-menus.php:186 +msgid "Add to menu" +msgstr "Добавяне към менюто" + +#: includes/admin/class-wpm-admin-menus.php:214 +msgid "Inline" +msgstr "" + +#: includes/admin/class-wpm-admin-menus.php:215 +msgid "Single" +msgstr "" + +#: includes/admin/class-wpm-admin-menus.php:216 +#: includes/widgets/class-wpm-widget-language-switcher.php:49 +msgid "Dropdown" +msgstr "Падащо" + +#: includes/admin/class-wpm-admin-menus.php:220 +msgid "Languages menu item type" +msgstr "" + +#: includes/admin/class-wpm-admin-menus.php:236 +#: includes/widgets/class-wpm-widget-language-switcher.php:38 +msgid "Both" +msgstr "И двете" + +#: includes/admin/class-wpm-admin-menus.php:237 +#: includes/admin/settings/views/html-languages.php:92 +#: includes/admin/settings/views/html-languages.php:94 +#: includes/admin/settings/views/html-languages.php:182 +#: includes/admin/settings/views/html-languages.php:184 +#: includes/widgets/class-wpm-widget-language-switcher.php:39 +msgid "Flag" +msgstr "Знаме" + +#: includes/admin/class-wpm-admin-menus.php:238 +#: includes/admin/settings/views/html-languages.php:38 +#: includes/admin/settings/views/html-languages.php:40 +#: includes/admin/settings/views/html-languages.php:132 +#: includes/admin/settings/views/html-languages.php:134 +#: includes/widgets/class-wpm-widget-language-switcher.php:40 +msgid "Name" +msgstr "Име" + +#: includes/admin/class-wpm-admin-menus.php:242 +#: includes/widgets/class-wpm-widget-language-switcher.php:42 +msgid "Show" +msgstr "Покажи" + +#: includes/admin/class-wpm-admin-notices.php:104 +#: includes/admin/class-wpm-admin-settings.php:66 +msgid "Action failed. Please refresh the page and retry." +msgstr "Действието е неуспешно. Моля, обновете страницата и опитайте отново." + +#: includes/admin/class-wpm-admin-notices.php:108 +#: includes/class-wp-multilang.php:61 includes/class-wp-multilang.php:68 +msgid "Cheatin’ huh?" +msgstr "" + +#: includes/admin/class-wpm-admin-posts.php:138 +msgid "Current edit language:" +msgstr "Текущ език на редактиране:" + +#: includes/admin/class-wpm-admin-qtranslate.php:31 +#, php-format +msgid "%s is active. Please deactivate it." +msgstr "%s е активен. Моля, деактивирайте го." + +#: includes/admin/class-wpm-admin-settings.php:74 +msgid "Your settings have been saved." +msgstr "Настройките ви са записани." + +#: includes/admin/class-wpm-admin-settings.php:126 +msgid "The changes you made will be lost if you navigate away from this page." +msgstr "" +"Промените, които сте направили, ще бъдат загубени, ако се придвижвате далеч " +"от тази страница." + +#: includes/admin/class-wpm-admin-taxonomies.php:114 +#: includes/admin/class-wpm-admin-taxonomies.php:140 +msgid "Show term only in:" +msgstr "Показвай израза само в:" + +#: includes/admin/class-wpm-admin-widgets.php:74 +msgid "Show widget only in:" +msgstr "Показвай widget само в:" + +#: includes/admin/class-wpm-admin.php:89 +#, php-format +msgid "" +"If you like %1$s please leave us a %2$s rating. A huge thanks in advance!" +msgstr "" +"Ако искате %1$s Моля, оценeте ни с оценка %2$s. Огромно Благодаря " +"предварително!" + +#: includes/admin/class-wpm-admin.php:91 +msgid "Thanks :)" +msgstr "Благодаря! :-)" + +#: includes/admin/class-wpm-admin.php:100 +msgid "Thank you for translating with WP Multilang." +msgstr "Благодаря ви за работата с WP Multilang.." + +#: includes/admin/meta-boxes/class-wpm-meta-box-comment-languages.php:37 +msgid "Show comment only in:" +msgstr "" + +#: includes/admin/meta-boxes/class-wpm-meta-box-post-languages.php:36 +msgid "Show post only in:" +msgstr "Покажи публикацията само в:" + +#: includes/admin/settings/class-wpm-settings-additional.php:26 +msgid "Additional" +msgstr "Допълнителни" + +#: includes/admin/settings/class-wpm-settings-additional.php:46 +msgid "Actions" +msgstr "Действия" + +#: includes/admin/settings/class-wpm-settings-additional.php:49 +#: includes/admin/settings/class-wpm-settings-additional.php:103 +msgid "Installed localizations" +msgstr "Инсталирани локализации" + +#: includes/admin/settings/class-wpm-settings-additional.php:55 +msgid "qTranslate import" +msgstr "qTranslate import" + +#: includes/admin/settings/class-wpm-settings-additional.php:77 +msgid "Are you sure you want to delete this localization?" +msgstr "Наистина ли искате да изтриете този език?" + +#: includes/admin/settings/class-wpm-settings-additional.php:121 +msgid "Delete localization" +msgstr "Изтриване на локализация" + +#: includes/admin/settings/class-wpm-settings-additional.php:123 +msgid "Delete unused not built-in language pack" +msgstr "Изтрий неизползвания невграден езиков пакет" + +#: includes/admin/settings/class-wpm-settings-additional.php:149 +msgid "Import" +msgstr "импортиране" + +#: includes/admin/settings/class-wpm-settings-additional.php:151 +msgid "Import names for terms from qTranslate." +msgstr "" + +#: includes/admin/settings/class-wpm-settings-general.php:27 +msgid "General" +msgstr "Общи" + +#: includes/admin/settings/class-wpm-settings-general.php:52 +msgid "General options" +msgstr "Общи настройки" + +#: includes/admin/settings/class-wpm-settings-general.php:54 +#, php-format +msgid "Read Google guidelines before." +msgstr "Read Google guidelines before." + +#: includes/admin/settings/class-wpm-settings-general.php:59 +#: includes/class-wpm-rest-settings.php:34 +msgid "Site Language" +msgstr "Език на сайта" + +#: includes/admin/settings/class-wpm-settings-general.php:60 +msgid "Set default site language." +msgstr "Задаване на език по подразбиране" + +#: includes/admin/settings/class-wpm-settings-general.php:70 +msgid "Show untranslated" +msgstr "Показване на непреведени" + +#: includes/admin/settings/class-wpm-settings-general.php:71 +msgid "Show untranslated strings on language by default." +msgstr "Показвай непреведените низове в езика по подразбиране" + +#: includes/admin/settings/class-wpm-settings-general.php:78 +msgid "Browser redirect" +msgstr "Пренасочване на браузъра" + +#: includes/admin/settings/class-wpm-settings-general.php:79 +msgid "Use redirect to user browser language in first time." +msgstr "" +"Използвайте пренасочване към езика на браузъра на потребителя първия път" + +#: includes/admin/settings/class-wpm-settings-general.php:86 +msgid "Use prefix" +msgstr "Използване на префикс" + +#: includes/admin/settings/class-wpm-settings-general.php:87 +msgid "Use prefix for language by default." +msgstr "Използвайте префикс за език по подразбиране." + +#: includes/admin/settings/class-wpm-settings-general.php:111 +msgid "Uninstalling" +msgstr "Деинсталиране" + +#: includes/admin/settings/class-wpm-settings-general.php:118 +msgid "Delete translations" +msgstr "Изтриване на преводи" + +#: includes/admin/settings/class-wpm-settings-general.php:119 +msgid "" +"Delete translations when uninstalling plugin (some translations may not be " +"deleted and you must delete them manually)." +msgstr "" +"Изтриване на преводите при деинсталиране на приставката (някои преводи може " +"да не се изтрият и да ги изтриете ръчно)." + +#: includes/admin/settings/class-wpm-settings-languages.php:46 +msgid "Installed languages" +msgstr "Езици" + +#: includes/admin/settings/class-wpm-settings-languages.php:70 +msgid "Are you sure you want to delete this language?" +msgstr "Наистина ли искате да изтриете този език?" + +#: includes/admin/settings/class-wpm-settings-languages.php:130 +msgid "New language pack successfully installed" +msgstr "Нов езиков пакет инсталиран" + +#: includes/admin/settings/views/html-languages.php:25 +msgid "Current" +msgstr "Текущ" + +#: includes/admin/settings/views/html-languages.php:27 +msgid "Default" +msgstr "По подразбиране" + +#: includes/admin/settings/views/html-languages.php:44 +#: includes/admin/settings/views/html-languages.php:47 +#: includes/admin/settings/views/html-languages.php:138 +#: includes/admin/settings/views/html-languages.php:141 +msgid "Enable" +msgstr "Активиране" + +#: includes/admin/settings/views/html-languages.php:54 +#: includes/admin/settings/views/html-languages.php:56 +#: includes/admin/settings/views/html-languages.php:145 +#: includes/admin/settings/views/html-languages.php:147 +msgid "Language Code (ISO 639-1)*" +msgstr "" + +#: includes/admin/settings/views/html-languages.php:60 +#: includes/admin/settings/views/html-languages.php:62 +#: includes/admin/settings/views/html-languages.php:151 +#: includes/admin/settings/views/html-languages.php:153 +msgid "Locale *" +msgstr "Locale *" + +#: includes/admin/settings/views/html-languages.php:66 +#: includes/admin/settings/views/html-languages.php:157 +msgid "Translation" +msgstr "Превод" + +#: includes/admin/settings/views/html-languages.php:80 +#: includes/admin/settings/views/html-languages.php:82 +#: includes/admin/settings/views/html-languages.php:170 +#: includes/admin/settings/views/html-languages.php:172 +msgid "Date Format" +msgstr "Формат на датата" + +#: includes/admin/settings/views/html-languages.php:86 +#: includes/admin/settings/views/html-languages.php:88 +#: includes/admin/settings/views/html-languages.php:176 +#: includes/admin/settings/views/html-languages.php:178 +msgid "Time Format" +msgstr "Времеви формат" + +#: includes/admin/settings/views/html-languages.php:95 +#: includes/admin/settings/views/html-languages.php:185 +msgid "— Select —" +msgstr "— Избери —" + +#: includes/admin/settings/views/html-languages.php:107 +#: includes/admin/settings/views/html-languages.php:196 +msgid "Delete" +msgstr "Изтрий" + +#: includes/admin/settings/views/html-languages.php:204 +msgid "Add language" +msgstr "Добавяне на език" + +#: includes/admin/views/html-notice-custom.php:12 +#: includes/admin/views/html-notice-updated.php:12 +msgid "Dismiss" +msgstr "Отхвърли" + +#: includes/admin/views/html-notice-update.php:12 +#: includes/admin/views/html-notice-updating.php:12 +msgid "WP Multilang data update" +msgstr "WP Multilang актуализиране на данните" + +#: includes/admin/views/html-notice-update.php:12 +msgid "We need to update your site database to the latest version." +msgstr "Трябва да актуализираме базата данни на сайта Ви до последната версия." + +#: includes/admin/views/html-notice-update.php:13 +msgid "Run the updater" +msgstr "Пуснете актуализатора" + +#: includes/admin/views/html-notice-update.php:17 +msgid "" +"It is strongly recommended that you backup your database before proceeding. " +"Are you sure you wish to run the updater now?" +msgstr "" +"Силно се препоръчва да архивирате базата данни, преди да продължите. " +"Наистина ли искате да стартирате актуализатора сега?" + +#: includes/admin/views/html-notice-updated.php:14 +msgid "" +"WP Multilang data update complete. Thank you for updating to the latest " +"version!" +msgstr "" +"WP Multilang актуализирането на данните е завършено. Благодарим Ви, че " +"актуализирате най-новата версия!" + +#: includes/admin/views/html-notice-updating.php:12 +msgid "Your database is being updated in the background." +msgstr "Вашата база данни се обновява във фонов режим." + +#: includes/admin/views/html-notice-updating.php:12 +msgid "Taking a while? Click here to run it now." +msgstr "Отне известно време? Кликнете тук, за да го стартирате сега." + +#: includes/class-wpm-ajax.php:145 +msgid "No locale sending" +msgstr "Няма изпращане на локал" + +#: includes/class-wpm-ajax.php:150 +msgid "Localization using" +msgstr "" + +#: includes/class-wpm-ajax.php:189 +msgid "Localization deleted" +msgstr "Изтриване на локализация" + +#: includes/class-wpm-ajax.php:284 +#, php-format +msgid "%d terms were imported successfully." +msgstr "%d термините бяха импортирани успешно." + +#: includes/class-wpm-install.php:327 +msgid "Translator" +msgstr "Преводач" + +#: includes/class-wpm-install.php:420 +msgid "View WP Multilang settings" +msgstr "Преглед на WP Multilang настройки" + +#: includes/class-wpm-install.php:420 +msgid "Settings" +msgstr "Настройки" + +#: includes/class-wpm-menus.php:78 includes/class-wpm-menus.php:132 +#: includes/class-wpm-menus.php:154 +#, php-format +msgid "#%d (no title)" +msgstr "#%d (no title)" + +#: includes/class-wpm-menus.php:93 +msgid "Post Type Archive" +msgstr "Публикувай тип Архив" + +#: includes/class-wpm-menus.php:116 +msgid "Custom Link" +msgstr "Потребителска връзка" + +#: includes/class-wpm-rest-settings.php:70 +msgid "Multilingual Settings" +msgstr "Многоезични настройки" + +#: includes/class-wpm-taxonomies.php:161 +msgid "A term with the name provided already exists in this taxonomy." +msgstr "В тази таксономия вече съществува термин с даденото име." + +#: includes/integrations/class-wpm-yoast-seo.php:224 +#: includes/integrations/class-wpm-yoast-seo.php:226 +msgid "Yoast SEO Opengraph Locale" +msgstr "Yoast SEO Opengraph Locale" + +#: includes/integrations/class-wpm-yoast-seo.php:226 +msgid "Opengraph Locale" +msgstr "Opengraph Locale" + +#: includes/integrations/class-wpm-yoast-seo.php:227 +msgid "Locale must be with country domain. Like en_US" +msgstr "Locale must be with country domain. Like en_US" + +#: includes/libraries/abstract-wp-background-process.php:422 +#, php-format +msgid "Every %d minutes" +msgstr "Всеки %d минути" + +#: includes/widgets/class-wpm-widget-language-switcher.php:25 +msgid "Display language switcher." +msgstr "Езиков превключвател" + +#: includes/widgets/class-wpm-widget-language-switcher.php:27 +#: templates/language-switcher-select.php:1 +msgid "Language Switcher" +msgstr "Езиков превключвател" + +#: includes/widgets/class-wpm-widget-language-switcher.php:32 +msgid "Title" +msgstr "Заглавие" + +#: includes/widgets/class-wpm-widget-language-switcher.php:48 +msgid "List" +msgstr "Списък" + +#: includes/widgets/class-wpm-widget-language-switcher.php:50 +msgid "Select" +msgstr "Избери" + +#: includes/widgets/class-wpm-widget-language-switcher.php:52 +msgid "Switcher Type" +msgstr "Превключвател на въвеждане" + +#: includes/wpm-template-functions.php:457 +#, php-format +msgid "For multilingual string, use syntax like %s." +msgstr "" + +#. Plugin URI of the plugin/theme +msgid "https://github.com/VaLeXaR/wp-multilang" +msgstr "" + +#. Description of the plugin/theme +msgid "Multilingual plugin for WordPress" +msgstr "" + +#. Author of the plugin/theme +msgid "Valentyn Riaboshtan" +msgstr "Valentyn Riaboshtan" + +#~ msgid "Set default translation" +#~ msgstr "Задаване на превод по подразбиране" + +#~ msgid "Set %s by default" +#~ msgstr "Задаване %s по подразбиране" + +#~ msgid "" +#~ "Set default translation for all posts, taxonomies, fields and options " +#~ "that available in config and not be translated before.
    WARNING:" +#~ " Changes are not reversible. Make a backup of the site database " +#~ "before starting." +#~ msgstr "" +#~ "Задаване на превод по подразбиране за всички публикации, класификации, " +#~ "полета и опции, които са налични в Config и не се превежда преди това. " +#~ "
    Предупреждение: промени са НЕОБРАТИМИ. Преди да " +#~ "започнете, направете резервно копие на базата данни на сайта." + +#~ msgid "Update finished" +#~ msgstr "Актуализацията завърши" + +#~ msgid "Language Code *" +#~ msgstr "Language Code *" + +#~ msgid "Localisation using" +#~ msgstr "използвана локализация" diff --git a/wp-content/plugins/wp-multilang/languages/wp-multilang.pot b/wp-content/plugins/wp-multilang/languages/wp-multilang.pot new file mode 100644 index 00000000..7c0066dd --- /dev/null +++ b/wp-content/plugins/wp-multilang/languages/wp-multilang.pot @@ -0,0 +1,480 @@ +#, fuzzy +msgid "" +msgstr "" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" +"Project-Id-Version: WP Multilang\n" +"POT-Creation-Date: 2018-03-09 15:43+0200\n" +"PO-Revision-Date: 2017-05-22 12:43+0300\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.4\n" +"X-Poedit-Basepath: ..\n" +"X-Poedit-WPHeader: wp-multilang.php\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" +"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;" +"_n_noop:1,2;_nx_noop:3c,1,2;__ngettext_noop:1,2\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPathExcluded-0: *.js\n" +"X-Poedit-SearchPathExcluded-1: .idea\n" +"X-Poedit-SearchPathExcluded-2: assets\n" +"X-Poedit-SearchPathExcluded-3: vendor\n" + +#: includes/admin/class-wpm-admin-edit-menus.php:38 +#: includes/admin/class-wpm-admin-menus.php:160 +#: includes/admin/class-wpm-admin-menus.php:175 +#: includes/admin/class-wpm-admin-menus.php:178 +#: includes/admin/class-wpm-admin-meta-boxes.php:101 +#: includes/admin/class-wpm-admin-meta-boxes.php:106 +#: includes/admin/class-wpm-admin-posts.php:80 +#: includes/admin/class-wpm-admin-taxonomies.php:66 +#: includes/admin/settings/class-wpm-settings-languages.php:27 +#: includes/admin/settings/class-wpm-settings-languages.php:43 +#: includes/widgets/class-wpm-widget-language-switcher.php:31 +msgid "Languages" +msgstr "" + +#: includes/admin/class-wpm-admin-edit-menus.php:116 +msgid "Show item only in:" +msgstr "" + +#: includes/admin/class-wpm-admin-menus.php:113 +msgid "WP Multilang Settings" +msgstr "" + +#. Plugin Name of the plugin/theme +#: includes/admin/class-wpm-admin-menus.php:113 +#: includes/admin/class-wpm-admin.php:90 +msgid "WP Multilang" +msgstr "" + +#: includes/admin/class-wpm-admin-menus.php:186 +msgid "Add to menu" +msgstr "" + +#: includes/admin/class-wpm-admin-menus.php:214 +msgid "Inline" +msgstr "" + +#: includes/admin/class-wpm-admin-menus.php:215 +msgid "Single" +msgstr "" + +#: includes/admin/class-wpm-admin-menus.php:216 +#: includes/widgets/class-wpm-widget-language-switcher.php:49 +msgid "Dropdown" +msgstr "" + +#: includes/admin/class-wpm-admin-menus.php:220 +msgid "Languages menu item type" +msgstr "" + +#: includes/admin/class-wpm-admin-menus.php:236 +#: includes/widgets/class-wpm-widget-language-switcher.php:38 +msgid "Both" +msgstr "" + +#: includes/admin/class-wpm-admin-menus.php:237 +#: includes/admin/settings/views/html-languages.php:92 +#: includes/admin/settings/views/html-languages.php:94 +#: includes/admin/settings/views/html-languages.php:182 +#: includes/admin/settings/views/html-languages.php:184 +#: includes/widgets/class-wpm-widget-language-switcher.php:39 +msgid "Flag" +msgstr "" + +#: includes/admin/class-wpm-admin-menus.php:238 +#: includes/admin/settings/views/html-languages.php:38 +#: includes/admin/settings/views/html-languages.php:40 +#: includes/admin/settings/views/html-languages.php:132 +#: includes/admin/settings/views/html-languages.php:134 +#: includes/widgets/class-wpm-widget-language-switcher.php:40 +msgid "Name" +msgstr "" + +#: includes/admin/class-wpm-admin-menus.php:242 +#: includes/widgets/class-wpm-widget-language-switcher.php:42 +msgid "Show" +msgstr "" + +#: includes/admin/class-wpm-admin-notices.php:104 +#: includes/admin/class-wpm-admin-settings.php:66 +msgid "Action failed. Please refresh the page and retry." +msgstr "" + +#: includes/admin/class-wpm-admin-notices.php:108 +#: includes/class-wp-multilang.php:61 includes/class-wp-multilang.php:68 +msgid "Cheatin’ huh?" +msgstr "" + +#: includes/admin/class-wpm-admin-posts.php:138 +msgid "Current edit language:" +msgstr "" + +#: includes/admin/class-wpm-admin-qtranslate.php:31 +#, php-format +msgid "%s is active. Please deactivate it." +msgstr "" + +#: includes/admin/class-wpm-admin-settings.php:74 +msgid "Your settings have been saved." +msgstr "" + +#: includes/admin/class-wpm-admin-settings.php:126 +msgid "" +"The changes you made will be lost if you navigate away from this page." +msgstr "" + +#: includes/admin/class-wpm-admin-taxonomies.php:114 +#: includes/admin/class-wpm-admin-taxonomies.php:140 +msgid "Show term only in:" +msgstr "" + +#: includes/admin/class-wpm-admin-widgets.php:74 +msgid "Show widget only in:" +msgstr "" + +#: includes/admin/class-wpm-admin.php:89 +#, php-format +msgid "" +"If you like %1$s please leave us a %2$s rating. A huge thanks in advance!" +msgstr "" + +#: includes/admin/class-wpm-admin.php:91 +msgid "Thanks :)" +msgstr "" + +#: includes/admin/class-wpm-admin.php:100 +msgid "Thank you for translating with WP Multilang." +msgstr "" + +#: includes/admin/meta-boxes/class-wpm-meta-box-comment-languages.php:37 +msgid "Show comment only in:" +msgstr "" + +#: includes/admin/meta-boxes/class-wpm-meta-box-post-languages.php:36 +msgid "Show post only in:" +msgstr "" + +#: includes/admin/settings/class-wpm-settings-additional.php:26 +msgid "Additional" +msgstr "" + +#: includes/admin/settings/class-wpm-settings-additional.php:46 +msgid "Actions" +msgstr "" + +#: includes/admin/settings/class-wpm-settings-additional.php:49 +#: includes/admin/settings/class-wpm-settings-additional.php:103 +msgid "Installed localizations" +msgstr "" + +#: includes/admin/settings/class-wpm-settings-additional.php:55 +msgid "qTranslate import" +msgstr "" + +#: includes/admin/settings/class-wpm-settings-additional.php:77 +msgid "Are you sure you want to delete this localization?" +msgstr "" + +#: includes/admin/settings/class-wpm-settings-additional.php:121 +msgid "Delete localization" +msgstr "" + +#: includes/admin/settings/class-wpm-settings-additional.php:123 +msgid "Delete unused not built-in language pack" +msgstr "" + +#: includes/admin/settings/class-wpm-settings-additional.php:149 +msgid "Import" +msgstr "" + +#: includes/admin/settings/class-wpm-settings-additional.php:151 +msgid "Import names for terms from qTranslate." +msgstr "" + +#: includes/admin/settings/class-wpm-settings-general.php:27 +msgid "General" +msgstr "" + +#: includes/admin/settings/class-wpm-settings-general.php:52 +msgid "General options" +msgstr "" + +#: includes/admin/settings/class-wpm-settings-general.php:54 +#, php-format +msgid "Read Google guidelines before." +msgstr "" + +#: includes/admin/settings/class-wpm-settings-general.php:59 +#: includes/class-wpm-rest-settings.php:34 +msgid "Site Language" +msgstr "" + +#: includes/admin/settings/class-wpm-settings-general.php:60 +msgid "Set default site language." +msgstr "" + +#: includes/admin/settings/class-wpm-settings-general.php:70 +msgid "Show untranslated" +msgstr "" + +#: includes/admin/settings/class-wpm-settings-general.php:71 +msgid "Show untranslated strings on language by default." +msgstr "" + +#: includes/admin/settings/class-wpm-settings-general.php:78 +msgid "Browser redirect" +msgstr "" + +#: includes/admin/settings/class-wpm-settings-general.php:79 +msgid "Use redirect to user browser language in first time." +msgstr "" + +#: includes/admin/settings/class-wpm-settings-general.php:86 +msgid "Use prefix" +msgstr "" + +#: includes/admin/settings/class-wpm-settings-general.php:87 +msgid "Use prefix for language by default." +msgstr "" + +#: includes/admin/settings/class-wpm-settings-general.php:111 +msgid "Uninstalling" +msgstr "" + +#: includes/admin/settings/class-wpm-settings-general.php:118 +msgid "Delete translations" +msgstr "" + +#: includes/admin/settings/class-wpm-settings-general.php:119 +msgid "" +"Delete translations when uninstalling plugin (some translations may not be " +"deleted and you must delete them manually)." +msgstr "" + +#: includes/admin/settings/class-wpm-settings-languages.php:46 +msgid "Installed languages" +msgstr "" + +#: includes/admin/settings/class-wpm-settings-languages.php:70 +msgid "Are you sure you want to delete this language?" +msgstr "" + +#: includes/admin/settings/class-wpm-settings-languages.php:130 +msgid "New language pack successfully installed" +msgstr "" + +#: includes/admin/settings/views/html-languages.php:25 +msgid "Current" +msgstr "" + +#: includes/admin/settings/views/html-languages.php:27 +msgid "Default" +msgstr "" + +#: includes/admin/settings/views/html-languages.php:44 +#: includes/admin/settings/views/html-languages.php:47 +#: includes/admin/settings/views/html-languages.php:138 +#: includes/admin/settings/views/html-languages.php:141 +msgid "Enable" +msgstr "" + +#: includes/admin/settings/views/html-languages.php:54 +#: includes/admin/settings/views/html-languages.php:56 +#: includes/admin/settings/views/html-languages.php:145 +#: includes/admin/settings/views/html-languages.php:147 +msgid "Language Code (ISO 639-1)*" +msgstr "" + +#: includes/admin/settings/views/html-languages.php:60 +#: includes/admin/settings/views/html-languages.php:62 +#: includes/admin/settings/views/html-languages.php:151 +#: includes/admin/settings/views/html-languages.php:153 +msgid "Locale *" +msgstr "" + +#: includes/admin/settings/views/html-languages.php:66 +#: includes/admin/settings/views/html-languages.php:157 +msgid "Translation" +msgstr "" + +#: includes/admin/settings/views/html-languages.php:80 +#: includes/admin/settings/views/html-languages.php:82 +#: includes/admin/settings/views/html-languages.php:170 +#: includes/admin/settings/views/html-languages.php:172 +msgid "Date Format" +msgstr "" + +#: includes/admin/settings/views/html-languages.php:86 +#: includes/admin/settings/views/html-languages.php:88 +#: includes/admin/settings/views/html-languages.php:176 +#: includes/admin/settings/views/html-languages.php:178 +msgid "Time Format" +msgstr "" + +#: includes/admin/settings/views/html-languages.php:95 +#: includes/admin/settings/views/html-languages.php:185 +msgid "— Select —" +msgstr "" + +#: includes/admin/settings/views/html-languages.php:107 +#: includes/admin/settings/views/html-languages.php:196 +msgid "Delete" +msgstr "" + +#: includes/admin/settings/views/html-languages.php:204 +msgid "Add language" +msgstr "" + +#: includes/admin/views/html-notice-custom.php:12 +#: includes/admin/views/html-notice-updated.php:12 +msgid "Dismiss" +msgstr "" + +#: includes/admin/views/html-notice-update.php:12 +#: includes/admin/views/html-notice-updating.php:12 +msgid "WP Multilang data update" +msgstr "" + +#: includes/admin/views/html-notice-update.php:12 +msgid "We need to update your site database to the latest version." +msgstr "" + +#: includes/admin/views/html-notice-update.php:13 +msgid "Run the updater" +msgstr "" + +#: includes/admin/views/html-notice-update.php:17 +msgid "" +"It is strongly recommended that you backup your database before " +"proceeding. Are you sure you wish to run the updater now?" +msgstr "" + +#: includes/admin/views/html-notice-updated.php:14 +msgid "" +"WP Multilang data update complete. Thank you for updating to the latest " +"version!" +msgstr "" + +#: includes/admin/views/html-notice-updating.php:12 +msgid "Your database is being updated in the background." +msgstr "" + +#: includes/admin/views/html-notice-updating.php:12 +msgid "Taking a while? Click here to run it now." +msgstr "" + +#: includes/class-wpm-ajax.php:145 +msgid "No locale sending" +msgstr "" + +#: includes/class-wpm-ajax.php:150 +msgid "Localization using" +msgstr "" + +#: includes/class-wpm-ajax.php:189 +msgid "Localization deleted" +msgstr "" + +#: includes/class-wpm-ajax.php:284 +#, php-format +msgid "%d terms were imported successfully." +msgstr "" + +#: includes/class-wpm-install.php:327 +msgid "Translator" +msgstr "" + +#: includes/class-wpm-install.php:420 +msgid "View WP Multilang settings" +msgstr "" + +#: includes/class-wpm-install.php:420 +msgid "Settings" +msgstr "" + +#: includes/class-wpm-menus.php:78 includes/class-wpm-menus.php:132 +#: includes/class-wpm-menus.php:154 +#, php-format +msgid "#%d (no title)" +msgstr "" + +#: includes/class-wpm-menus.php:93 +msgid "Post Type Archive" +msgstr "" + +#: includes/class-wpm-menus.php:116 +msgid "Custom Link" +msgstr "" + +#: includes/class-wpm-rest-settings.php:70 +msgid "Multilingual Settings" +msgstr "" + +#: includes/class-wpm-taxonomies.php:161 +msgid "A term with the name provided already exists in this taxonomy." +msgstr "" + +#: includes/integrations/class-wpm-yoast-seo.php:224 +#: includes/integrations/class-wpm-yoast-seo.php:226 +msgid "Yoast SEO Opengraph Locale" +msgstr "" + +#: includes/integrations/class-wpm-yoast-seo.php:226 +msgid "Opengraph Locale" +msgstr "" + +#: includes/integrations/class-wpm-yoast-seo.php:227 +msgid "Locale must be with country domain. Like en_US" +msgstr "" + +#: includes/libraries/abstract-wp-background-process.php:422 +#, php-format +msgid "Every %d minutes" +msgstr "" + +#: includes/widgets/class-wpm-widget-language-switcher.php:25 +msgid "Display language switcher." +msgstr "" + +#: includes/widgets/class-wpm-widget-language-switcher.php:27 +#: templates/language-switcher-select.php:1 +msgid "Language Switcher" +msgstr "" + +#: includes/widgets/class-wpm-widget-language-switcher.php:32 +msgid "Title" +msgstr "" + +#: includes/widgets/class-wpm-widget-language-switcher.php:48 +msgid "List" +msgstr "" + +#: includes/widgets/class-wpm-widget-language-switcher.php:50 +msgid "Select" +msgstr "" + +#: includes/widgets/class-wpm-widget-language-switcher.php:52 +msgid "Switcher Type" +msgstr "" + +#: includes/wpm-template-functions.php:457 +#, php-format +msgid "For multilingual string, use syntax like %s." +msgstr "" + +#. Plugin URI of the plugin/theme +msgid "https://github.com/VaLeXaR/wp-multilang" +msgstr "" + +#. Description of the plugin/theme +msgid "Multilingual plugin for WordPress" +msgstr "" + +#. Author of the plugin/theme +msgid "Valentyn Riaboshtan" +msgstr "" diff --git a/wp-content/plugins/wp-multilang/readme.txt b/wp-content/plugins/wp-multilang/readme.txt new file mode 100644 index 00000000..c8ae3791 --- /dev/null +++ b/wp-content/plugins/wp-multilang/readme.txt @@ -0,0 +1,271 @@ +=== WP Multilang === + +Contributors: valexar +Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=EKM42LUA5CVZ4&source=url +Tags: localization, multilanguage, multilingual, translation, multilang +Requires at least: 4.7 +Tested up to: 5.3 +Stable tag: 2.4.1 +Requires PHP: 5.6+ +License: GPLv3 +License URI: https://www.gnu.org/licenses/gpl-3.0.html + +Multilingual plugin for WordPress. + +== Description == + +WP Multilang is a multilingual plugin for WordPress. + +Translations of post types, taxonomies, meta fields, options, text fields in miltimedia files, menus, titles and text fields in widgets. + +== Features of the plugin WP Multilang == + +* 100% free. +* Translation at PHP. +* Compatible with REST. +* Support configuration for translate multidimensional arrays in options, meta fields, post content. +* Support multisite. +* Support WordPress in sub-folder. +* Separate menu items, posts, terms, widgets, comments per language. +* Many filters for dynamic applying translation settings. +* No duplicate posts, terms, menus, widgets. +* No sub-domain for each language version. +* No additional tables in database. +* Possibility set many languages with one localization. For example, for localization in the region. +* Possibility to set custom locale for html(If installed locale is en_US, you can set locale like: en, en-UK, en-AU etc. Without installation another localization) +* Possibility for add new languages for any user with capability `manage_options`. +* Exist the role "Translator" for editing posts, terms. It can not publish or delete. +* No limits by languages or by possibilities. + +== WP Multilang compatible with plugins == + +* ACF, ACF Pro +* WooCommerce +* WooCommerce Customizer +* Gutenberg +* Yoast Seo +* Contact Form 7 (added mail tag [_language] for send user language in mail) +* WPBakery Visual Composer +* Page Builder by SiteOrigin +* NextGEN Gallery +* All in One SEO Pack +* MailChimp for WordPress +* Newsletter +* Maps Builder +* Max Mega Menu +* MasterSlider +* WP-PageNavi +* BuddyPress +* Meta Slider +* TablePress +* Download Monitor (Redefine templates for links in your theme and translate link texts) +* Better Search +* Rank Math SEO (thanks for @pratikmts) + +Manage translation settings via json. + +Add in the root of your theme or plugin file `wpm-config.json`. + +Sample configurations can be viewed in config files in folder 'configs' in root the plugin. + +Configuration is updated after switching theme, enable or update any plugins. + +The plugin has filters for dynamic application configuration for translate. + +For turn off translation, set `null` into the desired configuration. +For example, you must turn off translation for a post type `post`. +There are two ways: + +1. In json. + Create in root of a theme or a plugin file `wpm-config.json` with: + `{ + "post_types": { + "post": null + } + }` + +2. Through the filter. + Add in functions.php + `add_filter( 'wpm_post_post_config', '__return_null' );` + +To enable translation pass an empty array in php `array()` or empty object in json `{}`. + +Supports translation multidimensional array of options, meta fields and post_content. +Supports the removal of established localizations. +Supports translation via GET parameter. Add in the GET parameter `lang` code desired language. +Supports clean database of translations when removing the plugin. Translations are only removed from the built-in tables. +Supports import term translations from qTranslate(by Soft79). +Supports automatically redirect to the user's browser language, if he visits for the first time. + +Ideal for developers. + +For display language switcher in any place add the code to your template `if ( function_exists ( 'wpm_language_switcher' ) ) wpm_language_switcher ();` +Function accepts two parameters: +$type - 'list', 'dropdown', 'select'. Default - 'list'. +$show - 'flag', 'name', 'both'. Default - 'both'. + +Or using the shortcode `wpm_lang_switcher`. It accept two not necessary parameters 'type' and 'show'. + +Available features for translation: +`wpm_translate_url( $url, $language = '' );` - translate url +`wpm_translate_string( $string, $language = '' );` - translate multilingual string +`wpm_translate_value( $value, $language = '' );` - translate multidimensional array with multilingual strings + +Update translation occurs at PHP. Therefore plugin has high adaptability, compatibility and easily integrates with other plugins. This is what distinguishes it among similar. + +Available translation html tags by JS for strings what do not have WP filters before output. + +Add your tags in config: +` +"admin_html_tags": { + "admin_screen_id": { + "attribute": [ + "selector" + ] + } +} +` + +Where: +`admin_screen_id` - admin screen id. +`attribute` - attribute what need to translate. Available 'text' - for translate text node, 'value' - for translate form values. Or other tag attribute, like 'title', 'alt'. +`selector` - css selector for search needed tag. Each selector is a new array item. + +If You need to add translation for multidimentional array for repeated elements You can use custom tag 'wpm_each' for set config to each element in array. +Example, add config for each item 'title' in custom post field array: +` +"post_fields": { + "custom_field": { + "wpm_each": { + "title": {} + } + } +} +` + +For set translation uses the syntax: +`[:en]Donec vitae orci sed dolor[:de]Cras risus ipsum faucibus ut[:]` + +Added shortcode for translate text in any place: +`[wpm_translate][:en]Donec vitae orci sed dolor[:de]Cras risus ipsum faucibus ut[:][wpm_translate]` + +If You translate text in established language, add lang parameter: +`[wpm_translate lang="de"][:en]Donec vitae orci sed dolor[:de]Cras risus ipsum faucibus ut[:][wpm_translate]` + +Support translating from syntax qTranslate, qTranslate-X, WPGlobus etc. + +Compatible with REST-API. +Support transfer the required translation through option `lang` in the GET request to REST. +Has the ability to keep recording the target language through the transmission parameter `lang` in the request. + +== Migration from qTranslate-X == + +1. Before installing/uninstalling, make database backup. +2. Deactivate qTranslate-X. +3. Install and activate WP Multilang. +4. Create in root of your theme file ‘wpm-config.json’. +5. Add all needed post types, taxonomies, options, fields to ‘wpm-config.json’. Setting from qTranslate-X not importing. +6. Import term names from qTranslate. +7. Check that everything is okay. +8. If everything is okay, remove qTranslate-X. If not, make screenshots of errors, restore database from backup and add support issue with your screenshots and description of errors. + +== Warning == + +Do not support different slug for each language(Yet). + +Not compatible with: +- WP Maintenance + +== Known issues == + +Function 'get_page_by_title' not working, because in title field are stored titles for all languages. Use function 'wpm_get_page_by_title( $title )' as solution. + +NOTE: Because plugins have different ways of storing data, WP Multilang is not compatible with every single plugin out-of-the-box (mostly page builders). This may result in texts not being translatable or translations not being saved. Most of these issues can be resolved using the integration options (wpm-config.json or filters) of WP Multilang. + +Please try WP Multilang in a test-environment before activating it on an existing production site and always make a backup before activating! + +== Installation == + +1. Upload the plugin files to the `/wp-content/plugins/wp-multilang` directory, or install the plugin through the WordPress plugins screen directly. +2. Activate the plugin through the 'Plugins' screen in WordPress. +3. Adjust languages on WP Multilang Settings page. + +== Upgrade Notice == + +Before installing or uninstalling make the site database backup before. + +== Frequently Asked Questions == + += I add new translation, but it rewrite another translation on different language. = + +If you have opened several browser tabs for editing this post in different languages, translation will be saved for the language that you opened last. + +== Screenshots == + +1. Settings page +2. Post list page +3. Taxonomy list page +4. Taxonomy edit page +5. Post edit page + +== Changelog == + += 2.4.1 = +- removed support old version of ACF lower 5.0 + += 2.4.0 = +- added support for Rank Math SEO (thanks for @pratikmts) +- optimized speed +- deleted support for old translate syntax +- other fixes and improvements + += 2.3.0 = +- fixed compatibility with WordPress 5.0 +- fixed compatibility with AIOSP + += 2.2.6 = +- added donate link to readme.txt +- fix display language name +- fix SiteOrigin Builder compatibility +- fix fatal error when a plugin is disabled +- fix translate REST requests in admin + += 2.2.5 = +- fixed Gutenberg compatibility +- fixed translation WC coupons + += 2.2.4 = +- added "no-cache" header in admin on language change +- added WC coupon for translating +- fixed compatibility with SiteOrigin +- fixed http to https redirect error +- fixed styles + += 2.2.3 = +- fix translate menu +- fix translating +- fix saving metabox +- fix set home url in subfolder + += 2.2.2 = +- added shortcode for display language switcher +- add filters for set json config files for integration +- fixed checking for ml strings +- fixed compatibility with Gutenberg +- fixed checking for JSON strings +- fixed regex for ml strings + += 2.2.1 = +- fixed escaping text. Have error on some sites. +- fixed ACF PRO menu integration. Have error on ACFv4. + += 2.2.0 = +- added alternate locale for opengraph in YOAST SEO +- added setting default translation +- fixed PHP notice in YOAST sitemap +- fixed compatibility with Gutenberg +- fixed compatibility with Buddypress +- fixed translate 'attr_escape' +- fixed adding custom fields to menu items + +All changelog available on [GitHub](https://github.com/VaLeXaR/wp-multilang/releases). diff --git a/wp-content/plugins/wp-multilang/templates/admin-language-switcher-customizer.php b/wp-content/plugins/wp-multilang/templates/admin-language-switcher-customizer.php new file mode 100644 index 00000000..b6b8a7e9 --- /dev/null +++ b/wp-content/plugins/wp-multilang/templates/admin-language-switcher-customizer.php @@ -0,0 +1,29 @@ + diff --git a/wp-content/plugins/wp-multilang/templates/admin-language-switcher.php b/wp-content/plugins/wp-multilang/templates/admin-language-switcher.php new file mode 100644 index 00000000..2598b055 --- /dev/null +++ b/wp-content/plugins/wp-multilang/templates/admin-language-switcher.php @@ -0,0 +1,12 @@ + diff --git a/wp-content/plugins/wp-multilang/templates/language-switcher-dropdown.php b/wp-content/plugins/wp-multilang/templates/language-switcher-dropdown.php new file mode 100644 index 00000000..ef1b20fe --- /dev/null +++ b/wp-content/plugins/wp-multilang/templates/language-switcher-dropdown.php @@ -0,0 +1,27 @@ + +
      +
    • + + + <?php esc_attr_e( $languages[ $lang ]['name'] ); ?> + + + + + +
        + $language ) { if ( wpm_get_language() == $code ) continue; ?> +
      • + + + <?php echo esc_attr( $language['name'] ); ?> + + + + + +
      • + +
      +
    • +
    diff --git a/wp-content/plugins/wp-multilang/templates/language-switcher-list.php b/wp-content/plugins/wp-multilang/templates/language-switcher-list.php new file mode 100644 index 00000000..f1581439 --- /dev/null +++ b/wp-content/plugins/wp-multilang/templates/language-switcher-list.php @@ -0,0 +1,23 @@ + + diff --git a/wp-content/plugins/wp-multilang/templates/language-switcher-select.php b/wp-content/plugins/wp-multilang/templates/language-switcher-select.php new file mode 100644 index 00000000..c2b37f04 --- /dev/null +++ b/wp-content/plugins/wp-multilang/templates/language-switcher-select.php @@ -0,0 +1,7 @@ + diff --git a/wp-content/plugins/wp-multilang/uninstall.php b/wp-content/plugins/wp-multilang/uninstall.php new file mode 100644 index 00000000..242f4641 --- /dev/null +++ b/wp-content/plugins/wp-multilang/uninstall.php @@ -0,0 +1,237 @@ +get_results( $wpdb->prepare( "SELECT ID, " . implode( ', ', $fields ) . " FROM {$wpdb->posts} WHERE post_type = '%s';", esc_sql( $post_type ) ) ); + + foreach ( $results as $result ) { + + $args = array(); + $new_result = wpm_translate_object( $result, $default_language ); + + foreach ( get_object_vars( $new_result ) as $key => $content ) { + if ( 'ID' == $key ) { + continue; + } + + $args[ $key ] = $content; + } + + $wpdb->update( $wpdb->posts, $args, array( 'ID' => $result->ID ) ); + } + } + + $taxonomies = get_taxonomies(); + + foreach ( $taxonomies as $taxonomy ) { + + if ( is_null( wpm_get_taxonomy_config( $taxonomy ) ) ) { + continue; + } + + $results = $wpdb->get_results( $wpdb->prepare( "SELECT t.term_id, `name`, description FROM {$wpdb->terms} t LEFT JOIN {$wpdb->term_taxonomy} tt ON t.term_id = tt.term_id WHERE tt.taxonomy = '%s';", esc_sql( $taxonomy ) ) ); + + foreach ( $results as $result ) { + + $result = wpm_translate_object( $result, $default_language ); + $description = $result->description; + $name = $result->name; + + $wpdb->update( $wpdb->term_taxonomy, compact( 'description' ), array( 'term_id' => $result->term_id ) ); + $wpdb->update( $wpdb->terms, compact( 'name' ), array( 'term_id' => $result->term_id ) ); + } + } + + $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_%';" ); + $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE '_site_transient_%';" ); + + foreach ( $config as $key => $item_config ) { + + switch ( $key ) { + + case 'post_fields': + $wpdb->delete( $wpdb->postmeta, array( 'meta_key' => '_languages' ) ); + + $results = $wpdb->get_results( "SELECT meta_id, meta_value FROM {$wpdb->postmeta} WHERE meta_value LIKE '%![:__!]%' ESCAPE '!' OR meta_value LIKE '%{:__}%' OR meta_value LIKE '%%';" ); + foreach ( $results as $result ) { + $meta_value = $result->meta_value; + + if ( is_serialized_string( $meta_value ) ) { + $meta_value = serialize( wpm_translate_value( unserialize( $meta_value ), $default_language ) ); + } + + if ( isJSON( $meta_value ) ) { + $meta_value = wp_json_encode( wpm_translate_value( json_decode( $meta_value, true ), $default_language ) ); + } + + if ( wpm_is_ml_string( $meta_value ) ) { + $meta_value = wpm_translate_string( $meta_value, $default_language ); + } + + $wpdb->update( $wpdb->postmeta, compact( 'meta_value' ), array( 'meta_id' => $result->meta_id ) ); + } + + break; + + case 'term_fields': + $wpdb->delete( $wpdb->termmeta, array( 'meta_key' => '_languages' ) ); + + $results = $wpdb->get_results( "SELECT meta_id, meta_value FROM {$wpdb->termmeta} WHERE meta_value LIKE '%![:__!]%' ESCAPE '!' OR meta_value LIKE '%{:__}%' OR meta_value LIKE '%%';" ); + + foreach ( $results as $result ) { + $meta_value = $result->meta_value; + + if ( is_serialized_string( $meta_value ) ) { + $meta_value = serialize( wpm_translate_value( unserialize( $meta_value ), $default_language ) ); + } + + if ( isJSON( $meta_value ) ) { + $meta_value = wp_json_encode( wpm_translate_value( json_decode( $meta_value, true ), $default_language ) ); + } + + if ( wpm_is_ml_string( $meta_value ) ) { + $meta_value = wpm_translate_string( $meta_value, $default_language ); + } + + $wpdb->update( $wpdb->termmeta, compact( 'meta_value' ), array( 'meta_id' => $result->meta_id ) ); + } + + break; + + case 'comment_fields': + $wpdb->delete( $wpdb->commentmeta, array( 'meta_key' => '_languages' ) ); + + $results = $wpdb->get_results( "SELECT meta_id, meta_value FROM {$wpdb->commentmeta} WHERE meta_value LIKE '%s' OR meta_value LIKE '%![:__!]%' ESCAPE '!' OR meta_value LIKE '%{:__}%' OR meta_value LIKE '%%';" ); + + foreach ( $results as $result ) { + $meta_value = $result->meta_value; + + if ( is_serialized_string( $meta_value ) ) { + $meta_value = serialize( wpm_translate_value( unserialize( $meta_value ), $default_language ) ); + } + + if ( isJSON( $meta_value ) ) { + $meta_value = wp_json_encode( wpm_translate_value( json_decode( $meta_value, true ), $default_language ) ); + } + + if ( wpm_is_ml_string( $meta_value ) ) { + $meta_value = wpm_translate_string( $meta_value, $default_language ); + } + + $wpdb->update( $wpdb->commentmeta, compact( 'meta_value' ), array( 'meta_id' => $result->meta_id ) ); + } + + break; + + case 'user_fields': + + $results = $wpdb->get_results( "SELECT umeta_id, meta_value FROM {$wpdb->usermeta} WHERE meta_value LIKE '%![:__!]%' ESCAPE '!' OR meta_value LIKE '%{:__}%' OR meta_value LIKE '%%';" ); + + foreach ( $results as $result ) { + $meta_value = $result->meta_value; + + if ( is_serialized_string( $meta_value ) ) { + $meta_value = serialize( wpm_translate_value( unserialize( $meta_value ), $default_language ) ); + } + + if ( isJSON( $meta_value ) ) { + $meta_value = wp_json_encode( wpm_translate_value( json_decode( $meta_value, true ), $default_language ) ); + } + + if ( wpm_is_ml_string( $meta_value ) ) { + $meta_value = wpm_translate_string( $meta_value, $default_language ); + } + + $wpdb->update( $wpdb->usermeta, compact( 'meta_value' ), array( 'umeta_id' => $result->umeta_id ) ); + } + + break; + + case 'options': + + $results = $wpdb->get_results( "SELECT option_id, option_value FROM {$wpdb->options} WHERE option_value LIKE '%![:__!]%' ESCAPE '!' OR option_value LIKE '%{:__}%' OR option_value LIKE '%%';" ); + + foreach ( $results as $result ) { + $option_value = $result->option_value; + + if ( is_serialized_string( $option_value ) ) { + $option_value = serialize( wpm_translate_value( unserialize( $option_value ), $default_language ) ); + } + + if ( isJSON( $option_value ) ) { + $option_value = wp_json_encode( wpm_translate_value( json_decode( $option_value, true ), $default_language ) ); + } + + if ( wpm_is_ml_string( $option_value ) ) { + $option_value = wpm_translate_string( $option_value, $default_language ); + } + + $wpdb->update( $wpdb->options, compact( 'option_value' ), array( 'option_id' => $result->option_id ) ); + } + + break; + + case 'site_options': + + $results = $wpdb->get_results( "SELECT meta_id, meta_value FROM {$wpdb->sitemeta} WHERE meta_value LIKE '%![:__!]%' ESCAPE '!' OR meta_value LIKE '%{:__}%' OR meta_value LIKE '%%';" ); + + foreach ( $results as $result ) { + $meta_value = $result->meta_value; + + if ( is_serialized_string( $meta_value ) ) { + $meta_value = serialize( wpm_translate_value( unserialize( $meta_value ), $default_language ) ); + } + + if ( isJSON( $meta_value ) ) { + $meta_value = wp_json_encode( wpm_translate_value( json_decode( $meta_value, true ), $default_language ) ); + } + + if ( wpm_is_ml_string( $meta_value ) ) { + $meta_value = wpm_translate_string( $meta_value, $default_language ); + } + + $wpdb->update( $wpdb->sitemeta, compact( 'meta_value' ), array( 'meta_id' => $result->meta_id ) ); + } + + break; + } // End switch(). + } // End foreach(). + + // Clear any cached data that has been removed + wp_cache_flush(); +} // End if(). + +$wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE 'wpm_%';" ); diff --git a/wp-content/plugins/wp-multilang/vendor/autoload.php b/wp-content/plugins/wp-multilang/vendor/autoload.php new file mode 100644 index 00000000..0e612475 --- /dev/null +++ b/wp-content/plugins/wp-multilang/vendor/autoload.php @@ -0,0 +1,7 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see http://www.php-fig.org/psr/psr-0/ + * @see http://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + // PSR-4 + private $prefixLengthsPsr4 = array(); + private $prefixDirsPsr4 = array(); + private $fallbackDirsPsr4 = array(); + + // PSR-0 + private $prefixesPsr0 = array(); + private $fallbackDirsPsr0 = array(); + + private $useIncludePath = false; + private $classMap = array(); + private $classMapAuthoritative = false; + private $missingClasses = array(); + private $apcuPrefix; + + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', $this->prefixesPsr0); + } + + return array(); + } + + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param array $classMap Class to filename map + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + (array) $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 base directories + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + } + + /** + * Unregisters this instance as an autoloader. + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return bool|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + includeFile($file); + + return true; + } + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath.'\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + */ +function includeFile($file) +{ + include $file; +} diff --git a/wp-content/plugins/wp-multilang/vendor/composer/ClassLoader52.php b/wp-content/plugins/wp-multilang/vendor/composer/ClassLoader52.php new file mode 100644 index 00000000..d721c7e7 --- /dev/null +++ b/wp-content/plugins/wp-multilang/vendor/composer/ClassLoader52.php @@ -0,0 +1,271 @@ + + * - Jordi Boggiano + */ + +class xrstf_Composer52_ClassLoader { + private $prefixes = array(); + private $fallbackDirs = array(); + private $useIncludePath = false; + private $classMap = array(); + private $classMapAuthoratative = false; + private $allowUnderscore = false; + + /** + * @param boolean $flag true to allow class names with a leading underscore, false to disable + */ + public function setAllowUnderscore($flag) { + $this->allowUnderscore = (boolean) $flag; + } + + /** + * @return array + */ + public function getPrefixes() { + return $this->prefixes; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoratative + */ + public function setClassMapAuthoritative($classMapAuthoratative) { + $this->classMapAuthoratative = $classMapAuthoratative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function getClassMapAuthoratative() { + return $this->classMapAuthoratative; + } + + /** + * @return array + */ + public function getFallbackDirs() { + return $this->fallbackDirs; + } + + /** + * @return array + */ + public function getClassMap() { + return $this->classMap; + } + + /** + * @param array $classMap class to filename map + */ + public function addClassMap(array $classMap) { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } + else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of classes, merging with any others previously set. + * + * @param string $prefix the classes prefix + * @param array|string $paths the location(s) of the classes + * @param bool $prepend prepend the location(s) + */ + public function add($prefix, $paths, $prepend = false) { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirs = array_merge( + (array) $paths, + $this->fallbackDirs + ); + } + else { + $this->fallbackDirs = array_merge( + $this->fallbackDirs, + (array) $paths + ); + } + + return; + } + + if (!isset($this->prefixes[$prefix])) { + $this->prefixes[$prefix] = (array) $paths; + return; + } + + if ($prepend) { + $this->prefixes[$prefix] = array_merge( + (array) $paths, + $this->prefixes[$prefix] + ); + } + else { + $this->prefixes[$prefix] = array_merge( + $this->prefixes[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of classes, replacing any others previously set. + * + * @param string $prefix the classes prefix + * @param array|string $paths the location(s) of the classes + */ + public function set($prefix, $paths) { + if (!$prefix) { + $this->fallbackDirs = (array) $paths; + return; + } + + $this->prefixes[$prefix] = (array) $paths; + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + */ + public function setUseIncludePath($useIncludePath) { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() { + return $this->useIncludePath; + } + + /** + * Registers this instance as an autoloader. + */ + public function register() { + spl_autoload_register(array($this, 'loadClass'), true); + } + + /** + * Unregisters this instance as an autoloader. + */ + public function unregister() { + spl_autoload_unregister(array($this, 'loadClass')); + } + + /** + * Loads the given class or interface. + * + * @param string $class the name of the class + * @return bool|null true, if loaded + */ + public function loadClass($class) { + if ($file = $this->findFile($class)) { + include $file; + return true; + } + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class the name of the class + * @return string|null the path, if found + */ + public function findFile($class) { + if ('\\' === $class[0]) { + $class = substr($class, 1); + } + + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + elseif ($this->classMapAuthoratative) { + return false; + } + + $classPath = $this->getClassPath($class); + + foreach ($this->prefixes as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($dir.DIRECTORY_SEPARATOR.$classPath)) { + return $dir.DIRECTORY_SEPARATOR.$classPath; + } + } + } + } + + foreach ($this->fallbackDirs as $dir) { + if (file_exists($dir.DIRECTORY_SEPARATOR.$classPath)) { + return $dir.DIRECTORY_SEPARATOR.$classPath; + } + } + + if ($this->useIncludePath && $file = self::resolveIncludePath($classPath)) { + return $file; + } + + return $this->classMap[$class] = false; + } + + private function getClassPath($class) { + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $classPath = str_replace('\\', DIRECTORY_SEPARATOR, substr($class, 0, $pos)).DIRECTORY_SEPARATOR; + $className = substr($class, $pos + 1); + } + else { + // PEAR-like class name + $classPath = null; + $className = $class; + } + + $className = str_replace('_', DIRECTORY_SEPARATOR, $className); + + // restore the prefix + if ($this->allowUnderscore && DIRECTORY_SEPARATOR === $className[0]) { + $className[0] = '_'; + } + + $classPath .= $className.'.php'; + + return $classPath; + } + + public static function resolveIncludePath($classPath) { + $paths = explode(PATH_SEPARATOR, get_include_path()); + + foreach ($paths as $path) { + $path = rtrim($path, '/\\'); + + if ($file = file_exists($path.DIRECTORY_SEPARATOR.$file)) { + return $file; + } + } + + return false; + } +} diff --git a/wp-content/plugins/wp-multilang/vendor/composer/LICENSE b/wp-content/plugins/wp-multilang/vendor/composer/LICENSE new file mode 100644 index 00000000..f27399a0 --- /dev/null +++ b/wp-content/plugins/wp-multilang/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/wp-content/plugins/wp-multilang/vendor/composer/autoload_classmap.php b/wp-content/plugins/wp-multilang/vendor/composer/autoload_classmap.php new file mode 100644 index 00000000..72d798fc --- /dev/null +++ b/wp-content/plugins/wp-multilang/vendor/composer/autoload_classmap.php @@ -0,0 +1,66 @@ + $baseDir . '/includes/abstracts/abstract-wpm-object.php', + 'WPM\\Includes\\Abstracts\\WPM_Widget' => $baseDir . '/includes/abstracts/abstract-wpm-widget.php', + 'WPM\\Includes\\Admin\\Meta_Boxes\\WPM_Meta_Box_Comment_Languages' => $baseDir . '/includes/admin/meta-boxes/class-wpm-meta-box-comment-languages.php', + 'WPM\\Includes\\Admin\\Meta_Boxes\\WPM_Meta_Box_Post_Languages' => $baseDir . '/includes/admin/meta-boxes/class-wpm-meta-box-post-languages.php', + 'WPM\\Includes\\Admin\\Settings\\WPM_Settings_Additional' => $baseDir . '/includes/admin/settings/class-wpm-settings-additional.php', + 'WPM\\Includes\\Admin\\Settings\\WPM_Settings_General' => $baseDir . '/includes/admin/settings/class-wpm-settings-general.php', + 'WPM\\Includes\\Admin\\Settings\\WPM_Settings_Languages' => $baseDir . '/includes/admin/settings/class-wpm-settings-languages.php', + 'WPM\\Includes\\Admin\\Settings\\WPM_Settings_Page' => $baseDir . '/includes/admin/settings/class-wpm-settings-page.php', + 'WPM\\Includes\\Admin\\WPM_Admin' => $baseDir . '/includes/admin/class-wpm-admin.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Assets' => $baseDir . '/includes/admin/class-wpm-admin-assets.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Customizer' => $baseDir . '/includes/admin/class-wpm-admin-customizer.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Edit_Menus' => $baseDir . '/includes/admin/class-wpm-admin-edit-menus.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Menus' => $baseDir . '/includes/admin/class-wpm-admin-menus.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Meta_Boxes' => $baseDir . '/includes/admin/class-wpm-admin-meta-boxes.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Notices' => $baseDir . '/includes/admin/class-wpm-admin-notices.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Posts' => $baseDir . '/includes/admin/class-wpm-admin-posts.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Qtranslate' => $baseDir . '/includes/admin/class-wpm-admin-qtranslate.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Settings' => $baseDir . '/includes/admin/class-wpm-admin-settings.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Taxonomies' => $baseDir . '/includes/admin/class-wpm-admin-taxonomies.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Widgets' => $baseDir . '/includes/admin/class-wpm-admin-widgets.php', + 'WPM\\Includes\\Integrations\\WPM_AIOSP' => $baseDir . '/includes/integrations/class-wpm-aiosp.php', + 'WPM\\Includes\\Integrations\\WPM_Acf' => $baseDir . '/includes/integrations/class-wpm-acf.php', + 'WPM\\Includes\\Integrations\\WPM_Better_Search' => $baseDir . '/includes/integrations/class-wpm-better-search.php', + 'WPM\\Includes\\Integrations\\WPM_BuddyPress' => $baseDir . '/includes/integrations/class-wpm-buddypress.php', + 'WPM\\Includes\\Integrations\\WPM_CF7' => $baseDir . '/includes/integrations/class-wpm-cf7.php', + 'WPM\\Includes\\Integrations\\WPM_MailChimp_For_WP' => $baseDir . '/includes/integrations/class-wpm-mailchimp-for-wp.php', + 'WPM\\Includes\\Integrations\\WPM_Masterslider' => $baseDir . '/includes/integrations/class-wpm-masterslider.php', + 'WPM\\Includes\\Integrations\\WPM_Megamenu' => $baseDir . '/includes/integrations/class-wpm-megamenu.php', + 'WPM\\Includes\\Integrations\\WPM_NGG' => $baseDir . '/includes/integrations/class-wpm-ngg.php', + 'WPM\\Includes\\Integrations\\WPM_Newsletter' => $baseDir . '/includes/integrations/class-wpm-newsletter.php', + 'WPM\\Includes\\Integrations\\WPM_PBSO' => $baseDir . '/includes/integrations/class-wpm-pbso.php', + 'WPM\\Includes\\Integrations\\WPM_Rank_Math' => $baseDir . '/includes/integrations/class-wpm-rank-math.php', + 'WPM\\Includes\\Integrations\\WPM_Tablepress' => $baseDir . '/includes/integrations/class-wpm-tablepress.php', + 'WPM\\Includes\\Integrations\\WPM_VC' => $baseDir . '/includes/integrations/class-wpm-vc.php', + 'WPM\\Includes\\Integrations\\WPM_WooCommerce' => $baseDir . '/includes/integrations/class-wpm-woocommerce.php', + 'WPM\\Includes\\Integrations\\WPM_Yoast_Seo' => $baseDir . '/includes/integrations/class-wpm-yoast-seo.php', + 'WPM\\Includes\\Libraries\\WPM_Walker_Nav_Menu_Edit' => $baseDir . '/includes/libraries/class-wpm-walker-nav-menu-edit.php', + 'WPM\\Includes\\Libraries\\WP_Async_Request' => $baseDir . '/includes/libraries/abstract-wp-async-request.php', + 'WPM\\Includes\\Libraries\\WP_Background_Process' => $baseDir . '/includes/libraries/abstract-wp-background-process.php', + 'WPM\\Includes\\WPM_AJAX' => $baseDir . '/includes/class-wpm-ajax.php', + 'WPM\\Includes\\WPM_Background_Updater' => $baseDir . '/includes/class-wpm-background-updater.php', + 'WPM\\Includes\\WPM_Comments' => $baseDir . '/includes/class-wpm-comments.php', + 'WPM\\Includes\\WPM_Config' => $baseDir . '/includes/class-wpm-config.php', + 'WPM\\Includes\\WPM_Frontend_Scripts' => $baseDir . '/includes/class-wpm-frontend-scripts.php', + 'WPM\\Includes\\WPM_Install' => $baseDir . '/includes/class-wpm-install.php', + 'WPM\\Includes\\WPM_Menus' => $baseDir . '/includes/class-wpm-menus.php', + 'WPM\\Includes\\WPM_Options' => $baseDir . '/includes/class-wpm-options.php', + 'WPM\\Includes\\WPM_Posts' => $baseDir . '/includes/class-wpm-posts.php', + 'WPM\\Includes\\WPM_REST_Settings' => $baseDir . '/includes/class-wpm-rest-settings.php', + 'WPM\\Includes\\WPM_Setup' => $baseDir . '/includes/class-wpm-setup.php', + 'WPM\\Includes\\WPM_Shortcodes' => $baseDir . '/includes/class-wpm-shortcodes.php', + 'WPM\\Includes\\WPM_Site_Options' => $baseDir . '/includes/class-wpm-site-options.php', + 'WPM\\Includes\\WPM_Taxonomies' => $baseDir . '/includes/class-wpm-taxonomies.php', + 'WPM\\Includes\\WPM_Users' => $baseDir . '/includes/class-wpm-users.php', + 'WPM\\Includes\\WPM_Widgets' => $baseDir . '/includes/class-wpm-widgets.php', + 'WPM\\Includes\\WP_Multilang' => $baseDir . '/includes/class-wp-multilang.php', + 'WPM\\Includes\\Widgets\\WPM_Widget_Language_Switcher' => $baseDir . '/includes/widgets/class-wpm-widget-language-switcher.php', +); diff --git a/wp-content/plugins/wp-multilang/vendor/composer/autoload_namespaces.php b/wp-content/plugins/wp-multilang/vendor/composer/autoload_namespaces.php new file mode 100644 index 00000000..420e8467 --- /dev/null +++ b/wp-content/plugins/wp-multilang/vendor/composer/autoload_namespaces.php @@ -0,0 +1,10 @@ + array($vendorDir . '/xrstf/composer-php52/lib'), +); diff --git a/wp-content/plugins/wp-multilang/vendor/composer/autoload_psr4.php b/wp-content/plugins/wp-multilang/vendor/composer/autoload_psr4.php new file mode 100644 index 00000000..b265c64a --- /dev/null +++ b/wp-content/plugins/wp-multilang/vendor/composer/autoload_psr4.php @@ -0,0 +1,9 @@ += 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); + if ($useStaticLoader) { + require_once __DIR__ . '/autoload_static.php'; + + call_user_func(\Composer\Autoload\ComposerStaticInit10f68284d303303872430af9e5a79198::getInitializer($loader)); + } else { + $map = require __DIR__ . '/autoload_namespaces.php'; + foreach ($map as $namespace => $path) { + $loader->set($namespace, $path); + } + + $map = require __DIR__ . '/autoload_psr4.php'; + foreach ($map as $namespace => $path) { + $loader->setPsr4($namespace, $path); + } + + $classMap = require __DIR__ . '/autoload_classmap.php'; + if ($classMap) { + $loader->addClassMap($classMap); + } + } + + $loader->register(true); + + return $loader; + } +} diff --git a/wp-content/plugins/wp-multilang/vendor/composer/autoload_real_52.php b/wp-content/plugins/wp-multilang/vendor/composer/autoload_real_52.php new file mode 100644 index 00000000..7dff524a --- /dev/null +++ b/wp-content/plugins/wp-multilang/vendor/composer/autoload_real_52.php @@ -0,0 +1,44 @@ + $path) { + $loader->add($namespace, $path); + } + + $classMap = require $dir.'/autoload_classmap.php'; + if ($classMap) { + $loader->addClassMap($classMap); + } + + $loader->register(true); + + return $loader; + } +} diff --git a/wp-content/plugins/wp-multilang/vendor/composer/autoload_static.php b/wp-content/plugins/wp-multilang/vendor/composer/autoload_static.php new file mode 100644 index 00000000..fc94dac7 --- /dev/null +++ b/wp-content/plugins/wp-multilang/vendor/composer/autoload_static.php @@ -0,0 +1,87 @@ + + array ( + 'xrstf\\Composer52' => + array ( + 0 => __DIR__ . '/..' . '/xrstf/composer-php52/lib', + ), + ), + ); + + public static $classMap = array ( + 'WPM\\Includes\\Abstracts\\WPM_Object' => __DIR__ . '/../..' . '/includes/abstracts/abstract-wpm-object.php', + 'WPM\\Includes\\Abstracts\\WPM_Widget' => __DIR__ . '/../..' . '/includes/abstracts/abstract-wpm-widget.php', + 'WPM\\Includes\\Admin\\Meta_Boxes\\WPM_Meta_Box_Comment_Languages' => __DIR__ . '/../..' . '/includes/admin/meta-boxes/class-wpm-meta-box-comment-languages.php', + 'WPM\\Includes\\Admin\\Meta_Boxes\\WPM_Meta_Box_Post_Languages' => __DIR__ . '/../..' . '/includes/admin/meta-boxes/class-wpm-meta-box-post-languages.php', + 'WPM\\Includes\\Admin\\Settings\\WPM_Settings_Additional' => __DIR__ . '/../..' . '/includes/admin/settings/class-wpm-settings-additional.php', + 'WPM\\Includes\\Admin\\Settings\\WPM_Settings_General' => __DIR__ . '/../..' . '/includes/admin/settings/class-wpm-settings-general.php', + 'WPM\\Includes\\Admin\\Settings\\WPM_Settings_Languages' => __DIR__ . '/../..' . '/includes/admin/settings/class-wpm-settings-languages.php', + 'WPM\\Includes\\Admin\\Settings\\WPM_Settings_Page' => __DIR__ . '/../..' . '/includes/admin/settings/class-wpm-settings-page.php', + 'WPM\\Includes\\Admin\\WPM_Admin' => __DIR__ . '/../..' . '/includes/admin/class-wpm-admin.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Assets' => __DIR__ . '/../..' . '/includes/admin/class-wpm-admin-assets.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Customizer' => __DIR__ . '/../..' . '/includes/admin/class-wpm-admin-customizer.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Edit_Menus' => __DIR__ . '/../..' . '/includes/admin/class-wpm-admin-edit-menus.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Menus' => __DIR__ . '/../..' . '/includes/admin/class-wpm-admin-menus.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Meta_Boxes' => __DIR__ . '/../..' . '/includes/admin/class-wpm-admin-meta-boxes.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Notices' => __DIR__ . '/../..' . '/includes/admin/class-wpm-admin-notices.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Posts' => __DIR__ . '/../..' . '/includes/admin/class-wpm-admin-posts.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Qtranslate' => __DIR__ . '/../..' . '/includes/admin/class-wpm-admin-qtranslate.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Settings' => __DIR__ . '/../..' . '/includes/admin/class-wpm-admin-settings.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Taxonomies' => __DIR__ . '/../..' . '/includes/admin/class-wpm-admin-taxonomies.php', + 'WPM\\Includes\\Admin\\WPM_Admin_Widgets' => __DIR__ . '/../..' . '/includes/admin/class-wpm-admin-widgets.php', + 'WPM\\Includes\\Integrations\\WPM_AIOSP' => __DIR__ . '/../..' . '/includes/integrations/class-wpm-aiosp.php', + 'WPM\\Includes\\Integrations\\WPM_Acf' => __DIR__ . '/../..' . '/includes/integrations/class-wpm-acf.php', + 'WPM\\Includes\\Integrations\\WPM_Better_Search' => __DIR__ . '/../..' . '/includes/integrations/class-wpm-better-search.php', + 'WPM\\Includes\\Integrations\\WPM_BuddyPress' => __DIR__ . '/../..' . '/includes/integrations/class-wpm-buddypress.php', + 'WPM\\Includes\\Integrations\\WPM_CF7' => __DIR__ . '/../..' . '/includes/integrations/class-wpm-cf7.php', + 'WPM\\Includes\\Integrations\\WPM_MailChimp_For_WP' => __DIR__ . '/../..' . '/includes/integrations/class-wpm-mailchimp-for-wp.php', + 'WPM\\Includes\\Integrations\\WPM_Masterslider' => __DIR__ . '/../..' . '/includes/integrations/class-wpm-masterslider.php', + 'WPM\\Includes\\Integrations\\WPM_Megamenu' => __DIR__ . '/../..' . '/includes/integrations/class-wpm-megamenu.php', + 'WPM\\Includes\\Integrations\\WPM_NGG' => __DIR__ . '/../..' . '/includes/integrations/class-wpm-ngg.php', + 'WPM\\Includes\\Integrations\\WPM_Newsletter' => __DIR__ . '/../..' . '/includes/integrations/class-wpm-newsletter.php', + 'WPM\\Includes\\Integrations\\WPM_PBSO' => __DIR__ . '/../..' . '/includes/integrations/class-wpm-pbso.php', + 'WPM\\Includes\\Integrations\\WPM_Rank_Math' => __DIR__ . '/../..' . '/includes/integrations/class-wpm-rank-math.php', + 'WPM\\Includes\\Integrations\\WPM_Tablepress' => __DIR__ . '/../..' . '/includes/integrations/class-wpm-tablepress.php', + 'WPM\\Includes\\Integrations\\WPM_VC' => __DIR__ . '/../..' . '/includes/integrations/class-wpm-vc.php', + 'WPM\\Includes\\Integrations\\WPM_WooCommerce' => __DIR__ . '/../..' . '/includes/integrations/class-wpm-woocommerce.php', + 'WPM\\Includes\\Integrations\\WPM_Yoast_Seo' => __DIR__ . '/../..' . '/includes/integrations/class-wpm-yoast-seo.php', + 'WPM\\Includes\\Libraries\\WPM_Walker_Nav_Menu_Edit' => __DIR__ . '/../..' . '/includes/libraries/class-wpm-walker-nav-menu-edit.php', + 'WPM\\Includes\\Libraries\\WP_Async_Request' => __DIR__ . '/../..' . '/includes/libraries/abstract-wp-async-request.php', + 'WPM\\Includes\\Libraries\\WP_Background_Process' => __DIR__ . '/../..' . '/includes/libraries/abstract-wp-background-process.php', + 'WPM\\Includes\\WPM_AJAX' => __DIR__ . '/../..' . '/includes/class-wpm-ajax.php', + 'WPM\\Includes\\WPM_Background_Updater' => __DIR__ . '/../..' . '/includes/class-wpm-background-updater.php', + 'WPM\\Includes\\WPM_Comments' => __DIR__ . '/../..' . '/includes/class-wpm-comments.php', + 'WPM\\Includes\\WPM_Config' => __DIR__ . '/../..' . '/includes/class-wpm-config.php', + 'WPM\\Includes\\WPM_Frontend_Scripts' => __DIR__ . '/../..' . '/includes/class-wpm-frontend-scripts.php', + 'WPM\\Includes\\WPM_Install' => __DIR__ . '/../..' . '/includes/class-wpm-install.php', + 'WPM\\Includes\\WPM_Menus' => __DIR__ . '/../..' . '/includes/class-wpm-menus.php', + 'WPM\\Includes\\WPM_Options' => __DIR__ . '/../..' . '/includes/class-wpm-options.php', + 'WPM\\Includes\\WPM_Posts' => __DIR__ . '/../..' . '/includes/class-wpm-posts.php', + 'WPM\\Includes\\WPM_REST_Settings' => __DIR__ . '/../..' . '/includes/class-wpm-rest-settings.php', + 'WPM\\Includes\\WPM_Setup' => __DIR__ . '/../..' . '/includes/class-wpm-setup.php', + 'WPM\\Includes\\WPM_Shortcodes' => __DIR__ . '/../..' . '/includes/class-wpm-shortcodes.php', + 'WPM\\Includes\\WPM_Site_Options' => __DIR__ . '/../..' . '/includes/class-wpm-site-options.php', + 'WPM\\Includes\\WPM_Taxonomies' => __DIR__ . '/../..' . '/includes/class-wpm-taxonomies.php', + 'WPM\\Includes\\WPM_Users' => __DIR__ . '/../..' . '/includes/class-wpm-users.php', + 'WPM\\Includes\\WPM_Widgets' => __DIR__ . '/../..' . '/includes/class-wpm-widgets.php', + 'WPM\\Includes\\WP_Multilang' => __DIR__ . '/../..' . '/includes/class-wp-multilang.php', + 'WPM\\Includes\\Widgets\\WPM_Widget_Language_Switcher' => __DIR__ . '/../..' . '/includes/widgets/class-wpm-widget-language-switcher.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixesPsr0 = ComposerStaticInit10f68284d303303872430af9e5a79198::$prefixesPsr0; + $loader->classMap = ComposerStaticInit10f68284d303303872430af9e5a79198::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/wp-content/plugins/wp-multilang/vendor/composer/installed.json b/wp-content/plugins/wp-multilang/vendor/composer/installed.json new file mode 100644 index 00000000..38208ed3 --- /dev/null +++ b/wp-content/plugins/wp-multilang/vendor/composer/installed.json @@ -0,0 +1,35 @@ +[ + { + "name": "xrstf/composer-php52", + "version": "v1.0.20", + "version_normalized": "1.0.20.0", + "source": { + "type": "git", + "url": "https://github.com/composer-php52/composer-php52.git", + "reference": "bd41459d5e27df8d33057842b32377c39e97a5a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer-php52/composer-php52/zipball/bd41459d5e27df8d33057842b32377c39e97a5a8", + "reference": "bd41459d5e27df8d33057842b32377c39e97a5a8", + "shasum": "" + }, + "time": "2016-04-16T21:52:24+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-default": "1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "xrstf\\Composer52": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ] + } +] diff --git a/wp-content/plugins/wp-multilang/wp-multilang.php b/wp-content/plugins/wp-multilang/wp-multilang.php new file mode 100644 index 00000000..439cde54 --- /dev/null +++ b/wp-content/plugins/wp-multilang/wp-multilang.php @@ -0,0 +1,37 @@ +