Profile of akifix

Permbledhja

akifix
Zërist
Send PM
Offline Offline
Posts:   108 (0.025 per day)
Vendndodhja:   zeri yt
Data e regjistrimit:   12-01-2011, 15:12:01
Last Active:   11-01-2014, 01:19:57
  • iphone shqip

Messages - akifix

1
Përshëndetje! Kam forumin me smf i cili është në të njëjtin vënd me faqen kryesore që është wordpres.
Kur postoj në forum, disa herë shfaqet Error 404 - Page Not Found po të shtypësh mbi temë dhe ridirektohet në faqen kryesore.

Këtë gjë e bën kryesisht kur ka një link tëjashtëm si prë shkarkim si prë fotografi qënuk janëngarkuar në server të faqes. KY problem ka filluar me sa mund të kuptoj mbasi kam bërë update në wordpress
Fjala është për faqen www.iphone-alb/forum ..
Ju lutem ka dikush ndonjë ide se si mund ta zgjidh këtë probem ??

2
Chronic Dev Team, qarkulloi sot Absinthe 2.0, veglën e shumpritur me të cilën mund të bëjmë Untethered Jailbreak  në pajisjet iOS që kanë të instaluara versionin iOS 5.1.1.

Lista me pajisjet që mbeshtet është si në vazhdim:

    iPhone 3Gs
    iPhone 4
    iPhone 4S
    iPad
    iPad 2 Wifi
    iPad 2 WiFi+3G
    New iPad Wifi
    New iPad 4G
    iPod 3rd gen
    iPod 4th gen

iPad 2 Wifi (Revision 2) më vonë me update të programit.



Nëse nuk kenë bëre update  iOS 5.1.1 bëjeni tani PËRVEÇ atyre që duhet të bëjnë Unlock. Gjithashtu ruajni SHSH blobs me anë të TinyUmbrella në mënyrë që të mund të bëni downgrade nëse është nevoja.

Përdoruesit që kanë pajisje me tethered jailbroken në iOS 5.1.1 nuk është nevoja të përdorin programin Absinthe. Thjeshtë shkarkojnë nga Cydia Rocky Racoon 5.1.1 Untether, bëjnë Reboot dhe jeni gati.

Kujdes: Nuk duhet të instaloni Rocky Racoon 5.1.1 Untether package mbas proçesit të jailbreak me Absinthe.
iPhone Shqip

3
Gjithashtu dhe footer ska nevoje te vendosesh gjith ato menu thjesht nje copyright apo dicka tjeter sepse faqja sa me thjesht aq me e bukur , ndrysho dhe sidebar se eshte pak keq , Shum pak user friendly
Këtë foterin e kam theksuar edhe më lartë që nuk mund ta editoj dhe nuk e kam vene unë kështu e kishte thema(free). provova ta heq fare, por nuk funksionoi mirë faqja.

4
 :D :D Tani të kuptova, komentet nuk i kam hequr për këtë arsye por nga që është edhe forumi dhe çdo temë është e lidhur me përkatësen në forum. Kështu është më e organizuar dhe më e lehtë për dikë që ka një problem për t'a parë komentin. Prandaj nuk e editoj linkun sepse nuk bëhen fare komente në blog.

5
Shum i ngarkuar per mendimin tim :S Shko tek writing dhe boje posting per faqe maximumi 10 :S ska lezet kaq shume
Ke të drejtë e bëra. Flm!

6
Sme pelqen foter dhe search ne sidebar, shiko te search qe te dali ne 1 rresht jo fusha e kerkimit siper dhe butoni Kerko posht pasi duken si hapesira boshe.
Ne pergjithsi me pelqen
Faleminderit për sugjerimin, për ate foterin dua ta ndryshoj por nuk po ja arrij se eshte e vështirë për editim, ndërsa searsh eshte default e wordpres nuk kam si ta ndryshoj(ose nuk di)

Edit: e hoqa fare :P

7
Më duket se u keqkuptuam :( Unë dhe nuk po kuptoj se për ku e ke fjalën. Më lart une thash se nëse një materjal ekziston në faqen time nuk është nevoja të vëndos një të tillë nga një faqe tjetër pa arsye. Më trego pak se për cilët link e ke fjalën. hmmmmm:

8
Faleminderit për përgjigjiet.

@poshnja, për sa i përket links-ve të faqes në komente, (nëse kuptova mirë) kur bëhet një pyetje dhe përgjigjia është postuar në faqe si thua ti të rreklamoj faqe tjetër :D

9
Përshëndetje. Kërkoj mëndimin dhe sugjerimet tuaja  për faqen time www.iphone-alb.com.
Mëndimi juaj për pamjen e re dhe mënyrën e ndërtuar të temave dhe në përgjithësi si faqe.
Çdo mëndim i mirpritur!

10
Faleminderit për përgjigjen dhe sigusisht që kam kërkuar para se të pyes këtu.
Për problemin e email-it kërkova dhe kam kërkuar por nuk kam parë një gjë të tillë, ndërsa për chat e kisha fjalën për ndonjë mod sepse në një forum tjetër që kam përdorur mundësohej kjo gjë.

11
jam duke përdorur forum smf 2.1 dhe kam disa pyetje.
Kam kërkuar dhe nuk kam parë ndonjë mënyrë për:
1: Si mund të zmadhoj tekstin në forum (jo zgjedhja e madhësisë së fomdit por në përgjithësi shkonja më të mëdha) siqe ka dhe zëri yt?
2: Si mund të dërgoj një email apo një postim me email antarëve?
3: Ka ndonjë mënyrë për të publikuar postimet e fundit në shatbox?
Bëhet fjalë për www.iphone-alb.com
Faleminderit!

12
Shumë fliten shpesh herë për Foxconn, kompania që ka fabrikat në të cilat prodhohën produktet e Apple.
Madje shumë herë këto fabrika është folur se janë të Apple.
Kjo është e gabuar pasi siq do të shkojmë dhe më poshtë, Foxconn prodhon produkte për të gjithë kolosotë e teknologjisë:

Më saktësisht, më pak se 20% të fabrikave në Kinë të Foxconn prodhon për Apple.
Megjithatë,  Apple akuzohet vazhdimisht për aksidentet dhe vatvrasjet në fabrikat e Foxconn.
Të gjithë kuptojnë arsyen që tema e Foxconn fajson Apple spese kështu bëhet më interesante.

Por është problemi i vërtetë?
Në faqen e Forbes u publikua një artikull interesant ku jep të dhëna në lidhje me cilësin e punësimit në  Foxconn dhe e krahason me atë të pjesës tjetër të Kinës:
Në vazhdim të dhënat:
- Përqindja e vetvrasjeve në Foxconn është 18/1000000. Ku në pjesën tjetër të Kinës është 220/1000000!!!
- Në Foxconn vdesin 7/1000000 punëtorë nga aksidente në punë. Kur në Amerikë është 35/1000000
-Fund, punëtorët në Foxconn marrin rreth 6000 dollarë ku rroga mesatare në Kinë është 4500 dollarë.
Si konkluzion, shikojmë që punëtorët në Foxconn janë më të gëzuar dhe më të kompletuar nga çdo punonjës tjetër në Kinë dhe më të sigurtë nga punëtorët në Amerikë!/iphone shqip

13
Guida & Tutoriale / Si të krjojmë një Siri Proxy Server!
« ne: 25-01-2012, 01:54:56 »
Pak ditë më parë @chpwn qarkulloi Spire, një Siri port për iPhone 4 dhe pajisje të tjera më të vjetra. Siq kemi theksuar edhe më parë Siri nuk mund të funksionojë në pajisje  të tjera përveç iphone 4s nëse nuk shikon një Siri Proxy Server.

Për të bërë Spire të funksionojë në  iPhone më të vjetër nga iPhone 4S duhet të krijojmë një Siri Proxy Server. Djemtë e iDownloadBlog krijuan një udhëzues në të cilin jemi bazuar.

Fillimisht duhet të shikojmë që me Siri Proxy kemi shumë më tepër mundësi nga ato që na jep Apple me servers të sajë.

Por të shikojmë se çfarë kanë bërë djemtë e iDB në videon më poshtë për të krijuar Siri Proxy Server të tyre.

Kushtet:

Para se të fillojmë me udhëzimet duhet të shikojmë disa kushte që duhet të kemi parasysh që të arrijmë me sukses proçesin më poshtë.

1) Para se të fillojmë duhet theksuar se nuk është nevoja të kemi njohuri për Ubuntu por të kemi pajisjen që mund të përdori ubuntu, diçka që mund të kemi në Mac pasi të instalojmë programin Parallels ose VMWare, sigurisht është edhe zgjidhja e Boot Camp të cilen nuk e sugjerojmë. Nëse keni pc me windows mund të vëndosni një disk të dyt-të, ndonjë stick ose të përdorni VMWare dhe të kaloni aty ubuntu. Por mënyra më e mirë është një virtual machine (Parallels, VMWare) që të mos “ngacmojmë” pajisjen tonë.

Për proçesin tonë na duhet Parallels në Mac të cilin mund t’a gjëjmë në versionin trial për 14 ditë.

2) Siri Proxy Server mund t’a përdorni vetëm kur jeni të lidhur në rrjet WiFi ose nëse  dini të krijoni ndonjë rrjet VPN në mënyrë që të futeni edhe kur nuk jeni aty ku ndodhet serveri.

3) Proçesi që vijon na tregon vetëm si të  të instalojmë dhe të fillojmë të përdorim Siri Proxy.

4) Të gjithë mund të provojnë të krijojnë një Siri Proxy Server në ndonjë virtual machine, nuk keni për të humbur asgjë. Fund, falenderojmë shumë Pete Lamonica aka Plamoni që krijoi Siri Proxy dhe solli Siri në një nivel tjetër si dhe disa informacione të rëndesishme në proçesin më poshtë.

 

Udhëzime për instalim të Siri Proxy:

Para se të fillojmë…

1) Nëse keni Ubuntu të instaluar, shumë mirë, nëse jo do t’ju ndihmojmë ne t’a instaloni. përndryshe secili mund të instalojë Ubuntu në mënyrën që deshiron ne do të përdorim mënyrën e thjeshtë me Parallels.

2) Duhet theksuar se mbas instalimit duhet të bëni të gjitha updates që ekzistojnë. Më tepër mund të shikoni në video në minutën e 1-rë

3) Nëse do të përdorni Parallels si zgjidhje apo ndonjë virtual machine tjetër duhet të modifikoni lidhjen e tij me bridged mode në mënyrë që të përdori atë që keni në sistemin e zakonshëm. Në minutën e 4-t në video mund të shikojmë se si mund t’a bëjmë këtë.

4) Duhet të keni një llogari në Dropbox. Pse Dropbox? Sepse është mënyra më e lehtë  të kalojmë diçka në iphone direkt. Dropbox do të na duhet për të kaluar në iPhone/iPad certificate-n që do të krijojmë, natyrisht mund të përdorim edhe mail-in nëse e kemi të rregjistruar në pajisje.

 

Disa komanda për konsolen:

Pasi në vazhdim ka shumë mundësi të shikojmë disa komanda që nuk i njohim, mirë është të bëjmë një copy paste në konsolë që të mos bëhet ndonjë gabim. Komandat mund t’i shikojmë edhe në video në minuten e 6-të.

 

komanda 1

sudo apt-get install dnsmasq ruby build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion

Kur të na kërkojë shtypim y për të vazhduar

 

komanda 2

sudo nano /etc/dnsmasq.conf

në linjen 62 gjëjmë: #address=/double-click.net/127.0.0.1

dhe nga poshtë shkruajmë address=/guzzoni.apple.com/(IP-në tonë)

Shtypim control+o dhe pastaj return për të ruajtur ndryshimet. Shtypim control+x  për terminal-in fillestarë

 

komanda 3

sudo /etc/init.d/dnsmasq restart

komanda 4

bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

 

komanda 5

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . “$HOME/.rvm/scripts/rvm”

komanda 6

echo ‘[[ -s "$HOME/.rvm/scripts/rvm" ]] && . “$HOME/.rvm/scripts/rvm” # Load RVM function’ >> ~/.bash_profile

 

komanda 7

rvm install 1.9.3

*kjo komandë zakonisht vono disa minuta. Duhet të kemi durim sidomos në pjesën e compile.

komanda 8

rvm use 1.9.3 –default

 

komanda 9

git clone git://github.com/plamoni/SiriProxy.git

 

komanda 10

cd SiriProxy

shtypim y për të vazhduar.

 

komanda 11

rake install

 

komanda 12

mkdir ~/.siriproxy

 

komanda 13

cp ./config.example.yml ~/.siriproxy/config.yml

 

komanda 14

siriproxy gencerts

 

komanda 15

siriproxy bundle

 

komanda 16

rvmsudo siriproxy server
Me këtë komandë fillojmë në Siri Proxy Server tonë dhe duhet të shikojmë “Starting SiriProxy on port 443..”

Nëse i kemi bërë të gjitha në rregull makineria jonë duhet të jetë gati të presë komanden tonë të parë nga Siri. Por të shikojmë në vazhdim veprimet që duhet të bëjmë në iPhone/iPad për të përdorur Siri Proxy.

 

Përgaditja e iPhone/iPad:

Asgjë nuk do të funksionojë pa marrë certificate-n nga ubuntu dhe t’a kalojmë në pajisjen tonë.

1) Në komanden 14 krijuam arkivin certificate, të cilin duhet të kalojmë dhe të instalojmë në iPhone/iPad. Siq theksuam më lartë për t’a bërë këtë përdorim Dropbox shikoni dhe në video në minutën 11:40.

Për të parë certificate-n duhet të shfaqim arkivat e fshehura në ubuntu dhe të shkojmë në ~/.siriproxy/ca.pem. Kur të kalojmë certificate në iPhone duhet të shtypim Install siq mund të shikojmë në video në 11:40.

 

2) Tani duhet të shkojmë në iPhone Settings > WiFi dhe të shtypim shigjeten bluhe që ndodhet pranë emrit të rrjetit. Kujtohuni se për të funksionuar Siri duhet të jetë në të njëjtin rrjet me të. Siq jemi në WiFi shkojmë në DNS dhe ndryshojmë ip-në dhe vëndosim atë të Siri Proxy Server, shikoni në video më lartë në 12:59.

3) Tani provojmë Siri-n! Mbajmë të shtypur Home button dhe thojmë “Test Siri Proxy”, direkt duhet të dëgjohet nga Siri “Siri Proxy is up and running!”  Ndërkohë që përdorim Siri duhet të shikojmë në ubuntu “paketat” e bisedës.
Për më tepër http://www.iphone-alb.com/forum/udhezime/si-te-krjojme-nje-siri-proxy-server!/msg510/?topicseen#msg510

14
GreenPois0n & redsn0w nxorën Untethered Jailbreak në iOS 5.0.1

Pak më parë qarkulloi versioni i ri për GreenPois0n i cili na mundëson të bëjmë Untethered Jailbreak në të gjitha pajisjet që kanë procesorë Apple A4 apo më të vjetër.

Bëhe fjalë për  të njëjtat programe që mund të kalojmë edhe me anë të Cydia nëse kemi bërë tethered jailbreak ose me një  bundle të ri në redsn0w për ata që bëjnë tani jailbreak.

Përveç Chronic Dev Team dhe iPhone Dev Team punoi mbi këtë project dhe pak më parë nxori versionin e ri të redsn0w ku na mundëson të bëjmë edhe me këtë program Untethered Jailbreak në iOS 5.0.1.

Në Cydia kërkojmë për corona dhe e instalojmë dhe kemi një iphone me untethered jailbreack!

 

Kujdes: Si çdo herë që qarkullon n jë jailbreak i ri  kështu dhe tani @pod2g paralajmëron që nuk duhet të bëjmë update në iOS 5.0.2 që do të qarkullojë sepse mund të humbasim mundësinë për jailbreak në të ardhmen .
Iphone shqip

15
Albwebmaster / (Pyetje) Si mund të ndahet databas-a?
« ne: 16-11-2011, 21:51:49 »
Unë tani i kam të instaluara që të tre faqet dhe kanë të dhëna. Duhet të bëj një instalim të "paster" për të tre nga e para? Nëse po, duke kaluar dbasen përkatëse humbet gjë (regjistrime, komente,postime, etj.)? Duhen krujuar përseri sektorët dhe katigoritë në faqe të re "të paster"?

16
Albwebmaster / (Pyetje) Si mund të ndahet databas-a?
« ne: 16-11-2011, 21:14:00 »
Përshendetje!
Kam tre faqe me një database. Pyetja është se a ka ndonjë mënyrë të ndahet database në tre pjesë për çdo faqe në vete me të dhënat përkatëse?

Faleminderit!

17
Portalet Shqiptare / albfone.com: Faqe e re për celularë!
« ne: 13-11-2011, 09:32:11 »
Mbas iphone-alb.com, vëndosa të krijoj albfone.com një faqe/forum me të gjitha markat dhe platformat e celularëve.
Idea është që fillestarët të gjëjnë ndihmë dhe mënyra të zbulojnë telefonin e tyre, gjithashtu (shpresoj) dhe specialistat të japin ndihmen e tyre tek njëri-tjetri.
Jeni të mirpritur të gjithë të bashkpunojmë!
www.albfone.com

18
Problemi është se nuk mund të aditoj asnjë teme sepse një prej atyre nuk ka"prind". Dhe tani duhet ose me një farë mënyre të vëndos "prind", ose të gjëj një mënyrë t'a fshij fare këtë temë

19
Kur bëj këtë proçes më tregon se ku qëndron problemi dhe më pyet nëse dua që të riparohet automatikisht. Shtypi "po"dhe më thotë se problemi qendron në
Sources/RepairBoards.php
Line: 1638
Ndërkohë sa herë që e bëj këtë gjë, shtohet në forum një sektor i ri me emrin
"Salvage Area"

20
Me që nuk doli njeri të më ndihmojë në këtë problem u përpoqa vetë me kërkime në google. Në funksionin e gjetjes së problemeve të forumit dhe në mundësin e riparimit automatik nga vetë forumi, më tregon se error-i ndodhet si më poshtë:

Citim
Sources/RepairBoards.php
Line: 1638
Problemi është se në line 1638 nuk di se çfarë duhet të korixhohet. Ka njeri ndonjë ide?

Edhe diçka tjetër, mund të fshihet ky bord-i problematik me ndonjë mënyrë? (nga db apo nga ndonjë file tjetër se kam shkarkuar db dhe e kam gjetur emrine këtij bord-i por nuk di se çfarë të fshij)

Në vazhdim është fotoja me arkivin RepairBoards.php:

21
Dua ndihmën tuaj për këtë problem:

Pasi krijuar një teme të re dhe duke u përpjekur ti ndryshoja vënd në rënditjen e paraqitjes, gabimisht kalova një temë në temen e re dhe i hoqa "prindin! (bordin).
Tani po përpiqem t'a korixhoj dhe më jep këtë error
 
Citim
Board "emri i temes në fjalë" does not have a valid parent. Use the 'find and repair errors' function to fix this.
Si mund t'a rregulloi pa kaluar backap?

22
Në përgjithësi ikona që ekziston për një hacker është ajo e një makinerie përpara një ekrani kompiutri. Ndërkohë, megjithëse dikur mund të vlente kjo, realiteti është ndryshe sidomos në rastin e një katigorie të veçantë hackerësh, «jailbreakers-ve», të cilët janë specialista për të «ngacmuar» pajisjet e tyre, duke hequr kufizimet që kanë vëndosur kompanitë prodhuese të tyre dhe shumë herë duke i ndryshuar…
funksionet e tyre.

Disa prej jailbreakers-ve të njohur u takuan në Londer muajin e kaluar për një takim të quajtur MyGreatFest, i cili i kushtohej «sportit» në fjalë.

Shumë nga të pranishmit u tregua se ishin largë nga standartet e mësipërme: përkundrazi, bëhej fjalë për përsona mjaft të specializuar, në shumëraste biznensmenë, ku thjeshtë përdorin  këtë lloj hacking-u të veçantë  si mjet të avancimit të karrjerës së tyre.

20-vjeçari Xheims Guelton është njëri prej tyre: Filloi të merret me kompiuter në moshën 9 vjeç dhe shumë shpejt kaloi në programatizëm. Tani krijon aplikacione për iPhone. Hyrja e tij në këtë fushë ishte e rëndesishme, kur fitoi një iPod Nano. «Isha në aeroplan dhe përtoja, fillova të ‘luaja’ me të, dhe gjeta diçka interesante».
Ishte si «çelësi» i logismit të iPod, që mund të përdorej për jailbreaking. Guellton e shkruajti në blogun e tij dhe shkoi për të fjetur-në mëngjes, vuri re që ky shkrim ishte lexuar 250.000 herë.

Brënda disa ditësh, një hacker tjetër, me nickname DarkMalloc (16-vjeçari Xhosua Taker) komunikoi me të, i cili e prezantoi tek hackerit e tjerë brënda në ChatRooms.
Në një moment ishte mërzitur nëmes të disa përsonave të zgjuar, në mes të tyre ndodheshin “emra të mëdhenjë” të kësaj fushe, si Chronic dhe “iH8sn0w ( Steven Lopez)”.
Joshua Hill aka p0sixninja
from the Chronic Dev Team

Në fillim ndjehesha i ndrojtur , por të gjithë ishin përsona të mirë.

Chronic (Guill Strafac) është themeluesi i grupit  jailbreakers «Chronic Dev», ndërsa ih8sn0w është 16-vjeçari Stiven, krijuesi shumë «veglave» për jailbreaking.

Guelton filloi të kalonte 7-8 orë çdo natë duke folur me hackers të tjerë, ndërkohë paralel «ngacmonte»  iPod-in dhe lexonte për në shkollë. Deri sa, në një moment duhej të zgjidhte, dhe zgjodhi shkollën.

Ndërkohë, kur erdhi momenti, në vënd të shkollës, preferoi tjetër rrugë:

Krijoi një kompani logismiku të quajtur Disruptive Developments dhe përdori famen që kishte fituar si jailbreaker për të afruar sponsorë. Gjithashtu, krijoi një rrjet të quajtur Coder Dojo, në të cilin jepen mësime falas për fëmijë të vegjel të cilët deshirojnë të merren me programatizëm.

I ngjashëm është dhe rasti i Aron Ash, i një hackeri tjetër me ambicie biznesi.
Programatizues i vetmësuar, punoi në fushën e video games para se të marrë në dorë një iPhone. Nga që ishte shumëi vogël qëtë bëhej antarë në grupin e Development të Apple, u bë hacker dhe filloi të bënte aplikacione për telefonat «e thyera». «E quaja akoma më të mirë, sepse mund të bëja programe që ndryshojnë mënyrën e funksionit të iPhonit, diçka që nuk mund të bëhej nga  një Developer ‘zyrtarë’ » thotë përkatësisht.

Ash filloi të shiste programet e tij, deri sa pa që shuma prej atyre që kishin pajisje «të thyera» përdornin aplikacione pirate të cilat i kishte krijuar-në realitet, vetë 1 në 100 paguante. Megjithatë, fitoi 100.000 dollarë prej apliokacioneve të tij, mjaft për të mbuluar shpenzimet e shkollës në shkencen e kumpiuterave në universitetin e Xhorxhias.


Ndërkohë problemi kryesorë i tij është…që di më tepër se profesori i tij. «Nuk mësoj dhe shumë gjëra, dhe mëndoj se do të shpenzoja kohën më mirë duke mësuar vetë të tjerët. mëndoj të lë universitetin dhe të hap një kompani me një shokun tim, gjithashtu jailbreaker».

Një Hacker akoma, 25-vjeçari Muclenerd quhet një nga themeluesit e grupit Jailbreakers të Dev Team me rol kryesorë Unlock të iPhonit..
Karakteristikë e përbashkët e  jailbreakers-ve me sa duket është «të hyjnë në rrugë të drejtë» që në moshë të vogël, pasi shumë prej emrave të mëdhenjë të kësaj fushe kanë hyrë në botën e biznesit: Xhorxh Hoxh (Geohot- krijoi programe për «thyerjen» e pajisjeve të Apple dhe të PS3) tani punon në Facebook.
Ndërsa Nikolas Alegra (Comex) tani punon në Apple. Më tepër në iphone shqip..

23
Nuk po gjëj diçka të tillë. Ku ndodhet?

24
Mos e ke fjalën për subscriptions.php si më poshtë:

Kodi: [Zgjidh]
<?php

/**
 * Simple Machines Forum (SMF)
 *
 * @package SMF
 * @author Simple Machines http://www.simplemachines.org
 * @copyright 2011 Simple Machines
 * @license http://www.simplemachines.org/about/smf/license.php BSD
 *
 * @version 2.0
 */

/*
This file is the file which all subscription gateways should call
when a payment has been received - it sorts out the user status.

void generateSubscriptionError()
// log the error for posterity
*/

// Start things rolling by getting SMF alive...
if (!file_exists(dirname(__FILE__) . &#39;/SSI.php&#39;))
die(&#39;Cannot find SSI.php&#39;);

require_once(dirname(__FILE__) . &#39;/SSI.php&#39;);
require_once($sourcedir . &#39;/ManagePaid.php&#39;);

// For any admin emailing.
require_once($sourcedir . &#39;/Subs-Admin.php&#39;);

loadLanguage(&#39;ManagePaid&#39;);

// If there&#39;s literally nothing coming in, let&#39;s take flight!
if (empty($_POST))
die($txt[&#39;paid_no_data&#39;]);

// I assume we&#39;re even active?
if (empty($modSettings[&#39;paid_enabled&#39;]))
exit;

// If we have some custom people who find out about problems load them here.
$notify_users = array();
if (!empty(
$modSettings[&#39;paid_email_to&#39;]))
foreach (explode(&#39;,&#39;, $modSettings[&#39;paid_email_to&#39;]) as $email)
$notify_users[] = array(
&#39;email&#39; => $email,
&#39;name&#39; => $txt[&#39;who_member&#39;],
&#39;id&#39; => 0,
);

// We need to see whether we can find the correct payment gateway,
// we&#39;ll going to go through all our gateway scripts and find out
// if they are happy with what we have.
$txnType = &#39;&#39;;
$gatewayHandles loadPaymentGateways();
foreach (
$gatewayHandles as $gateway)
{
$gatewayClass = new $gateway[&#39;payment_class&#39;]();
if ($gatewayClass->isValid())
{
$txnType $gateway[&#39;code&#39;];
break;
}
}

if (empty(
$txnType))
generateSubscriptionError($txt[&#39;paid_unknown_transaction_type&#39;]);

// Get the subscription and member ID amoungst others...
@list ($subscription_id$member_id) = $gatewayClass->precheck();

// Integer these just in case.
$subscription_id = (int) $subscription_id;
$member_id = (int) $member_id;

// This would be bad...
if (empty($member_id))
generateSubscriptionError($txt[&#39;paid_empty_member&#39;]);

// Verify the member.
$request $smcFunc[&#39;db_query&#39;](&#39;&#39;, &#39;
SELECT id_membermember_namereal_nameemail_address
FROM {db_prefix}members
WHERE id_member = {int:current_member}&#39;,
array(
&#39;current_member&#39; => $member_id,
)
);
// Didn&#39;t find them?
if ($smcFunc[&#39;db_num_rows&#39;]($request) == 0)
generateSubscriptionError(sprintf($txt[&#39;paid_could_not_find_member&#39;], $member_id));
$member_info $smcFunc[&#39;db_fetch_assoc&#39;]($request);
$smcFunc[&#39;db_free_result&#39;]($request);

// Get the subscription details.
$request $smcFunc[&#39;db_query&#39;](&#39;&#39;, &#39;
SELECT costlengthname
FROM {db_prefix}subscriptions
WHERE id_subscribe = {int:current_subscription}&#39;,
array(
&#39;current_subscription&#39; => $subscription_id,
)
);

// Didn&#39;t find it?
if ($smcFunc[&#39;db_num_rows&#39;]($request) == 0)
generateSubscriptionError(sprintf($txt[&#39;paid_count_not_find_subscription&#39;], $member_id, $subscription_id));

$subscription_info $smcFunc[&#39;db_fetch_assoc&#39;]($request);
$smcFunc[&#39;db_free_result&#39;]($request);

// We wish to check the pending payments to make sure we are expecting this.
$request $smcFunc[&#39;db_query&#39;](&#39;&#39;, &#39;
SELECT id_sublogpayments_pendingpending_detailsend_time
FROM {db_prefix}log_subscribed
WHERE id_subscribe = {int:current_subscription}
AND id_member = {int:current_member}
LIMIT 1&#39;,
array(
&#39;current_subscription&#39; => $subscription_id,
&#39;current_member&#39; => $member_id,
)
);
if (
$smcFunc[&#39;db_num_rows&#39;]($request) == 0)
generateSubscriptionError(sprintf($txt[&#39;paid_count_not_find_subscription_log&#39;], $member_id, $subscription_id));
$subscription_info += $smcFunc[&#39;db_fetch_assoc&#39;]($request);
$smcFunc[&#39;db_free_result&#39;]($request);

// Is this a refund etc?
if ($gatewayClass->isRefund())
{
// If the end time subtracted by current time, is not greater
// than the duration (ie length of subscription), then we close it.
if ($subscription_info[&#39;end_time&#39;] - time() < $subscription_info[&#39;length&#39;])
{
// Delete user subscription.
removeSubscription($subscription_id$member_id);
$subscription_act time();
$status 0;
}
else
{
loadSubscriptions();
$subscription_act $subscription_info[&#39;end_time&#39;] - $context[&#39;subscriptions&#39;][$subscription_id][&#39;num_length&#39;];
$status 1;
}

// Mark it as complete so we have a record.
$smcFunc[&#39;db_query&#39;](&#39;&#39;, &#39;
UPDATE {db_prefix}log_subscribed
SET end_time = {int:current_time}
WHERE id_subscribe = {int:current_subscription}
AND id_member = {int:current_member}
AND status = {int:status}&#39;,
array(
&#39;current_time&#39; => $subscription_act,
&#39;current_subscription&#39; => $subscription_id,
&#39;current_member&#39; => $member_id,
&#39;status&#39; => $status,
)
);

// Receipt?
if (!empty($modSettings[&#39;paid_email&#39;]) && $modSettings[&#39;paid_email&#39;] == 2)
{
$replacements = array(
&#39;NAME&#39; => $subscription_info[&#39;name&#39;],
&#39;REFUNDNAME&#39; => $member_info[&#39;member_name&#39;],
&#39;REFUNDUSER&#39; => $member_info[&#39;real_name&#39;],
&#39;PROFILELINK&#39; => $scripturl . &#39;?action=profile;u=&#39; . $member_id,
&#39;DATE&#39; => timeformat(time(), false),
);

emailAdmins(&#39;paid_subscription_refund&#39;, $replacements, $notify_users);
}

}
// Otherwise is it what we want, a purchase?
elseif ($gatewayClass->isPayment() || $gatewayClass->isSubscription())
{
$cost unserialize($subscription_info[&#39;cost&#39;]);
$total_cost $gatewayClass->getCost();
$notify false;

// For one off&#39;s we want to only capture them once!
if (!$gatewayClass->isSubscription())
{
$real_details = @unserialize($subscription_info[&#39;pending_details&#39;]);
if (empty($real_details))
generateSubscriptionError(sprintf($txt[&#39;paid_count_not_find_outstanding_payment&#39;], $member_id, $subscription_id));
// Now we just try to find anything pending.
// We don&#39;t really care which it is as security happens later.
foreach ($real_details as $id => $detail)
{
unset($real_details[$id]);
if ($detail[3] == &#39;payback&#39; && $subscription_info[&#39;payments_pending&#39;])
$subscription_info[&#39;payments_pending&#39;]--;
break;
}
$subscription_info[&#39;pending_details&#39;] = empty($real_details) ? &#39;&#39; : serialize($real_details);

$smcFunc[&#39;db_query&#39;](&#39;&#39;, &#39;
UPDATE {db_prefix}log_subscribed
SET payments_pending = {int:payments_pending}, pending_details = {string:pending_details}
WHERE id_sublog = {int:current_subscription_item}&#39;,
array(
&#39;payments_pending&#39; => $subscription_info[&#39;payments_pending&#39;],
&#39;current_subscription_item&#39; => $subscription_info[&#39;id_sublog&#39;],
&#39;pending_details&#39; => $subscription_info[&#39;pending_details&#39;],
)
);
}

// Is this flexible?
if ($subscription_info[&#39;length&#39;] == &#39;F&#39;)
{
$found_duration 0;
// This is a little harder, can we find the right duration?
foreach ($cost as $duration => $value)
{
if ($duration == &#39;fixed&#39;)
continue;
elseif ((float) $value == (float) $total_cost)
$found_duration strtoupper(substr($duration01));
}

// If we have the duration then we&#39;re done.
if ($found_duration!== 0)
{
$notify true;
addSubscription($subscription_id$member_id$found_duration);
}
}
else
{
$actual_cost $cost[&#39;fixed&#39;];
// It must be at least the right amount.
if ($total_cost != && $total_cost >= $actual_cost)
{
// Add the subscription.
$notify true;
addSubscription($subscription_id$member_id);
}
}

// Send a receipt?
if (!empty($modSettings[&#39;paid_email&#39;]) && $modSettings[&#39;paid_email&#39;] == 2 && $notify)
{
$replacements = array(
&#39;NAME&#39; => $subscription_info[&#39;name&#39;],
&#39;SUBNAME&#39; => $member_info[&#39;member_name&#39;],
&#39;SUBUSER&#39; => $member_info[&#39;real_name&#39;],
&#39;SUBEMAIL&#39; => $member_info[&#39;email_address&#39;],
&#39;PRICE&#39; => sprintf($modSettings[&#39;paid_currency_symbol&#39;], $total_cost),
&#39;PROFILELINK&#39; => $scripturl . &#39;?action=profile;u=&#39; . $member_id,
&#39;DATE&#39; => timeformat(time(), false),
);

emailAdmins(&#39;paid_subscription_new&#39;, $replacements, $notify_users);
}
}

// In case we have anything specific to do.
$gatewayClass->close();

// Log an error then die.
function generateSubscriptionError($text)
{
global $modSettings$notify_users$smcFunc;

// Send an email?
if (!empty($modSettings[&#39;paid_email&#39;]))
{
$replacements = array(
&#39;ERROR&#39; => $text,
);

emailAdmins(&#39;paid_subscription_error&#39;, $replacements, $notify_users);
}

// Maybe we can try to give them the post data?
if (!empty($_POST))
foreach ($_POST as $key => $val)
$text .= &#39;<br />&#39; . $smcFunc[&#39;htmlspecialchars&#39;]($key) . &#39;: &#39; . $smcFunc[&#39;htmlspecialchars&#39;]($val);

// Then just log and die.
log_error($text);

exit;
}

?>

25
Kjo është përmbajtja e index.template.php dhe dua të mund të shtoj një buton "home" dhe home të të dërgojë në blogun (www.iphone-alb.com) që kam, kurse butoni home ekxistues të bëhet forum (www.iphone-alb.com/forum) me linkun që ka.
Kodi: [Zgjidh]
?php
/**
 * Simple Machines Forum (SMF)
 *
 * @package SMF
 * @author Simple Machines
 * @copyright 2011 Simple Machines
 * @license http://www.simplemachines.org/about/smf/license.php BSD
 *
 * @version 2.0
 */

/* This template is, perhaps, the most important template in the theme. It
contains the main template layer that displays the header and footer of
the forum, namely with main_above and main_below. It also contains the
menu sub template, which appropriately displays the menu; the init sub
template, which is there to set the theme up; (init can be missing.) and
the linktree sub template, which sorts out the link tree.

The init sub template should load any data and set any hardcoded options.

The main_above sub template is what is shown above the main content, and
should contain anything that should be shown up there.

The main_below sub template, conversely, is shown after the main content.
It should probably contain the copyright statement and some other things.

The linktree sub template should display the link tree, using the data
in the $context['linktree'] variable.

The menu sub template should display all the relevant buttons the user
wants and or needs.

For more information on the templating system, please see the site at:
http://www.simplemachines.org/
*/

// Initialize the template... mainly little settings.
function template_init()
{
global $context, $settings, $options, $txt;

/* Use images from default theme when using templates from the default theme?
if this is 'always', images from the default theme will be used.
if this is 'defaults', images from the default theme will only be used with default templates.
if this is 'never' or isn't set at all, images from the default theme will not be used. */
$settings['use_default_images'] = 'never';

/* What document type definition is being used? (for font size and other issues.)
'xhtml' for an XHTML 1.0 document type definition.
'html' for an HTML 4.01 document type definition. */
$settings['doctype'] = 'xhtml';

/* The version this template/theme is for.
This should probably be the version of SMF it was created for. */
$settings['theme_version'] = '2.0';

/* Set a setting that tells the theme that it can render the tabs. */
$settings['use_tabs'] = true;

/* Use plain buttons - as opposed to text buttons? */
$settings['use_buttons'] = true;

/* Show sticky and lock status separate from topic icons? */
$settings['separate_sticky_lock'] = true;

/* Does this theme use the strict doctype? */
$settings['strict_doctype'] = false;

/* Does this theme use post previews on the message index? */
$settings['message_index_preview'] = false;

/* Set the following variable to true if this theme requires the optional theme strings file to be loaded. */
$settings['require_theme_strings'] = false;
}

// The main sub template above the content.
function template_html_above()
{
global $context, $settings, $options, $scripturl, $txt, $modSettings;

// Show right to left and the character set for ease of translating.
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"', $context['right_to_left'] ? ' dir="rtl"' : '', '>
<head>';

// The ?fin20 part of this link is just here to make sure browsers don't cache it wrongly.
echo '
<link rel="stylesheet" type="text/css" href="', $settings['theme_url'], '/css/index', $context['theme_variant'], '.css?fin20" />';

// Some browsers need an extra stylesheet due to bugs/compatibility issues.
foreach (array('ie7', 'ie6', 'webkit') as $cssfix)
if ($context['browser']['is_' . $cssfix])
echo '
<link rel="stylesheet" type="text/css" href="', $settings['default_theme_url'], '/css/', $cssfix, '.css" />';

// RTL languages require an additional stylesheet.
if ($context['right_to_left'])
echo '
<link rel="stylesheet" type="text/css" href="', $settings['theme_url'], '/css/rtl.css" />';

// Here comes the JavaScript bits!
echo '
<script type="text/javascript" src="', $settings['default_theme_url'], '/scripts/script.js?fin20"></script>
<script type="text/javascript" src="', $settings['theme_url'], '/scripts/theme.js?fin20"></script>
<script type="text/javascript"><!-- // --><![CDATA[
var smf_theme_url = "', $settings['theme_url'], '";
var smf_default_theme_url = "', $settings['default_theme_url'], '";
var smf_images_url = "', $settings['images_url'], '";
var smf_scripturl = "', $scripturl, '";
var smf_iso_case_folding = ', $context['server']['iso_case_folding'] ? 'true' : 'false', ';
var smf_charset = "', $context['character_set'], '";', $context['show_pm_popup'] ? '
var fPmPopup = function ()
{
if (confirm("' . $txt['show_personal_messages'] . '"))
window.open(smf_prepareScriptUrl(smf_scripturl) + "action=pm");
}
addLoadEvent(fPmPopup);' : '', '
var ajax_notification_text = "', $txt['ajax_in_progress'], '";
var ajax_notification_cancel_text = "', $txt['modify_cancel'], '";
// ]]></script>';

echo '
<meta http-equiv="Content-Type" content="text/html; charset=', $context['character_set'], '" />
<meta name="description" content="', $context['page_title_html_safe'], '" />', !empty($context['meta_keywords']) ? '
<meta name="keywords" content="' . $context['meta_keywords'] . '" />' : '', '
<title>', $context['page_title_html_safe'], '</title>';

// Please don't index these Mr Robot.
if (!empty($context['robot_no_index']))
echo '
<meta name="robots" content="noindex" />';

// Present a canonical url for search engines to prevent duplicate content in their indices.
if (!empty($context['canonical_url']))
echo '
<link rel="canonical" href="', $context['canonical_url'], '" />';

// Show all the relative links, such as help, search, contents, and the like.
echo '
<link rel="help" href="', $scripturl, '?action=help" />
<link rel="search" href="', $scripturl, '?action=search" />
<link rel="contents" href="', $scripturl, '" />';

// If RSS feeds are enabled, advertise the presence of one.
if (!empty($modSettings['xmlnews_enable']) && (!empty($modSettings['allow_guestAccess']) || $context['user']['is_logged']))
echo '
<link rel="alternate" type="application/rss+xml" title="', $context['forum_name_html_safe'], ' - ', $txt['rss'], '" href="', $scripturl, '?type=rss;action=.xml" />';

// If we're viewing a topic, these should be the previous and next topics, respectively.
if (!empty($context['current_topic']))
echo '
<link rel="prev" href="', $scripturl, '?topic=', $context['current_topic'], '.0;prev_next=prev" />
<link rel="next" href="', $scripturl, '?topic=', $context['current_topic'], '.0;prev_next=next" />';

// If we're in a board, or a topic for that matter, the index will be the board's index.
if (!empty($context['current_board']))
echo '
<link rel="index" href="', $scripturl, '?board=', $context['current_board'], '.0" />';

// Output any remaining HTML headers. (from mods, maybe?)
echo $context['html_headers'];

echo '
</head>
<body>';
}

function template_body_above()
{
global $context, $settings, $options, $scripturl, $txt, $modSettings;

echo !empty($settings['forum_width']) ? '
<div id="wrapper" style="width: ' . $settings['forum_width'] . '">' : '', '
<div id="header"><div class="frame">
<div id="top_section">
<h1 class="forumtitle">
<a href="', $scripturl, '">', empty($context['header_logo_url_html_safe']) ? $context['forum_name'] : '<img src="' . $context['header_logo_url_html_safe'] . '" alt="' . $context['forum_name'] . '" />', '</a>
</h1>';

// the upshrink image, right-floated
echo '
<img id="upshrink" src="', $settings['images_url'], '/upshrink.png" alt="*" title="', $txt['upshrink_description'], '" style="display: none;" />';
echo '
', empty($settings['site_slogan']) ? '<img id="smflogo" src="' . $settings['images_url'] . '/smflogo.png" alt="Simple Machines Forum" title="Simple Machines Forum" />' : '<div id="siteslogan" class="floatright">' . $settings['site_slogan'] . '</div>', '
</div>
<div id="upper_section" class="middletext"', empty($options['collapse_header']) ? '' : ' style="display: none;"', '>
<div class="user">';

// If the user is logged in, display stuff like their name, new messages, etc.
if ($context['user']['is_logged'])
{
if (!empty($context['user']['avatar']))
echo '
<p class="avatar">', $context['user']['avatar']['image'], '</p>';
echo '
<ul class="reset">
<li class="greeting">', $txt['hello_member_ndt'], ' <span>', $context['user']['name'], '</span></li>
<li><a href="', $scripturl, '?action=unread">', $txt['unread_since_visit'], '</a></li>
<li><a href="', $scripturl, '?action=unreadreplies">', $txt['show_unread_replies'], '</a></li>';

// Is the forum in maintenance mode?
if ($context['in_maintenance'] && $context['user']['is_admin'])
echo '
<li class="notice">', $txt['maintain_mode_on'], '</li>';

// Are there any members waiting for approval?
if (!empty($context['unapproved_members']))
echo '
<li>', $context['unapproved_members'] == 1 ? $txt['approve_thereis'] : $txt['approve_thereare'], ' <a href="', $scripturl, '?action=admin;area=viewmembers;sa=browse;type=approve">', $context['unapproved_members'] == 1 ? $txt['approve_member'] : $context['unapproved_members'] . ' ' . $txt['approve_members'], '</a> ', $txt['approve_members_waiting'], '</li>';

if (!empty($context['open_mod_reports']) && $context['show_open_reports'])
echo '
<li><a href="', $scripturl, '?action=moderate;area=reports">', sprintf($txt['mod_reports_waiting'], $context['open_mod_reports']), '</a></li>';

echo '
<li>', $context['current_time'], '</li>
</ul>';
}
// Otherwise they're a guest - this time ask them to either register or login - lazy bums...
elseif (!empty($context['show_login_bar']))
{
echo '
<script type="text/javascript" src="', $settings['default_theme_url'], '/scripts/sha1.js"></script>
<form id="guest_form" action="', $scripturl, '?action=login2" method="post" accept-charset="', $context['character_set'], '" ', empty($context['disable_login_hashing']) ? ' onsubmit="hashLoginPassword(this, '' . $context['session_id'] . '');"' : '', '>
<div class="info">', sprintf($txt['welcome_guest'], $txt['guest_title']), '</div>
<input type="text" name="user" size="10" class="input_text" />
<input type="password" name="passwrd" size="10" class="input_password" />
<select name="cookielength">
<option value="60">', $txt['one_hour'], '</option>
<option value="1440">', $txt['one_day'], '</option>
<option value="10080">', $txt['one_week'], '</option>
<option value="43200">', $txt['one_month'], '</option>
<option value="-1" selected="selected">', $txt['forever'], '</option>
</select>
<input type="submit" value="', $txt['login'], '" class="button_submit" /><br />
<div class="info">', $txt['quick_login_dec'], '</div>';

if (!empty($modSettings['enableOpenID']))
echo '
<br /><input type="text" name="openid_identifier" id="openid_url" size="25" class="input_text openid_login" />';

echo '
<input type="hidden" name="hash_passwrd" value="" />
</form>';
}

echo '
</div>
<div class="news normaltext">
<form id="search_form" action="', $scripturl, '?action=search2" method="post" accept-charset="', $context['character_set'], '">
<input type="text" name="search" value="" class="input_text" />&nbsp;
<input type="submit" name="submit" value="', $txt['search'], '" class="button_submit" />
<input type="hidden" name="advanced" value="0" />';

// Search within current topic?
if (!empty($context['current_topic']))
echo '
<input type="hidden" name="topic" value="', $context['current_topic'], '" />';
// If we're on a certain board, limit it to this board ;).
elseif (!empty($context['current_board']))
echo '
<input type="hidden" name="brd[', $context['current_board'], ']" value="', $context['current_board'], '" />';

echo '</form>';

// Show a random news item? (or you could * one from news_lines...)
if (!empty($settings['enable_news']))
echo '
<h2>', $txt['news'], ': </h2>
<p>', $context['random_news_line'], '</p>';

echo '
</div>
</div>
<br class="clear" />';

// Define the upper_section toggle in JavaScript.
echo '
<script type="text/javascript"><!-- // --><![CDATA[
var oMainHeaderToggle = new smc_Toggle({
bToggleEnabled: true,
bCurrentlyCollapsed: ', empty($options['collapse_header']) ? 'false' : 'true', ',
aSwappableContainers: [
'upper_section'
],
aSwapImages: [
{
sId: 'upshrink',
srcExpanded: smf_images_url + '/upshrink.png',
altExpanded: ', JavaScriptEscape($txt['upshrink_description']), ',
srcCollapsed: smf_images_url + '/upshrink2.png',
altCollapsed: ', JavaScriptEscape($txt['upshrink_description']), '
}
],
oThemeOptions: {
bUseThemeSettings: ', $context['user']['is_guest'] ? 'false' : 'true', ',
sOptionName: 'collapse_header',
sSessionVar: ', JavaScriptEscape($context['session_var']), ',
sSessionId: ', JavaScriptEscape($context['session_id']), '
},
oCookieOptions: {
bUseCookie: ', $context['user']['is_guest'] ? 'true' : 'false', ',
sCookieName: 'upshrink'
}
});
// ]]></script>';

// Show the menu here, according to the menu sub template.
template_menu();

echo '
<br class="clear" />
</div></div>';

// The main content should go here.
echo '
<div id="content_section"><div class="frame">
<div id="main_content_section">';

// Custom banners and shoutboxes should be placed here, before the linktree.

// Show the navigation tree.
theme_linktree();
}

function template_body_below()
{
global $context, $settings, $options, $scripturl, $txt, $modSettings;

echo '
</div>
</div></div>';

// Show the "Powered by" and "Valid" logos, as well as the copyright. Remember, the copyright must be somewhere!
echo '
<div id="footer_section"><div class="frame">
<ul class="reset">
<li class="copyright">', theme_copyright(), '</li>
<li><a id="button_xhtml" href="http://validator.w3.org/check?uri=referer" target="_blank" class="new_win" title="', $txt['valid_xhtml'], '"><span>', $txt['xhtml'], '</span></a></li>
', !empty($modSettings['xmlnews_enable']) && (!empty($modSettings['allow_guestAccess']) || $context['user']['is_logged']) ? '<li><a id="button_rss" href="' . $scripturl . '?action=.xml;type=rss" class="new_win"><span>' . $txt['rss'] . '</span></a></li>' : '', '
<li class="last"><a id="button_wap2" href="', $scripturl , '?wap2" class="new_win"><span>', $txt['wap2'], '</span></a></li>
</ul>';

// Show the load time?
if ($context['show_load_time'])
echo '
<p>', $txt['page_created'], $context['load_time'], $txt['seconds_with'], $context['load_queries'], $txt['queries'], '</p>';

echo '
</div></div>', !empty($settings['forum_width']) ? '
</div>' : '';
}

function template_html_below()
{
global $context, $settings, $options, $scripturl, $txt, $modSettings;

echo '
</body></html>';
}

// Show a linktree. This is that thing that shows "My Community | General Category | General Discussion"..
function theme_linktree($force_show = false)
{
global $context, $settings, $options, $shown_linktree;

// If linktree is empty, just return - also allow an override.
if (empty($context['linktree']) || (!empty($context['dont_default_linktree']) && !$force_show))
return;

echo '
<div class="navigate_section">
<ul>';

// Each tree item has a URL and name. Some may have extra_before and extra_after.
foreach ($context['linktree'] as $link_num => $tree)
{
echo '
<li', ($link_num == count($context['linktree']) - 1) ? ' class="last"' : '', '>';

// Show something before the link?
if (isset($tree['extra_before']))
echo $tree['extra_before'];

// Show the link, including a URL if it should have one.
echo $settings['linktree_link'] && isset($tree['url']) ? '
<a href="' . $tree['url'] . '"><span>' . $tree['name'] . '</span></a>' : '<span>' . $tree['name'] . '</span>';

// Show something after the link...?
if (isset($tree['extra_after']))
echo $tree['extra_after'];

// Don't show a separator for the last one.
if ($link_num != count($context['linktree']) - 1)
echo ' »';

echo '
</li>';
}
echo '
</ul>
</div>';

$shown_linktree = true;
}

// Show the menu up top. Something like [home] [help] [profile] [logout]...
function template_menu()
{
global $context, $settings, $options, $scripturl, $txt;

echo '
<div id="main_menu">
<ul class="dropmenu" id="menu_nav">';

foreach ($context['menu_buttons'] as $act => $button)
{
echo '
<li id="button_', $act, '">
<a class="', $button['active_button'] ? 'active ' : '', 'firstlevel" href="', $button['href'], '"', isset($button['target']) ? ' target="' . $button['target'] . '"' : '', '>
<span class="', isset($button['is_last']) ? 'last ' : '', 'firstlevel">', $button['title'], '</span>
</a>';
if (!empty($button['sub_buttons']))
{
echo '
<ul>';

foreach ($button['sub_buttons'] as $childbutton)
{
echo '
<li>
<a href="', $childbutton['href'], '"', isset($childbutton['target']) ? ' target="' . $childbutton['target'] . '"' : '', '>
<span', isset($childbutton['is_last']) ? ' class="last"' : '', '>', $childbutton['title'], !empty($childbutton['sub_buttons']) ? '...' : '', '</span>
</a>';
// 3rd level menus :)
if (!empty($childbutton['sub_buttons']))
{
echo '
<ul>';

foreach ($childbutton['sub_buttons'] as $grandchildbutton)
echo '
<li>
<a href="', $grandchildbutton['href'], '"', isset($grandchildbutton['target']) ? ' target="' . $grandchildbutton['target'] . '"' : '', '>
<span', isset($grandchildbutton['is_last']) ? ' class="last"' : '', '>', $grandchildbutton['title'], '</span>
</a>
</li>';

echo '
</ul>';
}

echo '
</li>';
}
echo '
</ul>';
}
echo '
</li>';
}

echo '
</ul>
</div>';
}

// Generate a strip of buttons.
function template_button_strip($button_strip, $direction = 'top', $strip_options = array())
{
global $settings, $context, $txt, $scripturl;

if (!is_array($strip_options))
$strip_options = array();

// List the buttons in reverse order for RTL languages.
if ($context['right_to_left'])
$button_strip = array_reverse($button_strip, true);

// Create the buttons...
$buttons = array();
foreach ($button_strip as $key => $value)
{
if (!isset($value['test']) || !empty($context[$value['test']]))
$buttons[] = '
<li><a' . (isset($value['id']) ? ' id="button_strip_' . $value['id'] . '"' : '') . ' class="button_strip_' . $key . (isset($value['active']) ? ' active' : '') . '" href="' . $value['url'] . '"' . (isset($value['custom']) ? ' ' . $value['custom'] : '') . '><span>' . $txt[$value['text']] . '</span></a></li>';
}

// No buttons? No button strip either.
if (empty($buttons))
return;

// Make the last one, as easy as possible.
$buttons[count($buttons) - 1] = str_replace('<span>', '<span class="last">', $buttons[count($buttons) - 1]);

echo '
<div class="buttonlist', !empty($direction) ? ' float' . $direction : '', '"', (empty($buttons) ? ' style="display: none;"' : ''), (!empty($strip_options['id']) ? ' id="' . $strip_options['id'] . '"': ''), '>
<ul>',
implode('', $buttons), '
</ul>
</div>';
}

?>

Faqe: [1] 2 3 4 5