Source for file OnpubWebsites.php

Documentation is available at OnpubWebsites.php

  1. <?php
  2.  
  3. /**
  4.  * Manage websites in an Onpub database.
  5.  *
  6.  * @author {@link mailto:corey@onpub.com Corey H.M. Taylor}
  7.  * @copyright Onpub (TM). Copyright 2012, Onpub.com.
  8.  *  {@link http://onpub.com/}
  9.  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License
  10.  *  Version 2
  11.  * @package OnpubAPI
  12.  */
  13. {
  14.   private $pdo;
  15.   /**
  16.    * @var bool 
  17.    */
  18.   public $enableTransactions;
  19.  
  20.   /**
  21.    * Connect to an Onpub database.
  22.    *
  23.    * All the methods in this class which query the database use the database
  24.    * connection provided by the PDO object required by this constructor.
  25.    * Currently, Onpub only supports MySQL as a database for storing content.
  26.    * Therefore, when constructing the PDO object, only the
  27.    * {@link PHP_MANUAL#ref.pdo-mysql PDO_MYSQL} driver is supported
  28.    * as a PDO {@link PHP_MANUAL#ref.pdo-mysql.connection data source}.
  29.    *
  30.    * All the methods in this class require the
  31.    * {@link http://onpub.com/pdfs/onpub_schema.pdf Onpub schema}
  32.    * to be installed in the PDO-connected database. The {@link OnpubDatabase}
  33.    * class contains methods to manage the Onpub schema. The Onpub
  34.    * schema can also be installed by clicking the "Install the schema" link
  35.    * once logged in to the Onpub web interface. The schema generally only has
  36.    * to be installed once per database.
  37.    *
  38.    * @param PDO $pdo {@link PHP_MANUAL#function.pdo-construct PHP Data Object}.
  39.    * @param bool $enableTransactions 
  40.    */
  41.   function __construct(PDO $pdo$enableTransactions TRUE)
  42.   {
  43.     $this->pdo $pdo;
  44.     $this->enableTransactions = $enableTransactions;
  45.     $this->pdo->setAttribute(PDO::ATTR_EMULATE_PREPARESTRUE);
  46.   }
  47.  
  48.   /**
  49.    * @return int 
  50.    */
  51.   public function count()
  52.   {
  53.     $query $this->countQuery();
  54.     $result $this->pdo->query($query);
  55.     OnpubDatabase::verifyQuery($this->pdo$resultFALSE);
  56.  
  57.     if (!($row $result->fetch(PDO::FETCH_ASSOC))) {
  58.       return 0;
  59.     }
  60.  
  61.     $result->closeCursor();
  62.     return $row["count"];
  63.   }
  64.  
  65.   private function countQuery()
  66.   {
  67.     return "SELECT COUNT(ID) AS count FROM OnpubWebsites";
  68.   }
  69.  
  70.   /**
  71.    * @param int $ID ID of the website to delete.
  72.    * @return int 1 if the website was deleted, 0 if the website does not exist in the database.
  73.    */
  74.   public function delete($ID)
  75.   {
  76.     $stmt $this->pdo->prepare("DELETE FROM OnpubWebsites WHERE ID = :ID");
  77.     OnpubDatabase::verifyPrepare($this->pdo$stmtFALSE);
  78.  
  79.     $stmt->bindParam(':ID'$ID);
  80.     $result $stmt->execute();
  81.     OnpubDatabase::verifyExecute($this->pdo$resultFALSE$stmt->errorInfo());
  82.  
  83.     return $stmt->rowCount();
  84.   }
  85.  
  86.   /**
  87.    * @param string $keywords Keyword(s) to search for.
  88.    * @return array All the websites which were found as an array of {@link OnpubWebsite} objects.
  89.    */
  90.   public function search($keywordsOnpubQueryOptions $queryOptions NULL)
  91.   {
  92.     if ($queryOptions === NULL)
  93.       $queryOptions new OnpubQueryOptions();
  94.  
  95.     $query $this->searchQuery($keywords$queryOptions);
  96.     $result $this->pdo->query($query);
  97.     OnpubDatabase::verifyQuery($this->pdo$resultFALSE);
  98.  
  99.     $rows $result->fetchAll(PDO::FETCH_ASSOC);
  100.  
  101.     $websites array();
  102.  
  103.     if ($rows{
  104.       foreach ($rows as $row{
  105.         $website new OnpubWebsite();
  106.  
  107.         $website->ID $row["ID"];
  108.         $website->imageID $row["imageID"];
  109.         $website->name $row["name"];
  110.         $website->url $row["url"];
  111.         $website->imagesURL $row["imagesURL"];
  112.         $website->imagesDirectory $row["imagesDirectory"];
  113.         $website->setCreated(new DateTime($row["created"]));
  114.         $website->setModified(new DateTime($row["modified"]));
  115.  
  116.         $websites[$website;
  117.       }
  118.     }
  119.  
  120.     $result->closeCursor();
  121.     return $websites;
  122.   }
  123.  
  124.   private function searchQuery($keywordsOnpubQueryOptions $queryOptions NULL)
  125.   {
  126.     if ($queryOptions === NULL)
  127.       $queryOptions new OnpubQueryOptions();
  128.  
  129.     $keywords $this->pdo->quote(OnpubDatabase::utf8Decode(trim($keywords)));
  130.  
  131.     if ($queryOptions->orderBy{
  132.       $orderBy $queryOptions->orderBy;
  133.     }
  134.     else {
  135.       $orderBy "";
  136.     }
  137.  
  138.     if ($queryOptions->order{
  139.       $order $queryOptions->order;
  140.     }
  141.     else {
  142.       $order "";
  143.     }
  144.  
  145.     if ($orderBy{
  146.       if ($order{
  147.         return "SELECT ID, imageID, name, url, imagesURL, imagesDirectory, created, modified FROM OnpubWebsites WHERE ID RLIKE $keywords OR name RLIKE $keywords OR modified RLIKE $keywords ORDER BY $orderBy $order";
  148.       }
  149.       else {
  150.         return "SELECT ID, imageID, name, url, imagesURL, imagesDirectory, created, modified FROM OnpubWebsites WHERE ID RLIKE $keywords OR name RLIKE $keywords OR modified RLIKE $keywords ORDER BY $orderBy";
  151.       }
  152.     }
  153.     else {
  154.       return "SELECT ID, imageID, name, url, imagesURL, imagesDirectory, created, modified FROM OnpubWebsites WHERE ID RLIKE $keywords OR name RLIKE $keywords OR modified RLIKE $keywords";
  155.     }
  156.   }
  157.  
  158.   /**
  159.    * @param OnpubQueryOptions $queryOptions Database query options.
  160.    * @return array An array of {@link OnpubWebsite} objects.
  161.    */
  162.   public function select(OnpubQueryOptions $queryOptions NULL)
  163.   {
  164.     if ($queryOptions === NULL)
  165.       $queryOptions new OnpubQueryOptions();
  166.  
  167.     $query $this->selectQuery($queryOptions);
  168.     $result $this->pdo->query($query);
  169.     OnpubDatabase::verifyQuery($this->pdo$resultFALSE);
  170.     $rows $result->fetchAll(PDO::FETCH_ASSOC);
  171.  
  172.     $websites array();
  173.  
  174.     if ($rows{
  175.       foreach ($rows as $row{
  176.         $website new OnpubWebsite();
  177.  
  178.         $website->ID $row["ID"];
  179.         $website->imageID $row["imageID"];
  180.         $website->name $row["name"];
  181.         $website->url $row["url"];
  182.         $website->imagesURL $row["imagesURL"];
  183.         $website->imagesDirectory $row["imagesDirectory"];
  184.         $website->setCreated(new DateTime($row["created"]));
  185.         $website->setModified(new DateTime($row["modified"]));
  186.  
  187.         $websites[$website;
  188.       }
  189.     }
  190.  
  191.     $result->closeCursor();
  192.     return $websites;
  193.   }
  194.  
  195.   private function selectQuery(OnpubQueryOptions $queryOptions NULL)
  196.   {
  197.     if ($queryOptions === NULL)
  198.       $queryOptions new OnpubQueryOptions();
  199.  
  200.     $where "";
  201.     $orderBy "";
  202.     $limit "";
  203.  
  204.     if ($queryOptions->dateLimit{
  205.       $where "WHERE created <= "
  206.         . $this->pdo->quote($queryOptions->dateLimit->format('Y-m-d H:i:s'));
  207.     }
  208.  
  209.     if ($queryOptions->orderBy{
  210.       $orderBy "ORDER BY " $queryOptions->orderBy;
  211.  
  212.       if ($queryOptions->order{
  213.         $orderBy .= " " $queryOptions->order;
  214.       }
  215.     }
  216.  
  217.     if ($queryOptions->getPage(&& $queryOptions->rowLimit && $queryOptions->rowLimit 0{
  218.       $limit "LIMIT "
  219.         . (($queryOptions->getPage(1$queryOptions->rowLimit","
  220.         . $queryOptions->rowLimit;
  221.     }
  222.     elseif ($queryOptions->rowLimit && $queryOptions->rowLimit 0{
  223.       $limit "LIMIT 0," $queryOptions->rowLimit;
  224.     }
  225.  
  226.     return "SELECT ID, imageID, ID, name, url, imagesURL, imagesDirectory, created, modified FROM OnpubWebsites $where $orderBy $limit";
  227.   }
  228.  
  229.   /**
  230.    * @param int $ID ID of the website to get.
  231.    * @return OnpubWebsite An {@link OnpubWebsite} object. NULL if the website does not exist in the database.
  232.    */
  233.   public function get($IDOnpubQueryOptions $queryOptions NULL$flatArticleList FALSE)
  234.   {    
  235.     if ($queryOptions === NULL)
  236.       $queryOptions new OnpubQueryOptions();
  237.  
  238.     $query $this->getQuery($ID$queryOptions);
  239.     $result $this->pdo->query($query);
  240.     OnpubDatabase::verifyQuery($this->pdo$resultFALSE);
  241.  
  242.     if (!($rows $result->fetchAll(PDO::FETCH_ASSOC))) {
  243.       return NULL;
  244.     }
  245.  
  246.     $row $rows[0];
  247.  
  248.     $website new OnpubWebsite();
  249.  
  250.     $website->ID $row["ID"];
  251.     $website->imageID $row["imageID"];
  252.     $website->name $row["name"];
  253.     $website->url $row["url"];
  254.     $website->imagesURL $row["imagesURL"];
  255.     $website->imagesDirectory $row["imagesDirectory"];
  256.     $website->setCreated(new DateTime($row["created"]));
  257.     $website->setModified(new DateTime($row["modified"]));
  258.  
  259.     if ($row["imageID"]{
  260.       $image new OnpubImage();
  261.  
  262.       $image->ID $row["imageID"];
  263.       $image->websiteID $row["ID"];
  264.       $image->fileName $row["fileName"];
  265.       $image->description $row["description"];
  266.       $image->setCreated(new DateTime($row["imageCreated"]));
  267.       $image->setModified(new DateTime($row["imageModified"]));
  268.  
  269.       $website->image $image;
  270.     }
  271.  
  272.     if (!$queryOptions->includeSections{
  273.       return $website;
  274.     }
  275.  
  276.     $osections new OnpubSections($this->pdo);
  277.     $sections array();
  278.     $sectionsassoc array();
  279.  
  280.     foreach ($rows as $row{
  281.       $sectionID $row["sectionID"];
  282.       $ID $row["ID"];
  283.  
  284.       if ($sectionID{
  285.         $section new OnpubSection();
  286.  
  287.         $section->ID $sectionID;
  288.         $section->imageID $row["sectionImageID"];
  289.         $section->websiteID $row["sectionWebsiteID"];
  290.         $section->parentID $row["sectionParentID"];
  291.         $section->name $row["sectionName"];
  292.         $section->url $row["sectionURL"];
  293.         $section->setCreated(new DateTime($row["sectionCreated"]));
  294.         $section->setModified(new DateTime($row["sectionModified"]));
  295.  
  296.         if (isset($sectionsassoc["$sectionID"])) {
  297.           $section $sectionsassoc["$sectionID"];
  298.         }
  299.         else {
  300.           $sectionsassoc["$sectionID"$section;
  301.         }
  302.  
  303.         if ($row["sectionImageID"]{
  304.           $image new OnpubImage();
  305.  
  306.           $image->ID $row["sectionImageID"];
  307.           $image->websiteID $row["sectionImageWebsiteID"];
  308.           $image->fileName $row["sectionImageFileName"];
  309.           $image->description $row["sectionImageDescription"];
  310.           $image->setCreated(new DateTime($row["sectionImageCreated"]));
  311.           $image->setModified(new DateTime($row["sectionImageModified"]));
  312.  
  313.           $section->image $image;
  314.         }
  315.  
  316.         $sections $website->sections;
  317.         $exists FALSE;
  318.  
  319.         foreach ($sections as $s{
  320.           if ($s->ID == $section->ID{
  321.             $exists TRUE;
  322.           }
  323.         }
  324.  
  325.         if ($exists == FALSE{
  326.           $sections[$section;
  327.           $website->sections $sections;
  328.         }
  329.       }
  330.     }
  331.  
  332.     // An array to track the subsections indexes in the sections array.
  333.     $subsections array();
  334.  
  335.     // Loop through all sections and link subsections to their parents and
  336.     // vice-versa.
  337.     for ($i 0$i sizeof($sections)$i++{
  338.       $section $sections[$i];
  339.       
  340.       if ($section->parentID{
  341.         $parentID $section->parentID;
  342.  
  343.         if (isset($sectionsassoc["$parentID"])) {
  344.           $parentSection $sectionsassoc["$parentID"];
  345.           $parentSection->sections[$section;
  346.           $section->parent $parentSection;
  347.         }
  348.  
  349.         $subsections[$i;
  350.       }
  351.     }
  352.  
  353.     // Unset subsections from the original sections array now that they are
  354.     // linked to their parent sections.
  355.     foreach ($subsections as $subsection{
  356.       unset($sections[$subsection]);
  357.     }
  358.  
  359.     // Array now might not be offset from 0 for sections. Re-index from 0.
  360.     $website->sections array_values($sections);
  361.  
  362.     if (!$queryOptions->includeArticles{
  363.       return $website;
  364.     }
  365.  
  366.     $articlesassoc array();
  367.  
  368.     reset ($rows);
  369.  
  370.     foreach ($rows as $row{
  371.       $articleID $row["articleID"];
  372.       $sectionID $row["sectionID"];
  373.  
  374.       if ($articleID && $sectionID{
  375.         if ($queryOptions->includeContent{
  376.           $content $row["content"];
  377.         }
  378.         else {
  379.           $content "";
  380.         }
  381.  
  382.         $article new OnpubArticle();
  383.  
  384.         $article->ID $articleID;
  385.         $article->imageID $row["articleImageID"];
  386.         $article->title $row["title"];
  387.         $article->content $content;
  388.         $article->url $row["articleURL"];
  389.         $article->setCreated(new DateTime($row["articleCreated"]));
  390.         $article->setModified(new DateTime($row["articleModified"]));
  391.  
  392.         if (isset($articlesassoc["$articleID"])) {
  393.           $article $articlesassoc["$articleID"];
  394.         }
  395.         else {
  396.           $article->sectionIDs[$sectionID;
  397.           $articlesassoc["$articleID"$article;
  398.         }
  399.  
  400.         if ($row["articleImageID"]{
  401.           $image new OnpubImage();
  402.  
  403.           $image->ID $row["articleImageID"];
  404.           $image->websiteID $row["articleImageWebsiteID"];
  405.           $image->fileName $row["articleImageFileName"];
  406.           $image->description $row["articleImageDescription"];
  407.           $image->url $row["articleImageURL"];
  408.           $image->setCreated(new DateTime($row["articleImageCreated"]));
  409.           $image->setModified(new DateTime($row["articleImageModified"]));
  410.  
  411.           $article->image $image;
  412.         }
  413.  
  414.         $section $sectionsassoc["$sectionID"];
  415.         $articles $section->articles;
  416.         $exists FALSE;
  417.  
  418.         foreach ($articles as $a{
  419.           if ($a->ID == $article->ID{
  420.             $exists TRUE;
  421.           }
  422.         }
  423.  
  424.         if ($exists == FALSE{
  425.           $articles[$article;
  426.           $section->articles $articles;
  427.         }
  428.       }
  429.     }
  430.  
  431.     if ($flatArticleList{
  432.       $articles array();
  433.  
  434.       foreach ($articlesassoc as $article{
  435.         $articles[$article;
  436.       }
  437.  
  438.       $website->articles $articles;
  439.     }
  440.  
  441.     $authorsassoc array();
  442.  
  443.     reset ($rows);
  444.  
  445.     foreach ($rows as $row{
  446.       $authorID $row["authorID"];
  447.       $articleID $row["articleID"];
  448.  
  449.       if ($authorID && $articleID{
  450.         $author new OnpubAuthor();
  451.  
  452.         $author->ID $authorID;
  453.         $author->imageID $row["authorImageID"];
  454.         $author->givenNames $row["givenNames"];
  455.         $author->familyName $row["familyName"];
  456.         $author->displayAs $row["displayAs"];
  457.         $author->setCreated(new DateTime($row["authorCreated"]));
  458.         $author->setModified(new DateTime($row["authorModified"]));
  459.  
  460.         if (isset($authorsassoc["$authorID"])) {
  461.           $author $authorsassoc["$authorID"];
  462.         }
  463.         else {
  464.           $authorsassoc["$authorID"$author;
  465.         }
  466.  
  467.         if ($row["authorImageID"]{
  468.           $image new OnpubImage();
  469.  
  470.           $image->ID $row["authorImageID"];
  471.           $image->websiteID $row["authorImageWebsiteID"];
  472.           $image->fileName $row["authorImageFileName"];
  473.           $image->description $row["authorImageDescription"];
  474.           $image->setCreated(new DateTime($row["authorImageCreated"]));
  475.           $image->setModified(new DateTime($row["authorImageModified"]));
  476.  
  477.           $author->image $image;
  478.         }
  479.  
  480.         $article $articlesassoc["$articleID"];
  481.         $authors $article->authors;
  482.         $exists FALSE;
  483.  
  484.         foreach ($authors as $a{
  485.           if ($a->ID == $author->ID{
  486.             $exists TRUE;
  487.           }
  488.         }
  489.  
  490.         if ($exists == FALSE{
  491.           $authors[$author;
  492.           $article->authors $authors;
  493.         }
  494.       }
  495.     }
  496.  
  497.     $result->closeCursor();
  498.     return $website;
  499.   }
  500.  
  501.   private function getQuery($IDOnpubQueryOptions $queryOptions NULL)
  502.   {
  503.     if ($queryOptions === NULL)
  504.       $queryOptions new OnpubQueryOptions();
  505.  
  506.     if ($queryOptions->includeArticles{
  507.       if ($queryOptions->orderBy{
  508.         $orderBy $queryOptions->orderBy;
  509.  
  510.         if ($queryOptions->order{
  511.           $order $queryOptions->order;
  512.           $orderBy "articles.$orderBy $order";
  513.         }
  514.         else {
  515.           $orderBy "articles.$orderBy ASC";
  516.         }
  517.       }
  518.       else {
  519.         if ($queryOptions->order{
  520.           $order $queryOptions->order;
  521.           $orderBy "wsmaps.ID ASC, samaps.ID $order";
  522.         }
  523.         else {
  524.           $orderBy "wsmaps.ID ASC, samaps.ID ASC";
  525.         }
  526.       }
  527.     }
  528.     else {
  529.       if ($queryOptions->orderBy{
  530.         $orderBy $queryOptions->orderBy;
  531.  
  532.         if ($queryOptions->order{
  533.           $order $queryOptions->order;
  534.           $orderBy "wsmaps.$orderBy $order";
  535.         }
  536.         else {
  537.           $orderBy "wsmaps.$orderBy ASC";
  538.         }
  539.       }
  540.       else {
  541.         if ($queryOptions->order{
  542.           $order $queryOptions->order;
  543.           $orderBy "wsmaps.ID $order";
  544.         }
  545.         else {
  546.           $orderBy "wsmaps.ID ASC";
  547.         }
  548.       }
  549.     }
  550.  
  551.     $where "WHERE websites.ID = $ID";
  552.  
  553.     if ($queryOptions->dateLimit && $queryOptions->includeArticles{
  554.       $dateLimit $queryOptions->dateLimit->format('Y-m-d H:i:s');
  555.       $where .= " AND articles.created <= '$dateLimit'";
  556.     }
  557.  
  558.     if ($queryOptions->dateAfter && !$queryOptions->dateLimit && $queryOptions->includeArticles{
  559.       $dateAfter $queryOptions->dateAfter->format('Y-m-d H:i:s');
  560.       $where .= " AND articles.created >= '$dateAfter'";
  561.     }
  562.  
  563.     if ($queryOptions->includeContent{
  564.       $articleColumns "articles.ID AS articleID, articles.imageID AS " .
  565.                         "articleImageID, title, content, articles.url AS " .
  566.                         "articleURL, articles.created AS articleCreated, " .
  567.                         "articles.modified AS articleModified";
  568.     }
  569.     else {
  570.       $articleColumns "articles.ID AS articleID, articles.imageID AS " .
  571.                         "articleImageID, title, articles.url AS articleURL, " .
  572.                         "articles.created AS articleCreated, " .
  573.                         "articles.modified AS articleModified";
  574.     }
  575.  
  576.     if ($queryOptions->includeSections{
  577.       if ($queryOptions->includeArticles{
  578.         return
  579.           "SELECT websites.ID, websites.imageID, websites.name, " .
  580.           "websites.url, websites.imagesURL, websites.imagesDirectory, " .
  581.           "websites.created, websites.modified, websiteimages.fileName, " .
  582.           "websiteimages.description, websiteimages.url AS websiteImageURL, " .
  583.           "websiteimages.created AS imageCreated, websiteimages.modified AS " .
  584.           "imageModified, sections.ID AS sectionID, sections.imageID AS " .
  585.           "sectionImageID, sections.websiteID AS sectionWebsiteID, " .
  586.           "sections.parentID AS sectionParentID, sections.name AS " .
  587.           "sectionName, sections.url AS sectionURL, sections.created AS sectionCreated, " .
  588.           "sections.modified AS sectionModified, sectionimages.websiteID AS " .
  589.           "sectionImageWebsiteID, sectionimages.fileName AS " .
  590.           "sectionImageFileName, sectionimages.description AS " .
  591.           "sectionImageDescription, sectionimages.url AS sectionImageURL, " .
  592.           "sectionimages.created AS sectionImageCreated, " .
  593.           "sectionimages.modified AS sectionImageModified, $articleColumns.
  594.           "articleimages.websiteID AS articleImageWebsiteID, " .
  595.           "articleimages.fileName AS articleImageFileName, " .
  596.           "articleimages.description AS articleImageDescription, " .
  597.           "articleimages.url AS articleImageURL, articleimages.created AS " .
  598.           "articleImageCreated, articleimages.modified AS " .
  599.           "articleImageModified, authors.ID AS authorID, authors.imageID AS " .
  600.           "authorImageID, authors.givenNames, authors.familyName, " .
  601.           "authors.displayAs, authors.created AS authorCreated, " .
  602.           "authors.modified AS authorModified, authorimages.websiteID AS " .
  603.           "authorImageWebsiteID, authorimages.fileName AS " .
  604.           "authorImageFileName, authorimages.description AS " .
  605.           "authorImageDescription, authorimages.url AS authorImageURL, " .
  606.           "authorimages.created AS authorImageCreated, " .
  607.           "authorimages.modified AS authorImageModified FROM OnpubWebsites " .
  608.           "AS websites LEFT JOIN OnpubImages AS websiteimages ON " .
  609.           "websites.imageID = websiteimages.ID LEFT JOIN OnpubWSMaps AS " .
  610.           "wsmaps ON websites.ID = wsmaps.websiteID LEFT JOIN OnpubSections " .
  611.           "AS sections ON wsmaps.sectionID = sections.ID LEFT JOIN " .
  612.           "OnpubImages AS sectionimages ON sections.imageID = " .
  613.           "sectionimages.ID LEFT JOIN OnpubSAMaps AS samaps ON " .
  614.           "sections.ID = samaps.sectionID LEFT JOIN OnpubArticles AS " .
  615.           "articles ON samaps.articleID = articles.ID LEFT JOIN OnpubImages " .
  616.           "AS articleimages ON articles.imageID = articleimages.ID " .
  617.           "LEFT JOIN OnpubAAMaps AS aamaps ON articles.ID = " .
  618.           "aamaps.articleID LEFT JOIN OnpubAuthors AS authors ON " .
  619.           "aamaps.authorID = authors.ID LEFT JOIN OnpubImages AS " .
  620.           "authorimages ON authors.imageID = authorimages.ID $where .
  621.           "ORDER BY $orderBy";
  622.       }
  623.       else {
  624.         return
  625.           "SELECT websites.ID, websites.imageID, websites.name, " .
  626.           "websites.url, websites.imagesURL, websites.imagesDirectory, " .
  627.           "websites.created, websites.modified, websiteimages.fileName, " .
  628.           "websiteimages.description, websiteimages.url AS websiteImageURL, " .
  629.           "websiteimages.created AS imageCreated, websiteimages.modified AS " .
  630.           "imageModified, sections.ID AS sectionID, sections.imageID AS " .
  631.           "sectionImageID, sections.websiteID AS sectionWebsiteID, " .
  632.           "sections.parentID AS sectionParentID, sections.name AS " .
  633.           "sectionName, sections.url AS sectionURL, sections.created AS sectionCreated, " .
  634.           "sections.modified AS sectionModified, sectionimages.websiteID " .
  635.           "AS sectionImageWebsiteID, sectionimages.fileName AS " .
  636.           "sectionImageFileName, sectionimages.description AS " .
  637.           "sectionImageDescription, sectionimages.url AS sectionImageURL, " .
  638.           "sectionimages.created AS sectionImageCreated, " .
  639.           "sectionimages.modified AS sectionImageModified FROM " .
  640.           "OnpubWebsites AS websites LEFT JOIN OnpubImages AS websiteimages " .
  641.           "ON websites.imageID = websiteimages.ID LEFT JOIN OnpubWSMaps AS " .
  642.           "wsmaps ON websites.ID = wsmaps.websiteID LEFT JOIN OnpubSections " .
  643.           "AS sections ON wsmaps.sectionID = sections.ID LEFT JOIN " .
  644.           "OnpubImages AS sectionimages ON sections.imageID = " .
  645.           "sectionimages.ID $where ORDER BY $orderBy";
  646.       }
  647.     }
  648.     else {
  649.       return "SELECT websites.ID, imageID, name, websites.url, imagesURL, " .
  650.              "imagesDirectory, websites.created, websites.modified, " .
  651.              "websiteimages.fileName, websiteimages.description, " .
  652.              "websiteimages.url AS websiteImageURL, websiteimages.created " .
  653.              "AS imageCreated, websiteimages.modified AS imageModified " .
  654.              "FROM OnpubWebsites AS websites LEFT JOIN OnpubImages AS " .
  655.              "websiteimages ON websites.imageID = websiteimages.ID " .
  656.              "WHERE websites.ID = $ID";
  657.     }
  658.   }
  659.  
  660.   /**
  661.    * @param OnpubWebsite $website Website whose ID you want to get.
  662.    * @return int The ID of the website. NULL if the website does not exist in the database.
  663.    */
  664.   public function getID(OnpubWebsite $website)
  665.   {
  666.     $stmt $this->pdo->prepare("SELECT ID FROM OnpubWebsites WHERE name = :name");
  667.     OnpubDatabase::verifyPrepare($this->pdo$stmtFALSE);
  668.  
  669.     $name OnpubDatabase::utf8Decode(trim($website->name));
  670.  
  671.     $stmt->bindParam(':name'$name);
  672.     $result $stmt->execute();
  673.     OnpubDatabase::verifyExecute($this->pdo$resultFALSE$stmt->errorInfo());
  674.  
  675.     if (($row $stmt->fetch(PDO::FETCH_ASSOC))) {
  676.       return $row["ID"];
  677.     }
  678.  
  679.     return NULL;
  680.   }
  681.  
  682.   /**
  683.    * @param mixed $websites A single {@link OnpubWebsite} object or an array of {@link OnpubWebsite} objects (to insert multiple websites at a time).
  684.    * @return mixed The ID(s) of the new website(s). An int will be returned if a single website was inserted. An array of ints will be returned if multiple websites were inserted.
  685.    * @throws PDOException if there's a database error.
  686.    */
  687.   public function insert($websites)
  688.   {
  689.     $oimages new OnpubImages($this->pdoFALSE);
  690.     $IDs array();
  691.     $isArray TRUE;
  692.  
  693.     if (!is_array($websites)) {
  694.       $websites array ($websites);
  695.       $isArray FALSE;
  696.     }
  697.  
  698.     if ($this->enableTransactions{
  699.       $status $this->pdo->beginTransaction();
  700.       OnpubDatabase::verifyTransaction($this->pdo$status);
  701.     }
  702.  
  703.     $stmt $this->pdo->prepare("INSERT INTO OnpubWebsites (ID, imageID, name, url, imagesURL, imagesDirectory, created, modified) VALUES (:ID, :imageID, :name, :url, :imagesURL, :imagesDirectory, :created, :modified)");
  704.     OnpubDatabase::verifyPrepare($this->pdo$stmt$this->enableTransactions);
  705.  
  706.     foreach ($websites as $website{
  707.       if ($website->image{
  708.         try {
  709.           $imageID $oimages->insert($website->image);
  710.           $website->imageID $imageID;
  711.         }
  712.         catch (PDOException $e{
  713.           if ($this->enableTransactions)
  714.             $this->pdo->rollBack();
  715.  
  716.           throw $e;
  717.         }
  718.       }
  719.  
  720.       try {
  721.         $ID $this->getID($website);
  722.       }
  723.       catch (PDOException $e{
  724.         if ($this->enableTransactions)
  725.           $this->pdo->rollBack();
  726.  
  727.         throw $e;
  728.       }
  729.  
  730.       if ($ID{
  731.         $IDs[$ID;
  732.         $website->ID $ID;
  733.       }
  734.       else {
  735.         $ID $website->ID;
  736.         $imageID $website->imageID;
  737.         $name OnpubDatabase::utf8Decode(trim($website->name));
  738.         $url OnpubDatabase::utf8Decode(trim($website->url));
  739.         $imagesURL OnpubDatabase::utf8Decode(trim($website->imagesURL));
  740.         $imagesDirectory OnpubDatabase::utf8Decode(trim($website->imagesDirectory));
  741.         $created $website->getCreated()->format('Y-m-d H:i:s');
  742.         $modified $website->getModified()->format('Y-m-d H:i:s');
  743.  
  744.         $stmt->bindParam(':ID'$ID);
  745.         $stmt->bindParam(':imageID'$imageID);
  746.         $stmt->bindParam(':name'$name);
  747.         $stmt->bindParam(':url'$url);
  748.         $stmt->bindParam(':imagesURL'$imagesURL);
  749.         $stmt->bindParam(':imagesDirectory'$imagesDirectory);
  750.         $stmt->bindParam(':created'$created);
  751.         $stmt->bindParam(':modified'$modified);
  752.         $result $stmt->execute();
  753.         OnpubDatabase::verifyExecute($this->pdo$result$this->enableTransactions$stmt->errorInfo());
  754.  
  755.         $IDs[$this->pdo->lastInsertId();
  756.         $website->ID $this->pdo->lastInsertId();
  757.       }
  758.     }
  759.  
  760.     if ($this->enableTransactions{
  761.       $status $this->pdo->commit();
  762.       OnpubDatabase::verifyTransaction($this->pdo$status);
  763.     }
  764.  
  765.     if ($isArray{
  766.       return $IDs;
  767.     }
  768.     else {
  769.       return end($IDs);
  770.     }
  771.   }
  772.  
  773.   /**
  774.    * @param OnpubWebsite $website The website to be updated.
  775.    * @return int 1 if the website was updated. 0 if the website does not exist in the database.
  776.    */
  777.   public function update(OnpubWebsite $website)
  778.   {
  779.     $owsmaps new OnpubWSMaps($this->pdoFALSE);
  780.     $now new DateTime();
  781.  
  782.     if ($this->enableTransactions{
  783.       $status $this->pdo->beginTransaction();
  784.       OnpubDatabase::verifyTransaction($this->pdo$status);
  785.     }
  786.  
  787.     $stmt $this->pdo->prepare("UPDATE OnpubWebsites SET imageID = :imageID, name = :name, url = :url, imagesURL = :imagesURL, imagesDirectory = :imagesDirectory, modified = :modified WHERE ID = :ID");
  788.     OnpubDatabase::verifyPrepare($this->pdo$stmt$this->enableTransactions);
  789.  
  790.     $ID $website->ID;
  791.     $imageID $website->imageID;
  792.     $name OnpubDatabase::utf8Decode(trim($website->name));
  793.     $url OnpubDatabase::utf8Decode(trim($website->url));
  794.     $imagesURL OnpubDatabase::utf8Decode(trim($website->imagesURL));
  795.     $imagesDirectory OnpubDatabase::utf8Decode(trim($website->imagesDirectory));
  796.     $modified $now->format('Y-m-d H:i:s');
  797.  
  798.     $stmt->bindParam(':ID'$ID);
  799.     $stmt->bindParam(':imageID'$imageID);
  800.     $stmt->bindParam(':name'$name);
  801.     $stmt->bindParam(':url'$url);
  802.     $stmt->bindParam(':imagesURL'$imagesURL);
  803.     $stmt->bindParam(':imagesDirectory'$imagesDirectory);
  804.     $stmt->bindParam(':modified'$modified);
  805.     $result $stmt->execute();
  806.     OnpubDatabase::verifyExecute($this->pdo$result$this->enableTransactions$stmt->errorInfo());
  807.  
  808.     try {
  809.       $owsmaps->delete($website->IDNULL);
  810.     }
  811.     catch (PDOException $e{
  812.       if ($this->enableTransactions)
  813.         $this->pdo->rollBack();
  814.  
  815.       throw $e;
  816.     }
  817.  
  818.     $sections $website->sections;
  819.     $wsmaps array();
  820.  
  821.     foreach ($sections as $section{
  822.       $wsmap new OnpubWSMap();
  823.  
  824.       $wsmap->websiteID $section->websiteID;
  825.       $wsmap->sectionID $section->ID;
  826.  
  827.       $wsmaps[$wsmap;
  828.     }
  829.  
  830.     try {
  831.       $owsmaps->insert($wsmaps);
  832.     }
  833.     catch (PDOException $e{
  834.       if ($this->enableTransactions)
  835.         $this->pdo->rollBack();
  836.  
  837.       throw $e;
  838.     }
  839.  
  840.     if ($this->enableTransactions{
  841.       $status $this->pdo->commit();
  842.       OnpubDatabase::verifyTransaction($this->pdo$status);
  843.     }
  844.  
  845.     return $stmt->rowCount();
  846.   }
  847. }
  848. ?>

Documentation generated on Fri, 08 Feb 2013 04:02:26 -0500 by phpDocumentor 1.4.4