SlideShare a Scribd company logo
1 of 76
Download to read offline
EE Squashed
Debugging in ExpressionEngine
Why?
The Request




GET /index.php
Whatā€™s Happening?
       Request

      index.php

   core/CodeIgniter

    controllers/EE

    libraries/Core

  libraries/Template

       Output!
CodeIgniter
     Request

    index.php

 core/CodeIgniter

  controllers/EE

  libraries/Core

libraries/Template

     Output!
ExpressionEngine
       Request

      index.php

   core/CodeIgniter

    controllers/EE

    libraries/Core

  libraries/Template

       Output!
Request

    index.php

 core/CodeIgniter

  controllers/EE

  libraries/Core

libraries/Template

     Output!
Request

    index.php        Set non-standard
                     system path
 core/CodeIgniter
                     $system_path = '../sys';


  controllers/EE

  libraries/Core     Kick off CodeIgniter
                     require_once BASEPATH.'core/
libraries/Template   CodeIgniter'.EXT;



     Output!
Run CodeIgniter
     Request         LOAD: core/Common
                     LOAD: core/Compat
                     LOAD: config/constants

    index.php        LOAD: core/Benchmark
                     LOAD: core/Hooks
                     RUN: pre-system HOOK
                     LOAD: core/Config
 core/CodeIgniter    LOAD: core/Unicode
                     LOAD: core/URI
                     LOAD: core/Router
  controllers/EE     LOAD: core/Output
                     RUN: cache_override HOOK
                     LOAD: core/Input

  libraries/Core     LOAD: core/Lang
                     LOAD: core/Base[4,5]
                     LOAD: core/Controller
                     LOAD: EE
libraries/Template   RUN: pre_controller HOOK
                     INSTANTIATE: EE
                     RUN: post_controller_constructor HOOK
     Output!         RUN: EE/index
                     RUN: post_controller HOOK
                     RENDER: output
                     RUN: post_system HOOK
Run CodeIgniter
     Request         LOAD: core/Common
                     LOAD: core/Compat
                     LOAD: config/constants

    index.php        LOAD: core/Benchmark
                     LOAD: core/Hooks
                     RUN: pre-system HOOK
                     LOAD: core/Config
 core/CodeIgniter    LOAD: core/Unicode
                     LOAD: core/URI
                     LOAD: core/Router
  controllers/EE     LOAD: core/Output
                     RUN: cache_override HOOK
                     LOAD: core/Input

  libraries/Core     LOAD: core/Lang
                     LOAD: core/Base[4,5]
                     LOAD: core/Controller
                     LOAD: EE
libraries/Template   RUN: pre_controller HOOK
                     INSTANTIATE: EE
                     RUN: post_controller_constructor HOOK
     Output!         RUN: EE/index
                     RUN: post_controller HOOK
                     RENDER: output
                     RUN: post_system HOOK
Run CodeIgniter
     Request         LOAD: core/Common
                     LOAD: core/Compat
                     LOAD: config/constants

    index.php        LOAD: core/Benchmark
                     LOAD: core/Hooks
                     RUN: pre-system HOOK
                     LOAD: core/Config
 core/CodeIgniter    LOAD: core/Unicode
                     LOAD: core/URI
                     LOAD: core/Router
  controllers/EE     LOAD: core/Output
                     RUN: cache_override HOOK
                     LOAD: core/Input

  libraries/Core     LOAD: core/Lang
                     LOAD: core/Base[4,5]
                     LOAD: core/Controller
                     LOAD: EE
libraries/Template   RUN: pre_controller HOOK
                     INSTANTIATE: EE
                     RUN: post_controller_constructor HOOK
     Output!         RUN: EE/index
                     RUN: post_controller HOOK
                     RENDER: output
                     RUN: post_system HOOK
Request

    index.php

 core/CodeIgniter
                     Kick off
  controllers/EE     ExpressionEngine
                     $this->core->_initialize_core();
  libraries/Core

libraries/Template

     Output!
Request

    index.php
                     Run ExpressionEngine
 core/CodeIgniter    LOAD: Database
                     LOAD: Site Preferences
                     LOAD: libraries/Functions
  controllers/EE     LOAD: libraries/Extensions
                     LOAD: libraries/Localize
                     LOAD: libraries/Session
  libraries/Core     LOAD: languages/english/core
                     LOAD: libraries/Template
                     RUN: template/run_template_engine
libraries/Template

     Output!
Request

    index.php
                     Run ExpressionEngine
 core/CodeIgniter    LOAD: Database
                     LOAD: Site Preferences
                     LOAD: libraries/Functions
  controllers/EE     LOAD: libraries/Extensions
                     LOAD: libraries/Localize
                     LOAD: libraries/Session
  libraries/Core     LOAD: languages/english/core
                     LOAD: libraries/Template
                     RUN: template/run_template_engine
libraries/Template

     Output!
Request

    index.php        Parse the Template
                     Parses URI
 core/CodeIgniter    Fetch template from DB
                     Fetch template from disk
                     Static check
                     Parse snippets, segments, embed:vars
  controllers/EE     Check cache
                     Parse input PHP
                     Parse simple conditionals
  libraries/Core     Parse tags
                     Parse output PHP
                     Write cache
libraries/Template   Parse advanced conditionals
                     Loop through sub-templates


     Output!
Request

    index.php        Parse the Template
                     Parses URI
 core/CodeIgniter    Fetch template from DB
                     Fetch template from disk
                     Static check
                     Parse snippets, segments, embed:vars
  controllers/EE     Check cache
                     Parse input PHP
                     Parse simple conditionals
  libraries/Core     Parse tags
                     Parse output PHP
                     Write cache
libraries/Template   Parse advanced conditionals
                     Loop through sub-templates


     Output!
Request

    index.php

 core/CodeIgniter

  controllers/EE

  libraries/Core

libraries/Template

     Output!
Whatā€™s Happening?
       Request

      index.php

   core/CodeIgniter

    controllers/EE

    libraries/Core

  libraries/Template

       Output!
Debugging
  Debugging is a methodical process of ļ¬nding and
reducing the number of bugs, or defects, in a computer program or a
  piece of electronic hardware, thus making it behave as expected.
                                                           ā€“wikipedia
Debugging
Debugging is a methodical process!
KISS


Donā€™t assume anything
Attack the obvious
Ask for help
Start broad
When you assumeā€¦

Donā€™t assume itā€™s an extension
Donā€™t assume itā€™s the database
Donā€™t assume itā€™s your host
Donā€™t assumeā€¦

   Itā€™s much faster to determine what the problem is
             than what the problem isnā€™t.
Is it plugged in?


Can you SSH/FTP?
Can you access a static HTML ļ¬le?
Can you access your database?
Can you access PHP info?
Help!

Xdebug Extension for PHP
http://xdebug.org/




Display Output Proļ¬ler
$config[ā€˜show_profilerā€™] = TRUE;
Broad strokes

Check the application, can you log into the CP?
Check the templates, can you access other
pages?
Remove half the template, does it show up?
Remove a fourth the template, does it show up?
Rinse, repeatā€¦
KISS Huot Style

1. Test a static ļ¬le
2. Test the control panel
3. Test other templates
4. Remove the entire trouble template, replace it
   with ā€œtestā€
5. Fill back in the template until it breaks
KISS Huot Style

6. Is the trouble spot ļ¬xable in the template?
7. If not open the add-on and place debugging
   lines throughout
8. Is the trouble spot in the add-on?
9. If not open the core EE ļ¬les and place
   debugging lines throughout
Three Examples
1.
Dataā€™s Gone Missing
The Problem




   4:30 pm
  on a Friday
Assumptionsā€¦
 Letā€™s do it all wrong.
Itā€™s EEā€™s Fault



An entry was overwritten?
An entry was accidentally deleted?
An entry was set to closed?
Itā€™s MySQLā€™s Fault



The database is corrupt?
Primary keys are out of order because of a
backup or import?
Now, I feel like an ass.
KISS


Donā€™t assume anything
Attack the obvious
Start broad
Ask for help
Is it plugged in?

Check with the client, what is really missing?
Can they tell you anything about the data?
  What channel it was in?
  What status they set it to?



                  5:58 pm
                 on a Friday
The Solution



ā€œDon't worry Mark, they never existed in the DB. We got to
the bottom of it. I'm adding them by hand tomorrow. Sorry for
all the confusion.ā€


                         6:23 pm
                        on a Friday
2.
Finicky URLs
The Problem




Every listing page just stopped working.
Yesterday
Today
Background



Project rolled seven sites into one.
Each sub-site was different and contained
separate IA (navigation).
Under the Hood


Standard EE 1.x install
No custom add-ons
Not using Pages module
ā€œTemplates as controllersā€
Yesterday
Assumptionsā€¦
 Letā€™s do it all wrong.
Itā€™s EEā€™s Fault



Have the templates changed?
Was something new installed/enabled?
Is it daylight savings time?
Now, I feel like an ass.
KISS


Donā€™t assume anything
Attack the obvious
Start broad
Ask for help
Ask For Help
Ask For Help
Ask For Help
The Solution



For now, Iā€™ve renamed entry.
Iā€™m open to suggestions, please feel free to
educate me after this session with your ideas.
3.
EE Canā€™t Count
The Problem




Contestants arenā€™t sorting properly.
Under the Hood


Standard EE 2.x install
EE Members
EE Member Custom Proļ¬le Fields
Mark Huot Vote Module
Solspace User Module
All together nowā€¦


The Vote module records votes in a separate
database table.
The Vote module summarizes total votes into a
standard EE member proļ¬le ļ¬eld.
The User module displays users ordered by the
EE member proļ¬le ļ¬eld.
Assumptionsā€¦
 Letā€™s do it all wrong.
Itā€™s EEā€™s Fault




Values are correct in
control panel.
Itā€™s Voteā€™s Fault


Module code looks correct.

Correctly using
exp_member_data table.



Pulling correct custom
ļ¬eld, I thinkā€¦
Itā€™s Userā€™s Fault

Nope, template appears
correct.

Sorting by other ļ¬elds
works as expected
(username, other custom
ļ¬elds).

Sort attribute correctly ļ¬‚ips
the results, but keeps them
out of order.
Itā€™s My Fault



Template looks right.

Not a CSS issue,
underlying XHTML is
wrong too.
Now, I feel like an ass.
KISS


Donā€™t assume anything
Attack the obvious
Start broad
Ask for help
Help!
Whatā€™d we Learn?
Donā€™t guess.

More Related Content

What's hot

Php 7 compliance workshop singapore
Php 7 compliance workshop singaporePhp 7 compliance workshop singapore
Php 7 compliance workshop singaporeDamien Seguy
Ā 
Web Development with Python and Django
Web Development with Python and DjangoWeb Development with Python and Django
Web Development with Python and DjangoMichael Pirnat
Ā 
C++ Restrictions for Game Programming.
C++ Restrictions for Game Programming.C++ Restrictions for Game Programming.
C++ Restrictions for Game Programming.Richard Taylor
Ā 
Most Wanted: Future PostgreSQL Features
Most Wanted: Future PostgreSQL FeaturesMost Wanted: Future PostgreSQL Features
Most Wanted: Future PostgreSQL FeaturesPeter Eisentraut
Ā 
Introduction To Ant
Introduction To AntIntroduction To Ant
Introduction To AntRajesh Kumar
Ā 
PHP ITCS 323
PHP ITCS 323PHP ITCS 323
PHP ITCS 323Sleepy Head
Ā 
Compilation and Execution
Compilation and ExecutionCompilation and Execution
Compilation and ExecutionChong-Kuan Chen
Ā 
Building a Dynamic Website Using Django
Building a Dynamic Website Using DjangoBuilding a Dynamic Website Using Django
Building a Dynamic Website Using DjangoNathan Eror
Ā 
Positive Hack Days. Goltsev. Web Vulnerabilities: Difficult Cases
Positive Hack Days. Goltsev. Web Vulnerabilities: Difficult CasesPositive Hack Days. Goltsev. Web Vulnerabilities: Difficult Cases
Positive Hack Days. Goltsev. Web Vulnerabilities: Difficult CasesPositive Hack Days
Ā 
Open Source RAD with OpenERP 7.0
Open Source RAD with OpenERP 7.0Open Source RAD with OpenERP 7.0
Open Source RAD with OpenERP 7.0Quang Ngoc
Ā 
Apache Ant
Apache AntApache Ant
Apache Anthussulinux
Ā 
Cross platform php
Cross platform phpCross platform php
Cross platform phpElizabeth Smith
Ā 
PHP Presentation
PHP PresentationPHP Presentation
PHP PresentationNikhil Jain
Ā 
Something About Dynamic Linking
Something About Dynamic LinkingSomething About Dynamic Linking
Something About Dynamic LinkingWang Hsiangkai
Ā 
Mashups with Drupal and QueryPath
Mashups with Drupal and QueryPathMashups with Drupal and QueryPath
Mashups with Drupal and QueryPathMatt Butcher
Ā 
Ant - Another Neat Tool
Ant - Another Neat ToolAnt - Another Neat Tool
Ant - Another Neat ToolKanika2885
Ā 
Mastering Maven 2.0 In 1 Hour V1.3
Mastering Maven 2.0 In 1 Hour V1.3Mastering Maven 2.0 In 1 Hour V1.3
Mastering Maven 2.0 In 1 Hour V1.3Matthew McCullough
Ā 
Rails vs Web2py
Rails vs Web2pyRails vs Web2py
Rails vs Web2pyjonromero
Ā 

What's hot (19)

Php 7 compliance workshop singapore
Php 7 compliance workshop singaporePhp 7 compliance workshop singapore
Php 7 compliance workshop singapore
Ā 
Web Development with Python and Django
Web Development with Python and DjangoWeb Development with Python and Django
Web Development with Python and Django
Ā 
C++ Restrictions for Game Programming.
C++ Restrictions for Game Programming.C++ Restrictions for Game Programming.
C++ Restrictions for Game Programming.
Ā 
Most Wanted: Future PostgreSQL Features
Most Wanted: Future PostgreSQL FeaturesMost Wanted: Future PostgreSQL Features
Most Wanted: Future PostgreSQL Features
Ā 
Introduction To Ant
Introduction To AntIntroduction To Ant
Introduction To Ant
Ā 
PHP ITCS 323
PHP ITCS 323PHP ITCS 323
PHP ITCS 323
Ā 
Compilation and Execution
Compilation and ExecutionCompilation and Execution
Compilation and Execution
Ā 
Building a Dynamic Website Using Django
Building a Dynamic Website Using DjangoBuilding a Dynamic Website Using Django
Building a Dynamic Website Using Django
Ā 
Positive Hack Days. Goltsev. Web Vulnerabilities: Difficult Cases
Positive Hack Days. Goltsev. Web Vulnerabilities: Difficult CasesPositive Hack Days. Goltsev. Web Vulnerabilities: Difficult Cases
Positive Hack Days. Goltsev. Web Vulnerabilities: Difficult Cases
Ā 
Open Source RAD with OpenERP 7.0
Open Source RAD with OpenERP 7.0Open Source RAD with OpenERP 7.0
Open Source RAD with OpenERP 7.0
Ā 
Apache Ant
Apache AntApache Ant
Apache Ant
Ā 
Cross platform php
Cross platform phpCross platform php
Cross platform php
Ā 
PHP Presentation
PHP PresentationPHP Presentation
PHP Presentation
Ā 
Something About Dynamic Linking
Something About Dynamic LinkingSomething About Dynamic Linking
Something About Dynamic Linking
Ā 
Mashups with Drupal and QueryPath
Mashups with Drupal and QueryPathMashups with Drupal and QueryPath
Mashups with Drupal and QueryPath
Ā 
PHP Tutorials
PHP TutorialsPHP Tutorials
PHP Tutorials
Ā 
Ant - Another Neat Tool
Ant - Another Neat ToolAnt - Another Neat Tool
Ant - Another Neat Tool
Ā 
Mastering Maven 2.0 In 1 Hour V1.3
Mastering Maven 2.0 In 1 Hour V1.3Mastering Maven 2.0 In 1 Hour V1.3
Mastering Maven 2.0 In 1 Hour V1.3
Ā 
Rails vs Web2py
Rails vs Web2pyRails vs Web2py
Rails vs Web2py
Ā 

Viewers also liked

Google wave
Google waveGoogle wave
Google wavetiranusaure
Ā 
TurboTax in Social TY 2009
TurboTax in Social TY 2009TurboTax in Social TY 2009
TurboTax in Social TY 2009Christine Morrison
Ā 
CGS-Customer Generated Solutions at TurboTax
CGS-Customer Generated Solutions at TurboTaxCGS-Customer Generated Solutions at TurboTax
CGS-Customer Generated Solutions at TurboTaxChristine Morrison
Ā 
Curbside Value Partnership Boot Camp Webinar: Blueprint for a successful educ...
Curbside Value Partnership Boot Camp Webinar: Blueprint for a successful educ...Curbside Value Partnership Boot Camp Webinar: Blueprint for a successful educ...
Curbside Value Partnership Boot Camp Webinar: Blueprint for a successful educ...Kristen Biance
Ā 
CVP Boot Camp Webinar
CVP Boot Camp WebinarCVP Boot Camp Webinar
CVP Boot Camp WebinarKristen Biance
Ā 
La Riforma Protestante
La Riforma ProtestanteLa Riforma Protestante
La Riforma ProtestanteFebbe
Ā 
Criterios y normas para la prevenciĆ³n, protecciĆ³n y acompaƱamiento de menores...
Criterios y normas para la prevenciĆ³n, protecciĆ³n y acompaƱamiento de menores...Criterios y normas para la prevenciĆ³n, protecciĆ³n y acompaƱamiento de menores...
Criterios y normas para la prevenciĆ³n, protecciĆ³n y acompaƱamiento de menores...Mario Guillermo Simonovich
Ā 
Noun clause
Noun clauseNoun clause
Noun clausesengyoura
Ā 

Viewers also liked (13)

Google wave
Google waveGoogle wave
Google wave
Ā 
New repform
New repformNew repform
New repform
Ā 
TurboTax in Social TY 2009
TurboTax in Social TY 2009TurboTax in Social TY 2009
TurboTax in Social TY 2009
Ā 
CGS-Customer Generated Solutions at TurboTax
CGS-Customer Generated Solutions at TurboTaxCGS-Customer Generated Solutions at TurboTax
CGS-Customer Generated Solutions at TurboTax
Ā 
Curbside Value Partnership Boot Camp Webinar: Blueprint for a successful educ...
Curbside Value Partnership Boot Camp Webinar: Blueprint for a successful educ...Curbside Value Partnership Boot Camp Webinar: Blueprint for a successful educ...
Curbside Value Partnership Boot Camp Webinar: Blueprint for a successful educ...
Ā 
Roya3
Roya3Roya3
Roya3
Ā 
CVP Boot Camp Webinar
CVP Boot Camp WebinarCVP Boot Camp Webinar
CVP Boot Camp Webinar
Ā 
A MOME KƶnyvtƔr szolgƔltatƔsai
A MOME KƶnyvtƔr szolgƔltatƔsaiA MOME KƶnyvtƔr szolgƔltatƔsai
A MOME KƶnyvtƔr szolgƔltatƔsai
Ā 
La Riforma Protestante
La Riforma ProtestanteLa Riforma Protestante
La Riforma Protestante
Ā 
Criterios y normas para la prevenciĆ³n, protecciĆ³n y acompaƱamiento de menores...
Criterios y normas para la prevenciĆ³n, protecciĆ³n y acompaƱamiento de menores...Criterios y normas para la prevenciĆ³n, protecciĆ³n y acompaƱamiento de menores...
Criterios y normas para la prevenciĆ³n, protecciĆ³n y acompaƱamiento de menores...
Ā 
Proyecto Presupuesto 2017
Proyecto Presupuesto 2017Proyecto Presupuesto 2017
Proyecto Presupuesto 2017
Ā 
Noun clause
Noun clauseNoun clause
Noun clause
Ā 
MOMEK 2.0
MOMEK 2.0MOMEK 2.0
MOMEK 2.0
Ā 

Similar to EE Squashed

Fargate ė„¼ ģ“ģš©ķ•œ ECS with VPC 1ė¶€
Fargate ė„¼ ģ“ģš©ķ•œ ECS with VPC 1ė¶€Fargate ė„¼ ģ“ģš©ķ•œ ECS with VPC 1ė¶€
Fargate ė„¼ ģ“ģš©ķ•œ ECS with VPC 1ė¶€Hyun-Mook Choi
Ā 
Smash the Stack: Writing a Buffer Overflow Exploit (Win32)
Smash the Stack: Writing a Buffer Overflow Exploit (Win32)Smash the Stack: Writing a Buffer Overflow Exploit (Win32)
Smash the Stack: Writing a Buffer Overflow Exploit (Win32)Elvin Gentiles
Ā 
Php Best Practices
Php Best PracticesPhp Best Practices
Php Best PracticesAnsar Ahmed
Ā 
Php Best Practices
Php Best PracticesPhp Best Practices
Php Best PracticesAnsar Ahmed
Ā 
Ext 0523
Ext 0523Ext 0523
Ext 0523littlebtc
Ā 
Caching with Memcached and APC
Caching with Memcached and APCCaching with Memcached and APC
Caching with Memcached and APCBen Ramsey
Ā 
Site Performance - From Pinto to Ferrari
Site Performance - From Pinto to FerrariSite Performance - From Pinto to Ferrari
Site Performance - From Pinto to FerrariJoseph Scott
Ā 
ŠŠ»ŠµŠŗсŠµŠ¹ ŠšŠ¾Š»Š¾ŃŠ¾Š² - Š¢ŠøŠæŠøчŠ½Ń‹Šµ Š¾ŃˆŠøŠ±ŠŗŠø рŠ°Š·Ń€Š°Š±Š¾Ń‚чŠøŠŗŠ¾Š² Š½Š° Drupal (Š²ŠµŃ€ŃŠøŠø 5,6,7)
ŠŠ»ŠµŠŗсŠµŠ¹ ŠšŠ¾Š»Š¾ŃŠ¾Š² - Š¢ŠøŠæŠøчŠ½Ń‹Šµ Š¾ŃˆŠøŠ±ŠŗŠø рŠ°Š·Ń€Š°Š±Š¾Ń‚чŠøŠŗŠ¾Š² Š½Š° Drupal (Š²ŠµŃ€ŃŠøŠø 5,6,7)ŠŠ»ŠµŠŗсŠµŠ¹ ŠšŠ¾Š»Š¾ŃŠ¾Š² - Š¢ŠøŠæŠøчŠ½Ń‹Šµ Š¾ŃˆŠøŠ±ŠŗŠø рŠ°Š·Ń€Š°Š±Š¾Ń‚чŠøŠŗŠ¾Š² Š½Š° Drupal (Š²ŠµŃ€ŃŠøŠø 5,6,7)
ŠŠ»ŠµŠŗсŠµŠ¹ ŠšŠ¾Š»Š¾ŃŠ¾Š² - Š¢ŠøŠæŠøчŠ½Ń‹Šµ Š¾ŃˆŠøŠ±ŠŗŠø рŠ°Š·Ń€Š°Š±Š¾Ń‚чŠøŠŗŠ¾Š² Š½Š° Drupal (Š²ŠµŃ€ŃŠøŠø 5,6,7)LEDC 2016
Ā 
Add-On Development: EE Expects that Every Developer will do his Duty
Add-On Development: EE Expects that Every Developer will do his DutyAdd-On Development: EE Expects that Every Developer will do his Duty
Add-On Development: EE Expects that Every Developer will do his DutyLeslie Doherty
Ā 
NSC #2 - D3 02 - Peter Hlavaty - Attack on the Core
NSC #2 - D3 02 - Peter Hlavaty - Attack on the CoreNSC #2 - D3 02 - Peter Hlavaty - Attack on the Core
NSC #2 - D3 02 - Peter Hlavaty - Attack on the CoreNoSuchCon
Ā 
(phpconftw2012) PHP as a Middleware in Embedded Systems
(phpconftw2012) PHP as a Middleware in Embedded Systems(phpconftw2012) PHP as a Middleware in Embedded Systems
(phpconftw2012) PHP as a Middleware in Embedded Systemssosorry
Ā 
Hadoop: Code Injection, Distributed Fault Injection
Hadoop: Code Injection, Distributed Fault InjectionHadoop: Code Injection, Distributed Fault Injection
Hadoop: Code Injection, Distributed Fault InjectionCloudera, Inc.
Ā 
Vorontsov, golovko ssrf attacks and sockets. smorgasbord of vulnerabilities
Vorontsov, golovko   ssrf attacks and sockets. smorgasbord of vulnerabilitiesVorontsov, golovko   ssrf attacks and sockets. smorgasbord of vulnerabilities
Vorontsov, golovko ssrf attacks and sockets. smorgasbord of vulnerabilitiesDefconRussia
Ā 
Os Selbak
Os SelbakOs Selbak
Os Selbakoscon2007
Ā 
[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...
[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...
[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...Hackito Ergo Sum
Ā 
How to? Drupal developer toolkit. Dennis Povshedny.
How to? Drupal developer toolkit. Dennis Povshedny.How to? Drupal developer toolkit. Dennis Povshedny.
How to? Drupal developer toolkit. Dennis Povshedny.DrupalCampDN
Ā 
Apache Commons Overview
Apache Commons OverviewApache Commons Overview
Apache Commons Overviewghessler
Ā 

Similar to EE Squashed (20)

Fargate ė„¼ ģ“ģš©ķ•œ ECS with VPC 1ė¶€
Fargate ė„¼ ģ“ģš©ķ•œ ECS with VPC 1ė¶€Fargate ė„¼ ģ“ģš©ķ•œ ECS with VPC 1ė¶€
Fargate ė„¼ ģ“ģš©ķ•œ ECS with VPC 1ė¶€
Ā 
Smash the Stack: Writing a Buffer Overflow Exploit (Win32)
Smash the Stack: Writing a Buffer Overflow Exploit (Win32)Smash the Stack: Writing a Buffer Overflow Exploit (Win32)
Smash the Stack: Writing a Buffer Overflow Exploit (Win32)
Ā 
Php Best Practices
Php Best PracticesPhp Best Practices
Php Best Practices
Ā 
Php Best Practices
Php Best PracticesPhp Best Practices
Php Best Practices
Ā 
Ext 0523
Ext 0523Ext 0523
Ext 0523
Ā 
Caching with Memcached and APC
Caching with Memcached and APCCaching with Memcached and APC
Caching with Memcached and APC
Ā 
Site Performance - From Pinto to Ferrari
Site Performance - From Pinto to FerrariSite Performance - From Pinto to Ferrari
Site Performance - From Pinto to Ferrari
Ā 
ŠŠ»ŠµŠŗсŠµŠ¹ ŠšŠ¾Š»Š¾ŃŠ¾Š² - Š¢ŠøŠæŠøчŠ½Ń‹Šµ Š¾ŃˆŠøŠ±ŠŗŠø рŠ°Š·Ń€Š°Š±Š¾Ń‚чŠøŠŗŠ¾Š² Š½Š° Drupal (Š²ŠµŃ€ŃŠøŠø 5,6,7)
ŠŠ»ŠµŠŗсŠµŠ¹ ŠšŠ¾Š»Š¾ŃŠ¾Š² - Š¢ŠøŠæŠøчŠ½Ń‹Šµ Š¾ŃˆŠøŠ±ŠŗŠø рŠ°Š·Ń€Š°Š±Š¾Ń‚чŠøŠŗŠ¾Š² Š½Š° Drupal (Š²ŠµŃ€ŃŠøŠø 5,6,7)ŠŠ»ŠµŠŗсŠµŠ¹ ŠšŠ¾Š»Š¾ŃŠ¾Š² - Š¢ŠøŠæŠøчŠ½Ń‹Šµ Š¾ŃˆŠøŠ±ŠŗŠø рŠ°Š·Ń€Š°Š±Š¾Ń‚чŠøŠŗŠ¾Š² Š½Š° Drupal (Š²ŠµŃ€ŃŠøŠø 5,6,7)
ŠŠ»ŠµŠŗсŠµŠ¹ ŠšŠ¾Š»Š¾ŃŠ¾Š² - Š¢ŠøŠæŠøчŠ½Ń‹Šµ Š¾ŃˆŠøŠ±ŠŗŠø рŠ°Š·Ń€Š°Š±Š¾Ń‚чŠøŠŗŠ¾Š² Š½Š° Drupal (Š²ŠµŃ€ŃŠøŠø 5,6,7)
Ā 
Add-On Development: EE Expects that Every Developer will do his Duty
Add-On Development: EE Expects that Every Developer will do his DutyAdd-On Development: EE Expects that Every Developer will do his Duty
Add-On Development: EE Expects that Every Developer will do his Duty
Ā 
presentation
presentationpresentation
presentation
Ā 
NSC #2 - D3 02 - Peter Hlavaty - Attack on the Core
NSC #2 - D3 02 - Peter Hlavaty - Attack on the CoreNSC #2 - D3 02 - Peter Hlavaty - Attack on the Core
NSC #2 - D3 02 - Peter Hlavaty - Attack on the Core
Ā 
(phpconftw2012) PHP as a Middleware in Embedded Systems
(phpconftw2012) PHP as a Middleware in Embedded Systems(phpconftw2012) PHP as a Middleware in Embedded Systems
(phpconftw2012) PHP as a Middleware in Embedded Systems
Ā 
presentation
presentationpresentation
presentation
Ā 
Hadoop: Code Injection, Distributed Fault Injection
Hadoop: Code Injection, Distributed Fault InjectionHadoop: Code Injection, Distributed Fault Injection
Hadoop: Code Injection, Distributed Fault Injection
Ā 
Vorontsov, golovko ssrf attacks and sockets. smorgasbord of vulnerabilities
Vorontsov, golovko   ssrf attacks and sockets. smorgasbord of vulnerabilitiesVorontsov, golovko   ssrf attacks and sockets. smorgasbord of vulnerabilities
Vorontsov, golovko ssrf attacks and sockets. smorgasbord of vulnerabilities
Ā 
Os Selbak
Os SelbakOs Selbak
Os Selbak
Ā 
[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...
[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...
[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...
Ā 
Basics PHP
Basics PHPBasics PHP
Basics PHP
Ā 
How to? Drupal developer toolkit. Dennis Povshedny.
How to? Drupal developer toolkit. Dennis Povshedny.How to? Drupal developer toolkit. Dennis Povshedny.
How to? Drupal developer toolkit. Dennis Povshedny.
Ā 
Apache Commons Overview
Apache Commons OverviewApache Commons Overview
Apache Commons Overview
Ā 

Recently uploaded

Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
Ā 
šŸ¬ The future of MySQL is Postgres šŸ˜
šŸ¬  The future of MySQL is Postgres   šŸ˜šŸ¬  The future of MySQL is Postgres   šŸ˜
šŸ¬ The future of MySQL is Postgres šŸ˜RTylerCroy
Ā 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
Ā 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
Ā 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
Ā 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
Ā 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
Ā 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
Ā 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
Ā 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel AraĆŗjo
Ā 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
Ā 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
Ā 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
Ā 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
Ā 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
Ā 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
Ā 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
Ā 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
Ā 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
Ā 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
Ā 

Recently uploaded (20)

Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Ā 
šŸ¬ The future of MySQL is Postgres šŸ˜
šŸ¬  The future of MySQL is Postgres   šŸ˜šŸ¬  The future of MySQL is Postgres   šŸ˜
šŸ¬ The future of MySQL is Postgres šŸ˜
Ā 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
Ā 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
Ā 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Ā 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
Ā 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
Ā 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
Ā 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
Ā 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Ā 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
Ā 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
Ā 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
Ā 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
Ā 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
Ā 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
Ā 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
Ā 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
Ā 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
Ā 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
Ā 

EE Squashed

  • 1. EE Squashed Debugging in ExpressionEngine
  • 4. Whatā€™s Happening? Request index.php core/CodeIgniter controllers/EE libraries/Core libraries/Template Output!
  • 5. CodeIgniter Request index.php core/CodeIgniter controllers/EE libraries/Core libraries/Template Output!
  • 6. ExpressionEngine Request index.php core/CodeIgniter controllers/EE libraries/Core libraries/Template Output!
  • 7. Request index.php core/CodeIgniter controllers/EE libraries/Core libraries/Template Output!
  • 8. Request index.php Set non-standard system path core/CodeIgniter $system_path = '../sys'; controllers/EE libraries/Core Kick off CodeIgniter require_once BASEPATH.'core/ libraries/Template CodeIgniter'.EXT; Output!
  • 9. Run CodeIgniter Request LOAD: core/Common LOAD: core/Compat LOAD: config/constants index.php LOAD: core/Benchmark LOAD: core/Hooks RUN: pre-system HOOK LOAD: core/Config core/CodeIgniter LOAD: core/Unicode LOAD: core/URI LOAD: core/Router controllers/EE LOAD: core/Output RUN: cache_override HOOK LOAD: core/Input libraries/Core LOAD: core/Lang LOAD: core/Base[4,5] LOAD: core/Controller LOAD: EE libraries/Template RUN: pre_controller HOOK INSTANTIATE: EE RUN: post_controller_constructor HOOK Output! RUN: EE/index RUN: post_controller HOOK RENDER: output RUN: post_system HOOK
  • 10. Run CodeIgniter Request LOAD: core/Common LOAD: core/Compat LOAD: config/constants index.php LOAD: core/Benchmark LOAD: core/Hooks RUN: pre-system HOOK LOAD: core/Config core/CodeIgniter LOAD: core/Unicode LOAD: core/URI LOAD: core/Router controllers/EE LOAD: core/Output RUN: cache_override HOOK LOAD: core/Input libraries/Core LOAD: core/Lang LOAD: core/Base[4,5] LOAD: core/Controller LOAD: EE libraries/Template RUN: pre_controller HOOK INSTANTIATE: EE RUN: post_controller_constructor HOOK Output! RUN: EE/index RUN: post_controller HOOK RENDER: output RUN: post_system HOOK
  • 11. Run CodeIgniter Request LOAD: core/Common LOAD: core/Compat LOAD: config/constants index.php LOAD: core/Benchmark LOAD: core/Hooks RUN: pre-system HOOK LOAD: core/Config core/CodeIgniter LOAD: core/Unicode LOAD: core/URI LOAD: core/Router controllers/EE LOAD: core/Output RUN: cache_override HOOK LOAD: core/Input libraries/Core LOAD: core/Lang LOAD: core/Base[4,5] LOAD: core/Controller LOAD: EE libraries/Template RUN: pre_controller HOOK INSTANTIATE: EE RUN: post_controller_constructor HOOK Output! RUN: EE/index RUN: post_controller HOOK RENDER: output RUN: post_system HOOK
  • 12. Request index.php core/CodeIgniter Kick off controllers/EE ExpressionEngine $this->core->_initialize_core(); libraries/Core libraries/Template Output!
  • 13. Request index.php Run ExpressionEngine core/CodeIgniter LOAD: Database LOAD: Site Preferences LOAD: libraries/Functions controllers/EE LOAD: libraries/Extensions LOAD: libraries/Localize LOAD: libraries/Session libraries/Core LOAD: languages/english/core LOAD: libraries/Template RUN: template/run_template_engine libraries/Template Output!
  • 14. Request index.php Run ExpressionEngine core/CodeIgniter LOAD: Database LOAD: Site Preferences LOAD: libraries/Functions controllers/EE LOAD: libraries/Extensions LOAD: libraries/Localize LOAD: libraries/Session libraries/Core LOAD: languages/english/core LOAD: libraries/Template RUN: template/run_template_engine libraries/Template Output!
  • 15. Request index.php Parse the Template Parses URI core/CodeIgniter Fetch template from DB Fetch template from disk Static check Parse snippets, segments, embed:vars controllers/EE Check cache Parse input PHP Parse simple conditionals libraries/Core Parse tags Parse output PHP Write cache libraries/Template Parse advanced conditionals Loop through sub-templates Output!
  • 16. Request index.php Parse the Template Parses URI core/CodeIgniter Fetch template from DB Fetch template from disk Static check Parse snippets, segments, embed:vars controllers/EE Check cache Parse input PHP Parse simple conditionals libraries/Core Parse tags Parse output PHP Write cache libraries/Template Parse advanced conditionals Loop through sub-templates Output!
  • 17. Request index.php core/CodeIgniter controllers/EE libraries/Core libraries/Template Output!
  • 18. Whatā€™s Happening? Request index.php core/CodeIgniter controllers/EE libraries/Core libraries/Template Output!
  • 19. Debugging Debugging is a methodical process of ļ¬nding and reducing the number of bugs, or defects, in a computer program or a piece of electronic hardware, thus making it behave as expected. ā€“wikipedia
  • 20. Debugging Debugging is a methodical process!
  • 21. KISS Donā€™t assume anything Attack the obvious Ask for help Start broad
  • 22. When you assumeā€¦ Donā€™t assume itā€™s an extension Donā€™t assume itā€™s the database Donā€™t assume itā€™s your host Donā€™t assumeā€¦ Itā€™s much faster to determine what the problem is than what the problem isnā€™t.
  • 23. Is it plugged in? Can you SSH/FTP? Can you access a static HTML ļ¬le? Can you access your database? Can you access PHP info?
  • 24. Help! Xdebug Extension for PHP http://xdebug.org/ Display Output Proļ¬ler $config[ā€˜show_profilerā€™] = TRUE;
  • 25. Broad strokes Check the application, can you log into the CP? Check the templates, can you access other pages? Remove half the template, does it show up? Remove a fourth the template, does it show up? Rinse, repeatā€¦
  • 26. KISS Huot Style 1. Test a static ļ¬le 2. Test the control panel 3. Test other templates 4. Remove the entire trouble template, replace it with ā€œtestā€ 5. Fill back in the template until it breaks
  • 27. KISS Huot Style 6. Is the trouble spot ļ¬xable in the template? 7. If not open the add-on and place debugging lines throughout 8. Is the trouble spot in the add-on? 9. If not open the core EE ļ¬les and place debugging lines throughout
  • 30. The Problem 4:30 pm on a Friday
  • 32. Itā€™s EEā€™s Fault An entry was overwritten? An entry was accidentally deleted? An entry was set to closed?
  • 33. Itā€™s MySQLā€™s Fault The database is corrupt? Primary keys are out of order because of a backup or import?
  • 34. Now, I feel like an ass.
  • 35. KISS Donā€™t assume anything Attack the obvious Start broad Ask for help
  • 36. Is it plugged in? Check with the client, what is really missing? Can they tell you anything about the data? What channel it was in? What status they set it to? 5:58 pm on a Friday
  • 37. The Solution ā€œDon't worry Mark, they never existed in the DB. We got to the bottom of it. I'm adding them by hand tomorrow. Sorry for all the confusion.ā€ 6:23 pm on a Friday
  • 39. The Problem Every listing page just stopped working.
  • 41. Today
  • 42. Background Project rolled seven sites into one. Each sub-site was different and contained separate IA (navigation).
  • 43. Under the Hood Standard EE 1.x install No custom add-ons Not using Pages module ā€œTemplates as controllersā€
  • 45.
  • 46.
  • 47.
  • 49. Itā€™s EEā€™s Fault Have the templates changed? Was something new installed/enabled? Is it daylight savings time?
  • 50. Now, I feel like an ass.
  • 51. KISS Donā€™t assume anything Attack the obvious Start broad Ask for help
  • 55. The Solution For now, Iā€™ve renamed entry. Iā€™m open to suggestions, please feel free to educate me after this session with your ideas.
  • 58.
  • 59.
  • 60. Under the Hood Standard EE 2.x install EE Members EE Member Custom Proļ¬le Fields Mark Huot Vote Module Solspace User Module
  • 61. All together nowā€¦ The Vote module records votes in a separate database table. The Vote module summarizes total votes into a standard EE member proļ¬le ļ¬eld. The User module displays users ordered by the EE member proļ¬le ļ¬eld.
  • 63. Itā€™s EEā€™s Fault Values are correct in control panel.
  • 64. Itā€™s Voteā€™s Fault Module code looks correct. Correctly using exp_member_data table. Pulling correct custom ļ¬eld, I thinkā€¦
  • 65. Itā€™s Userā€™s Fault Nope, template appears correct. Sorting by other ļ¬elds works as expected (username, other custom ļ¬elds). Sort attribute correctly ļ¬‚ips the results, but keeps them out of order.
  • 66. Itā€™s My Fault Template looks right. Not a CSS issue, underlying XHTML is wrong too.
  • 67. Now, I feel like an ass.
  • 68. KISS Donā€™t assume anything Attack the obvious Start broad Ask for help
  • 69. Help!
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.