From 3def58ee2b1d867fc8fc4060c1312cb22d925414 Mon Sep 17 00:00:00 2001 From: Paul Baranowski Date: Wed, 14 Dec 2011 17:59:52 -0500 Subject: [PATCH 01/29] --- --- utils/airtime-user | 34 ---------- utils/airtime-user.php | 148 ----------------------------------------- 2 files changed, 182 deletions(-) delete mode 100755 utils/airtime-user delete mode 100644 utils/airtime-user.php diff --git a/utils/airtime-user b/utils/airtime-user deleted file mode 100755 index b6a30ac17..000000000 --- a/utils/airtime-user +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash -#------------------------------------------------------------------------------- -# Copyright (c) 2010 Sourcefabric O.P.S. -# -# This file is part of the Airtime project. -# http://airtime.sourcefabric.org/ -# -# Airtime is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# Airtime is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Airtime; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -#------------------------------------------------------------------------------- -#------------------------------------------------------------------------------- -# This script creates users in Airtime. -# -# Absolute path to this script -SCRIPT=`readlink -f $0` -# Absolute directory this script is in -SCRIPTPATH=`dirname $SCRIPT` - -invokePwd=$PWD -cd $SCRIPTPATH - -php -q airtime-user.php "$@" || exit 1 diff --git a/utils/airtime-user.php b/utils/airtime-user.php deleted file mode 100644 index 2ac5d3bb5..000000000 --- a/utils/airtime-user.php +++ /dev/null @@ -1,148 +0,0 @@ -\n"; - echo " Add the user or update user information.\n"; - echo " --delete \n"; - echo " Remove the user.\n"; - echo "\n"; -} - -/** - * Ensures that the user is running this PHP script with root - * permissions. If not running with root permissions, causes the - * script to exit. - */ -function exitIfNotRoot() -{ - // Need to check that we are superuser before running this. - if(exec("whoami") != "root"){ - echo "Must be root user.\n"; - exit(1); - } -} - -if (count($argv) != 3) { - printUsage(); - exit; -} - - -$action = null; -switch ($argv[1]) { - case '--addupdate': - $action = "addupdate"; - break; - case '--delete': - $action = "delete"; - break; -} - -$username = $argv[2]; - -if (is_null($action)) { - printUsage(); - exit; -} - -PEAR::setErrorHandling(PEAR_ERROR_RETURN); -$CC_DBC = DB::connect($CC_CONFIG['dsn'], TRUE); -if (PEAR::isError($CC_DBC)) { - die($CC_DBC->getMessage()); -} -$CC_DBC->setFetchMode(DB_FETCHMODE_ASSOC); - - -// Check if the user exists -$id = Application_Model_User::GetUserID($username); - -if ($action == "addupdate") { - - if ($id < 0) { - echo "Creating user\n"; - $user = new Application_Model_User(""); - $user->setLogin($username); - } else { - echo "Updating user\n"; - $user = new Application_Model_User($id); - } - - do{ - echo "Enter password (min 6 characters): "; - $line = trim(fgets(fopen("php://stdin","r"))); - }while(strlen($line) < 6); - $user->setPassword($line); - - do{ - echo "Enter first name: "; - $line = trim(fgets(fopen("php://stdin","r"))); - }while(strlen($line) < 1); - $user->setFirstName($line); - - do{ - echo "Enter last name: "; - $line = trim(fgets(fopen("php://stdin","r"))); - }while(strlen($line) < 1); - $user->setLastName($line); - - do{ - echo "Enter user type [(A)dmin|(P)rogram Manager|(D)J|(G)uest]: "; - $line = trim(fgets(fopen("php://stdin","r"))); - } while($line != "A" && $line != "P" && $line != "D" && $line != "G"); - - $types = array("A"=>"A", "P"=>"P", "D"=>"H", "G"=>"G",); - $user->setType($types[$line]); - $user->save(); - -} elseif ($action == "delete") { - if ($id < 0){ - echo "Username not found!\n"; - exit; - } else { - echo "Deleting user\n"; - $user = new Application_Model_User($id); - $user->delete(); - } -} - -function GetAirtimeConf() -{ - $ini = parse_ini_file("/etc/airtime/airtime.conf", true); - - if ($ini === false){ - echo "Error reading /etc/airtime/airtime.conf.".PHP_EOL; - exit; - } - - return $ini; -} From 52b0e3c5f9b1b6e5f15799f3e9ec154e094b5c83 Mon Sep 17 00:00:00 2001 From: Naomi Aro Date: Wed, 21 Dec 2011 16:01:29 -0800 Subject: [PATCH 02/29] CC-3110 : Password reset basic functionality password reset using sendmail --- airtime_mvc/application/Bootstrap.php | 14 + airtime_mvc/application/configs/ACL.php | 4 +- .../configs/classmap-airtime-conf.php | 7 + .../controllers/AuthController.php | 90 ++ .../controllers/LoginController.php | 21 +- .../controllers/plugins/Acl_plugin.php | 4 +- .../application/forms/PasswordChange.php | 35 + .../application/forms/PasswordRestore.php | 23 + airtime_mvc/application/models/Auth.php | 98 ++ airtime_mvc/application/models/Email.php | 36 + .../models/airtime/CcSubjsToken.php | 18 + .../models/airtime/CcSubjsTokenPeer.php | 18 + .../models/airtime/CcSubjsTokenQuery.php | 18 + .../models/airtime/map/CcSubjsTableMap.php | 1 + .../airtime/map/CcSubjsTokenTableMap.php | 57 + .../models/airtime/om/BaseCcSubjs.php | 144 +++ .../models/airtime/om/BaseCcSubjsPeer.php | 3 + .../models/airtime/om/BaseCcSubjsQuery.php | 68 ++ .../models/airtime/om/BaseCcSubjsToken.php | 1005 +++++++++++++++++ .../airtime/om/BaseCcSubjsTokenPeer.php | 988 ++++++++++++++++ .../airtime/om/BaseCcSubjsTokenQuery.php | 355 ++++++ .../views/scripts/auth/password-change.phtml | 1 + .../scripts/auth/password-restore-after.phtml | 1 + .../views/scripts/auth/password-restore.phtml | 1 + airtime_mvc/build/schema.xml | 13 + airtime_mvc/build/sql/schema.sql | 24 + 26 files changed, 3024 insertions(+), 23 deletions(-) create mode 100644 airtime_mvc/application/controllers/AuthController.php create mode 100644 airtime_mvc/application/forms/PasswordChange.php create mode 100644 airtime_mvc/application/forms/PasswordRestore.php create mode 100644 airtime_mvc/application/models/Auth.php create mode 100644 airtime_mvc/application/models/Email.php create mode 100644 airtime_mvc/application/models/airtime/CcSubjsToken.php create mode 100644 airtime_mvc/application/models/airtime/CcSubjsTokenPeer.php create mode 100644 airtime_mvc/application/models/airtime/CcSubjsTokenQuery.php create mode 100644 airtime_mvc/application/models/airtime/map/CcSubjsTokenTableMap.php create mode 100644 airtime_mvc/application/models/airtime/om/BaseCcSubjsToken.php create mode 100644 airtime_mvc/application/models/airtime/om/BaseCcSubjsTokenPeer.php create mode 100644 airtime_mvc/application/models/airtime/om/BaseCcSubjsTokenQuery.php create mode 100644 airtime_mvc/application/views/scripts/auth/password-change.phtml create mode 100644 airtime_mvc/application/views/scripts/auth/password-restore-after.phtml create mode 100644 airtime_mvc/application/views/scripts/auth/password-restore.phtml diff --git a/airtime_mvc/application/Bootstrap.php b/airtime_mvc/application/Bootstrap.php index 6cee243da..9af163812 100644 --- a/airtime_mvc/application/Bootstrap.php +++ b/airtime_mvc/application/Bootstrap.php @@ -119,5 +119,19 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap $frontController->registerPlugin($debug); } } + + protected function _initRouter() + { + $front = Zend_Controller_Front::getInstance(); + $router = $front->getRouter(); + + $router->addRoute( + 'password-change', + new Zend_Controller_Router_Route('password-change/:user_id/:token', array( + 'module' => 'default', + 'controller' => 'auth', + 'action' => 'password-change', + ))); + } } diff --git a/airtime_mvc/application/configs/ACL.php b/airtime_mvc/application/configs/ACL.php index 72187e4e9..6f0581296 100644 --- a/airtime_mvc/application/configs/ACL.php +++ b/airtime_mvc/application/configs/ACL.php @@ -23,7 +23,8 @@ $ccAcl->add(new Zend_Acl_Resource('library')) ->add(new Zend_Acl_Resource('search')) ->add(new Zend_Acl_Resource('dashboard')) ->add(new Zend_Acl_Resource('preference')) - ->add(new Zend_Acl_Resource('recorder')); + ->add(new Zend_Acl_Resource('recorder')) + ->add(new Zend_Acl_Resource('auth')); /** Creating permissions */ $ccAcl->allow('G', 'index') @@ -31,6 +32,7 @@ $ccAcl->allow('G', 'index') ->allow('G', 'error') ->allow('G', 'nowplaying') ->allow('G', 'api') + ->allow('G', 'auth') //->allow('G', 'plupload', array('upload-recorded')) ->allow('G', 'recorder') ->allow('G', 'schedule') diff --git a/airtime_mvc/application/configs/classmap-airtime-conf.php b/airtime_mvc/application/configs/classmap-airtime-conf.php index ef3b99a4b..f426d8816 100644 --- a/airtime_mvc/application/configs/classmap-airtime-conf.php +++ b/airtime_mvc/application/configs/classmap-airtime-conf.php @@ -113,6 +113,13 @@ return array ( 'BaseCcSubjsPeer' => 'airtime/om/BaseCcSubjsPeer.php', 'BaseCcSubjs' => 'airtime/om/BaseCcSubjs.php', 'BaseCcSubjsQuery' => 'airtime/om/BaseCcSubjsQuery.php', + 'CcSubjsTokenTableMap' => 'airtime/map/CcSubjsTokenTableMap.php', + 'CcSubjsTokenPeer' => 'airtime/CcSubjsTokenPeer.php', + 'CcSubjsToken' => 'airtime/CcSubjsToken.php', + 'CcSubjsTokenQuery' => 'airtime/CcSubjsTokenQuery.php', + 'BaseCcSubjsTokenPeer' => 'airtime/om/BaseCcSubjsTokenPeer.php', + 'BaseCcSubjsToken' => 'airtime/om/BaseCcSubjsToken.php', + 'BaseCcSubjsTokenQuery' => 'airtime/om/BaseCcSubjsTokenQuery.php', 'CcCountryTableMap' => 'airtime/map/CcCountryTableMap.php', 'CcCountryPeer' => 'airtime/CcCountryPeer.php', 'CcCountry' => 'airtime/CcCountry.php', diff --git a/airtime_mvc/application/controllers/AuthController.php b/airtime_mvc/application/controllers/AuthController.php new file mode 100644 index 000000000..cd11f9c80 --- /dev/null +++ b/airtime_mvc/application/controllers/AuthController.php @@ -0,0 +1,90 @@ +_helper->layout->setLayout('bare'); + + $form = new Application_Form_PasswordRestore(); + + $request = $this->getRequest(); + if ($request->isPost() && $form->isValid($request->getPost())) { + $user = CcSubjsQuery::create() + ->filterByDbEmail($form->email->getValue()) + ->findOne(); + + if (!empty($user)) { + $auth = new Application_Model_Auth(); + + $auth->sendPasswordRestoreLink($user, $this->view); + //$this->_helper->redirector('password-restore-after', 'auth'); + } + else { + $form->email->addError($this->view->translate("Given email not found.")); + } + } + + $this->view->form = $form; + } + + public function passwordRestoreAfterAction() + { + //uses separate layout without a navigation. + $this->_helper->layout->setLayout('bare'); + } + + public function passwordChangeAction() + { + //uses separate layout without a navigation. + $this->_helper->layout->setLayout('bare'); + + $request = $this->getRequest(); + $token = $request->getParam("token", false); + $user_id = $request->getParam("user_id", 0); + + $form = new Application_Form_PasswordChange(); + $auth = new Application_Model_Auth(); + $user = CcSubjsQuery::create()->findPK($user_id); + + //check validity of token + if (!$auth->checkToken($user_id, $token, 'password.restore')) { + echo "token not valid"; + //$this->_helper->redirector('index', 'login'); + } + + if ($request->isPost() && $form->isValid($request->getPost())) { + + $user->setDbPass(md5($form->password->getValue())); + $user->save(); + + $auth->invalidateTokens($user, 'password.restore'); + + $zend_auth = Zend_Auth::getInstance(); + $zend_auth->clearIdentity(); + + $authAdapter = Application_Model_Auth::getAuthAdapter(); + $authAdapter->setIdentity($user->getDbLogin()) + ->setCredential($form->password->getValue()); + + $result = $zend_auth->authenticate($authAdapter); + + //all info about this user from the login table omit only the password + $userInfo = $authAdapter->getResultRowObject(null, 'password'); + + //the default storage is a session with namespace Zend_Auth + $authStorage = $zend_auth->getStorage(); + $authStorage->write($userInfo); + + $this->_helper->redirector('index', 'nowplaying'); + } + + $this->view->form = $form; + } +} \ No newline at end of file diff --git a/airtime_mvc/application/controllers/LoginController.php b/airtime_mvc/application/controllers/LoginController.php index 87ddc30a2..b3eddaeee 100644 --- a/airtime_mvc/application/controllers/LoginController.php +++ b/airtime_mvc/application/controllers/LoginController.php @@ -43,7 +43,7 @@ class LoginController extends Zend_Controller_Action if(Application_Model_Subjects::getLoginAttempts($username) >= 3 && $form->getElement('captcha') == NULL){ $form->addRecaptcha(); }else{ - $authAdapter = $this->getAuthAdapter(); + $authAdapter = Application_Model_Auth::getAuthAdapter(); //pass to the adapter the submitted username and password $authAdapter->setIdentity($username) @@ -92,25 +92,6 @@ class LoginController extends Zend_Controller_Action Zend_Auth::getInstance()->clearIdentity(); $this->_redirect('login/index'); } - - /** - * Gets the adapter for authentication against a database table - * - * @return object - */ - protected function getAuthAdapter() - { - $dbAdapter = Zend_Db_Table::getDefaultAdapter(); - $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter); - - $authAdapter->setTableName('cc_subjs') - ->setIdentityColumn('login') - ->setCredentialColumn('pass') - ->setCredentialTreatment('MD5(?)'); - - return $authAdapter; - } - } diff --git a/airtime_mvc/application/controllers/plugins/Acl_plugin.php b/airtime_mvc/application/controllers/plugins/Acl_plugin.php index b380478e7..0296362ed 100644 --- a/airtime_mvc/application/controllers/plugins/Acl_plugin.php +++ b/airtime_mvc/application/controllers/plugins/Acl_plugin.php @@ -110,8 +110,8 @@ class Zend_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract { $controller = strtolower($request->getControllerName()); - if ($controller == 'api'){ - + if (in_array($controller, array("api", "auth"))){ + $this->setRoleName("G"); } else if (!Zend_Auth::getInstance()->hasIdentity()){ diff --git a/airtime_mvc/application/forms/PasswordChange.php b/airtime_mvc/application/forms/PasswordChange.php new file mode 100644 index 000000000..7b937c396 --- /dev/null +++ b/airtime_mvc/application/forms/PasswordChange.php @@ -0,0 +1,35 @@ +addElement('password', 'password', array( + 'label' => 'Password', + 'required' => true, + 'filters' => array('stringTrim'), + 'validators' => array( + array('stringLength', false, array(6, 80)), + ), + )); + + $this->addElement('password', 'password_confirm', array( + 'label' => 'Password Confirmation', + 'required' => true, + 'filters' => array('stringTrim'), + 'validators' => array( + new Zend_Validate_Callback(function ($value, $context) { + return $value == $context['password']; + }), + ), + 'errorMessages' => array("Password confirmation does not match your password."), + )); + + $this->addElement('submit', 'submit', array( + 'label' => 'Set password', + 'ignore' => true, + )); + } +} diff --git a/airtime_mvc/application/forms/PasswordRestore.php b/airtime_mvc/application/forms/PasswordRestore.php new file mode 100644 index 000000000..410fc0565 --- /dev/null +++ b/airtime_mvc/application/forms/PasswordRestore.php @@ -0,0 +1,23 @@ +addElement('text', 'email', array( + 'label' => 'E-mail', + 'required' => true, + 'filters' => array( + 'stringTrim', + ), + )); + + $this->addElement('submit', 'submit', array( + 'label' => 'Restore password', + 'ignore' => true, + 'class' => 'ui-button ui-state-default' + )); + } +} \ No newline at end of file diff --git a/airtime_mvc/application/models/Auth.php b/airtime_mvc/application/models/Auth.php new file mode 100644 index 000000000..fa33f8555 --- /dev/null +++ b/airtime_mvc/application/models/Auth.php @@ -0,0 +1,98 @@ +setDbUserId($user_id); + $info->setDbAction($action); + $info->setDbToken(sha1($token + $salt)); + $info->setDbCreated(gmdate('Y-m-d H:i:s')); + $info->save(); + + return $token; + } + + public function sendPasswordRestoreLink($user, $view) + { + $token = $this->generateToken('password.restore', $user->getDbId()); + + $e_link = $view->url(array('user_id' => $user->getDbId(), + 'token' => $token + ), + 'password-change'); + + $message = "Click this link: {$e_link}"; + Application_Model_Email::send('Airtime Password Reset', $message, $user->getDbEmail()); + } + + public function invalidateTokens($user, $action) + { + CcSubjsTokenQuery::create() + ->filterByDbAction($action) + ->filterByDbUserId($user->getDbId()) + ->delete(); + } + + public function checkToken($user_id, $token, $action) + { + $salt = "pro"; + + $token_info = CcSubjsTokenQuery::create() + ->filterByDbAction($action) + ->filterByDbUserId($user_id) + ->filterByDbToken(sha1($token + $salt)) + ->findOne(); + + if (empty($token_info)) { + return false; + } + + $now = new DateTime(); + $token_life = new DateInterval(self::TOKEN_LIFETIME); + $token_created = new DateTime($token_info->getDbCreated(), new DateTimeZone("UTC")); + + return $now->sub($token_life)->getTimestamp() < $token_created->getTimestamp(); + } + + /** + * Gets the adapter for authentication against a database table + * + * @return object + */ + public static function getAuthAdapter() + { + $dbAdapter = Zend_Db_Table::getDefaultAdapter(); + $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter); + + $authAdapter->setTableName('cc_subjs') + ->setIdentityColumn('login') + ->setCredentialColumn('pass') + ->setCredentialTreatment('MD5(?)'); + + return $authAdapter; + } + + /** + * Get random string + * + * @param int $length + * @param string $allowed_chars + * @return string + */ + final public function generateRandomString($length = 12, $allowed_chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') + { + $string = ''; + for ($i = 0; $i < $length; $i++) { + $string .= $allowed_chars[mt_rand(0, strlen($allowed_chars) - 1)]; + } + + return $string; + } +} \ No newline at end of file diff --git a/airtime_mvc/application/models/Email.php b/airtime_mvc/application/models/Email.php new file mode 100644 index 000000000..d8d3b6746 --- /dev/null +++ b/airtime_mvc/application/models/Email.php @@ -0,0 +1,36 @@ + 'login', + 'username' => 'user@gmail.com', + 'password' => 'password', + 'ssl' => 'ssl', + 'port' => 465 + ); + $mailTransport = new Zend_Mail_Transport_Smtp('smtp.gmail.com',$configMail); + */ + + $mail = new Zend_Mail('utf-8'); + $mail->setSubject($subject); + $mail->setBodyText($message); + $mail->setFrom(isset($from) ? $from : 'naomiaro@gmail.com'); + + foreach ((array) $tos as $to) { + $mail->addTo($to); + } + + $mail->send(); + } +} \ No newline at end of file diff --git a/airtime_mvc/application/models/airtime/CcSubjsToken.php b/airtime_mvc/application/models/airtime/CcSubjsToken.php new file mode 100644 index 000000000..be9cff809 --- /dev/null +++ b/airtime_mvc/application/models/airtime/CcSubjsToken.php @@ -0,0 +1,18 @@ +addRelation('CcPlaylist', 'CcPlaylist', RelationMap::ONE_TO_MANY, array('id' => 'editedby', ), null, null); $this->addRelation('CcPref', 'CcPref', RelationMap::ONE_TO_MANY, array('id' => 'subjid', ), 'CASCADE', null); $this->addRelation('CcSess', 'CcSess', RelationMap::ONE_TO_MANY, array('id' => 'userid', ), 'CASCADE', null); + $this->addRelation('CcSubjsToken', 'CcSubjsToken', RelationMap::ONE_TO_MANY, array('id' => 'user_id', ), 'CASCADE', null); } // buildRelations() } // CcSubjsTableMap diff --git a/airtime_mvc/application/models/airtime/map/CcSubjsTokenTableMap.php b/airtime_mvc/application/models/airtime/map/CcSubjsTokenTableMap.php new file mode 100644 index 000000000..2aeb7ad64 --- /dev/null +++ b/airtime_mvc/application/models/airtime/map/CcSubjsTokenTableMap.php @@ -0,0 +1,57 @@ +setName('cc_subjs_token'); + $this->setPhpName('CcSubjsToken'); + $this->setClassname('CcSubjsToken'); + $this->setPackage('airtime'); + $this->setUseIdGenerator(true); + $this->setPrimaryKeyMethodInfo('cc_subjs_token_id_seq'); + // columns + $this->addPrimaryKey('ID', 'DbId', 'INTEGER', true, null, null); + $this->addForeignKey('USER_ID', 'DbUserId', 'INTEGER', 'cc_subjs', 'ID', true, null, null); + $this->addColumn('ACTION', 'DbAction', 'VARCHAR', true, 255, null); + $this->addColumn('TOKEN', 'DbToken', 'VARCHAR', true, 40, null); + $this->addColumn('CREATED', 'DbCreated', 'TIMESTAMP', true, null, null); + // validators + } // initialize() + + /** + * Build the RelationMap objects for this table relationships + */ + public function buildRelations() + { + $this->addRelation('CcSubjs', 'CcSubjs', RelationMap::MANY_TO_ONE, array('user_id' => 'id', ), 'CASCADE', null); + } // buildRelations() + +} // CcSubjsTokenTableMap diff --git a/airtime_mvc/application/models/airtime/om/BaseCcSubjs.php b/airtime_mvc/application/models/airtime/om/BaseCcSubjs.php index 54a0468ce..cb32498be 100644 --- a/airtime_mvc/application/models/airtime/om/BaseCcSubjs.php +++ b/airtime_mvc/application/models/airtime/om/BaseCcSubjs.php @@ -137,6 +137,11 @@ abstract class BaseCcSubjs extends BaseObject implements Persistent */ protected $collCcSesss; + /** + * @var array CcSubjsToken[] Collection to store aggregation of CcSubjsToken objects. + */ + protected $collCcSubjsTokens; + /** * Flag to prevent endless save loop, if this object is referenced * by another object which falls in this transaction. @@ -793,6 +798,8 @@ abstract class BaseCcSubjs extends BaseObject implements Persistent $this->collCcSesss = null; + $this->collCcSubjsTokens = null; + } // if (deep) } @@ -982,6 +989,14 @@ abstract class BaseCcSubjs extends BaseObject implements Persistent } } + if ($this->collCcSubjsTokens !== null) { + foreach ($this->collCcSubjsTokens as $referrerFK) { + if (!$referrerFK->isDeleted()) { + $affectedRows += $referrerFK->save($con); + } + } + } + $this->alreadyInSave = false; } @@ -1109,6 +1124,14 @@ abstract class BaseCcSubjs extends BaseObject implements Persistent } } + if ($this->collCcSubjsTokens !== null) { + foreach ($this->collCcSubjsTokens as $referrerFK) { + if (!$referrerFK->validate($columns)) { + $failureMap = array_merge($failureMap, $referrerFK->getValidationFailures()); + } + } + } + $this->alreadyInValidation = false; } @@ -1459,6 +1482,12 @@ abstract class BaseCcSubjs extends BaseObject implements Persistent } } + foreach ($this->getCcSubjsTokens() as $relObj) { + if ($relObj !== $this) { // ensure that we don't try to copy a reference to ourselves + $copyObj->addCcSubjsToken($relObj->copy($deepCopy)); + } + } + } // if ($deepCopy) @@ -2317,6 +2346,115 @@ abstract class BaseCcSubjs extends BaseObject implements Persistent } } + /** + * Clears out the collCcSubjsTokens collection + * + * This does not modify the database; however, it will remove any associated objects, causing + * them to be refetched by subsequent calls to accessor method. + * + * @return void + * @see addCcSubjsTokens() + */ + public function clearCcSubjsTokens() + { + $this->collCcSubjsTokens = null; // important to set this to NULL since that means it is uninitialized + } + + /** + * Initializes the collCcSubjsTokens collection. + * + * By default this just sets the collCcSubjsTokens collection to an empty array (like clearcollCcSubjsTokens()); + * however, you may wish to override this method in your stub class to provide setting appropriate + * to your application -- for example, setting the initial array to the values stored in database. + * + * @return void + */ + public function initCcSubjsTokens() + { + $this->collCcSubjsTokens = new PropelObjectCollection(); + $this->collCcSubjsTokens->setModel('CcSubjsToken'); + } + + /** + * Gets an array of CcSubjsToken objects which contain a foreign key that references this object. + * + * If the $criteria is not null, it is used to always fetch the results from the database. + * Otherwise the results are fetched from the database the first time, then cached. + * Next time the same method is called without $criteria, the cached collection is returned. + * If this CcSubjs is new, it will return + * an empty collection or the current collection; the criteria is ignored on a new object. + * + * @param Criteria $criteria optional Criteria object to narrow the query + * @param PropelPDO $con optional connection object + * @return PropelCollection|array CcSubjsToken[] List of CcSubjsToken objects + * @throws PropelException + */ + public function getCcSubjsTokens($criteria = null, PropelPDO $con = null) + { + if(null === $this->collCcSubjsTokens || null !== $criteria) { + if ($this->isNew() && null === $this->collCcSubjsTokens) { + // return empty collection + $this->initCcSubjsTokens(); + } else { + $collCcSubjsTokens = CcSubjsTokenQuery::create(null, $criteria) + ->filterByCcSubjs($this) + ->find($con); + if (null !== $criteria) { + return $collCcSubjsTokens; + } + $this->collCcSubjsTokens = $collCcSubjsTokens; + } + } + return $this->collCcSubjsTokens; + } + + /** + * Returns the number of related CcSubjsToken objects. + * + * @param Criteria $criteria + * @param boolean $distinct + * @param PropelPDO $con + * @return int Count of related CcSubjsToken objects. + * @throws PropelException + */ + public function countCcSubjsTokens(Criteria $criteria = null, $distinct = false, PropelPDO $con = null) + { + if(null === $this->collCcSubjsTokens || null !== $criteria) { + if ($this->isNew() && null === $this->collCcSubjsTokens) { + return 0; + } else { + $query = CcSubjsTokenQuery::create(null, $criteria); + if($distinct) { + $query->distinct(); + } + return $query + ->filterByCcSubjs($this) + ->count($con); + } + } else { + return count($this->collCcSubjsTokens); + } + } + + /** + * Method called to associate a CcSubjsToken object to this object + * through the CcSubjsToken foreign key attribute. + * + * @param CcSubjsToken $l CcSubjsToken + * @return void + * @throws PropelException + */ + public function addCcSubjsToken(CcSubjsToken $l) + { + if ($this->collCcSubjsTokens === null) { + $this->initCcSubjsTokens(); + } + if (!$this->collCcSubjsTokens->contains($l)) { // only add it if the **same** object is not already associated + $this->collCcSubjsTokens[]= $l; + $l->setCcSubjs($this); + } + } + /** * Clears the current object and sets all attributes to their default values */ @@ -2390,6 +2528,11 @@ abstract class BaseCcSubjs extends BaseObject implements Persistent $o->clearAllReferences($deep); } } + if ($this->collCcSubjsTokens) { + foreach ((array) $this->collCcSubjsTokens as $o) { + $o->clearAllReferences($deep); + } + } } // if ($deep) $this->collCcAccesss = null; @@ -2399,6 +2542,7 @@ abstract class BaseCcSubjs extends BaseObject implements Persistent $this->collCcPlaylists = null; $this->collCcPrefs = null; $this->collCcSesss = null; + $this->collCcSubjsTokens = null; } /** diff --git a/airtime_mvc/application/models/airtime/om/BaseCcSubjsPeer.php b/airtime_mvc/application/models/airtime/om/BaseCcSubjsPeer.php index 79a9a7efa..d60421580 100644 --- a/airtime_mvc/application/models/airtime/om/BaseCcSubjsPeer.php +++ b/airtime_mvc/application/models/airtime/om/BaseCcSubjsPeer.php @@ -405,6 +405,9 @@ abstract class BaseCcSubjsPeer { // Invalidate objects in CcSessPeer instance pool, // since one or more of them may be deleted by ON DELETE CASCADE/SETNULL rule. CcSessPeer::clearInstancePool(); + // Invalidate objects in CcSubjsTokenPeer instance pool, + // since one or more of them may be deleted by ON DELETE CASCADE/SETNULL rule. + CcSubjsTokenPeer::clearInstancePool(); } /** diff --git a/airtime_mvc/application/models/airtime/om/BaseCcSubjsQuery.php b/airtime_mvc/application/models/airtime/om/BaseCcSubjsQuery.php index 9a0cffdd0..c921e7394 100644 --- a/airtime_mvc/application/models/airtime/om/BaseCcSubjsQuery.php +++ b/airtime_mvc/application/models/airtime/om/BaseCcSubjsQuery.php @@ -64,6 +64,10 @@ * @method CcSubjsQuery rightJoinCcSess($relationAlias = '') Adds a RIGHT JOIN clause to the query using the CcSess relation * @method CcSubjsQuery innerJoinCcSess($relationAlias = '') Adds a INNER JOIN clause to the query using the CcSess relation * + * @method CcSubjsQuery leftJoinCcSubjsToken($relationAlias = '') Adds a LEFT JOIN clause to the query using the CcSubjsToken relation + * @method CcSubjsQuery rightJoinCcSubjsToken($relationAlias = '') Adds a RIGHT JOIN clause to the query using the CcSubjsToken relation + * @method CcSubjsQuery innerJoinCcSubjsToken($relationAlias = '') Adds a INNER JOIN clause to the query using the CcSubjsToken relation + * * @method CcSubjs findOne(PropelPDO $con = null) Return the first CcSubjs matching the query * @method CcSubjs findOneOrCreate(PropelPDO $con = null) Return the first CcSubjs matching the query, or a new CcSubjs object populated from the query conditions when no match is found * @@ -935,6 +939,70 @@ abstract class BaseCcSubjsQuery extends ModelCriteria ->useQuery($relationAlias ? $relationAlias : 'CcSess', 'CcSessQuery'); } + /** + * Filter the query by a related CcSubjsToken object + * + * @param CcSubjsToken $ccSubjsToken the related object to use as filter + * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL + * + * @return CcSubjsQuery The current query, for fluid interface + */ + public function filterByCcSubjsToken($ccSubjsToken, $comparison = null) + { + return $this + ->addUsingAlias(CcSubjsPeer::ID, $ccSubjsToken->getDbUserId(), $comparison); + } + + /** + * Adds a JOIN clause to the query using the CcSubjsToken relation + * + * @param string $relationAlias optional alias for the relation + * @param string $joinType Accepted values are null, 'left join', 'right join', 'inner join' + * + * @return CcSubjsQuery The current query, for fluid interface + */ + public function joinCcSubjsToken($relationAlias = '', $joinType = Criteria::INNER_JOIN) + { + $tableMap = $this->getTableMap(); + $relationMap = $tableMap->getRelation('CcSubjsToken'); + + // create a ModelJoin object for this join + $join = new ModelJoin(); + $join->setJoinType($joinType); + $join->setRelationMap($relationMap, $this->useAliasInSQL ? $this->getModelAlias() : null, $relationAlias); + if ($previousJoin = $this->getPreviousJoin()) { + $join->setPreviousJoin($previousJoin); + } + + // add the ModelJoin to the current object + if($relationAlias) { + $this->addAlias($relationAlias, $relationMap->getRightTable()->getName()); + $this->addJoinObject($join, $relationAlias); + } else { + $this->addJoinObject($join, 'CcSubjsToken'); + } + + return $this; + } + + /** + * Use the CcSubjsToken relation CcSubjsToken object + * + * @see useQuery() + * + * @param string $relationAlias optional alias for the relation, + * to be used as main alias in the secondary query + * @param string $joinType Accepted values are null, 'left join', 'right join', 'inner join' + * + * @return CcSubjsTokenQuery A secondary query class using the current class as primary query + */ + public function useCcSubjsTokenQuery($relationAlias = '', $joinType = Criteria::INNER_JOIN) + { + return $this + ->joinCcSubjsToken($relationAlias, $joinType) + ->useQuery($relationAlias ? $relationAlias : 'CcSubjsToken', 'CcSubjsTokenQuery'); + } + /** * Exclude object from result * diff --git a/airtime_mvc/application/models/airtime/om/BaseCcSubjsToken.php b/airtime_mvc/application/models/airtime/om/BaseCcSubjsToken.php new file mode 100644 index 000000000..e0a4ba9bb --- /dev/null +++ b/airtime_mvc/application/models/airtime/om/BaseCcSubjsToken.php @@ -0,0 +1,1005 @@ +id; + } + + /** + * Get the [user_id] column value. + * + * @return int + */ + public function getDbUserId() + { + return $this->user_id; + } + + /** + * Get the [action] column value. + * + * @return string + */ + public function getDbAction() + { + return $this->action; + } + + /** + * Get the [token] column value. + * + * @return string + */ + public function getDbToken() + { + return $this->token; + } + + /** + * Get the [optionally formatted] temporal [created] column value. + * + * + * @param string $format The date/time format string (either date()-style or strftime()-style). + * If format is NULL, then the raw DateTime object will be returned. + * @return mixed Formatted date/time value as string or DateTime object (if format is NULL), NULL if column is NULL + * @throws PropelException - if unable to parse/validate the date/time value. + */ + public function getDbCreated($format = 'Y-m-d H:i:s') + { + if ($this->created === null) { + return null; + } + + + + try { + $dt = new DateTime($this->created); + } catch (Exception $x) { + throw new PropelException("Internally stored date/time/timestamp value could not be converted to DateTime: " . var_export($this->created, true), $x); + } + + if ($format === null) { + // Because propel.useDateTimeClass is TRUE, we return a DateTime object. + return $dt; + } elseif (strpos($format, '%') !== false) { + return strftime($format, $dt->format('U')); + } else { + return $dt->format($format); + } + } + + /** + * Set the value of [id] column. + * + * @param int $v new value + * @return CcSubjsToken The current object (for fluent API support) + */ + public function setDbId($v) + { + if ($v !== null) { + $v = (int) $v; + } + + if ($this->id !== $v) { + $this->id = $v; + $this->modifiedColumns[] = CcSubjsTokenPeer::ID; + } + + return $this; + } // setDbId() + + /** + * Set the value of [user_id] column. + * + * @param int $v new value + * @return CcSubjsToken The current object (for fluent API support) + */ + public function setDbUserId($v) + { + if ($v !== null) { + $v = (int) $v; + } + + if ($this->user_id !== $v) { + $this->user_id = $v; + $this->modifiedColumns[] = CcSubjsTokenPeer::USER_ID; + } + + if ($this->aCcSubjs !== null && $this->aCcSubjs->getDbId() !== $v) { + $this->aCcSubjs = null; + } + + return $this; + } // setDbUserId() + + /** + * Set the value of [action] column. + * + * @param string $v new value + * @return CcSubjsToken The current object (for fluent API support) + */ + public function setDbAction($v) + { + if ($v !== null) { + $v = (string) $v; + } + + if ($this->action !== $v) { + $this->action = $v; + $this->modifiedColumns[] = CcSubjsTokenPeer::ACTION; + } + + return $this; + } // setDbAction() + + /** + * Set the value of [token] column. + * + * @param string $v new value + * @return CcSubjsToken The current object (for fluent API support) + */ + public function setDbToken($v) + { + if ($v !== null) { + $v = (string) $v; + } + + if ($this->token !== $v) { + $this->token = $v; + $this->modifiedColumns[] = CcSubjsTokenPeer::TOKEN; + } + + return $this; + } // setDbToken() + + /** + * Sets the value of [created] column to a normalized version of the date/time value specified. + * + * @param mixed $v string, integer (timestamp), or DateTime value. Empty string will + * be treated as NULL for temporal objects. + * @return CcSubjsToken The current object (for fluent API support) + */ + public function setDbCreated($v) + { + // we treat '' as NULL for temporal objects because DateTime('') == DateTime('now') + // -- which is unexpected, to say the least. + if ($v === null || $v === '') { + $dt = null; + } elseif ($v instanceof DateTime) { + $dt = $v; + } else { + // some string/numeric value passed; we normalize that so that we can + // validate it. + try { + if (is_numeric($v)) { // if it's a unix timestamp + $dt = new DateTime('@'.$v, new DateTimeZone('UTC')); + // We have to explicitly specify and then change the time zone because of a + // DateTime bug: http://bugs.php.net/bug.php?id=43003 + $dt->setTimeZone(new DateTimeZone(date_default_timezone_get())); + } else { + $dt = new DateTime($v); + } + } catch (Exception $x) { + throw new PropelException('Error parsing date/time value: ' . var_export($v, true), $x); + } + } + + if ( $this->created !== null || $dt !== null ) { + // (nested ifs are a little easier to read in this case) + + $currNorm = ($this->created !== null && $tmpDt = new DateTime($this->created)) ? $tmpDt->format('Y-m-d\\TH:i:sO') : null; + $newNorm = ($dt !== null) ? $dt->format('Y-m-d\\TH:i:sO') : null; + + if ( ($currNorm !== $newNorm) // normalized values don't match + ) + { + $this->created = ($dt ? $dt->format('Y-m-d\\TH:i:sO') : null); + $this->modifiedColumns[] = CcSubjsTokenPeer::CREATED; + } + } // if either are not null + + return $this; + } // setDbCreated() + + /** + * Indicates whether the columns in this object are only set to default values. + * + * This method can be used in conjunction with isModified() to indicate whether an object is both + * modified _and_ has some values set which are non-default. + * + * @return boolean Whether the columns in this object are only been set with default values. + */ + public function hasOnlyDefaultValues() + { + // otherwise, everything was equal, so return TRUE + return true; + } // hasOnlyDefaultValues() + + /** + * Hydrates (populates) the object variables with values from the database resultset. + * + * An offset (0-based "start column") is specified so that objects can be hydrated + * with a subset of the columns in the resultset rows. This is needed, for example, + * for results of JOIN queries where the resultset row includes columns from two or + * more tables. + * + * @param array $row The row returned by PDOStatement->fetch(PDO::FETCH_NUM) + * @param int $startcol 0-based offset column which indicates which restultset column to start with. + * @param boolean $rehydrate Whether this object is being re-hydrated from the database. + * @return int next starting column + * @throws PropelException - Any caught Exception will be rewrapped as a PropelException. + */ + public function hydrate($row, $startcol = 0, $rehydrate = false) + { + try { + + $this->id = ($row[$startcol + 0] !== null) ? (int) $row[$startcol + 0] : null; + $this->user_id = ($row[$startcol + 1] !== null) ? (int) $row[$startcol + 1] : null; + $this->action = ($row[$startcol + 2] !== null) ? (string) $row[$startcol + 2] : null; + $this->token = ($row[$startcol + 3] !== null) ? (string) $row[$startcol + 3] : null; + $this->created = ($row[$startcol + 4] !== null) ? (string) $row[$startcol + 4] : null; + $this->resetModified(); + + $this->setNew(false); + + if ($rehydrate) { + $this->ensureConsistency(); + } + + return $startcol + 5; // 5 = CcSubjsTokenPeer::NUM_COLUMNS - CcSubjsTokenPeer::NUM_LAZY_LOAD_COLUMNS). + + } catch (Exception $e) { + throw new PropelException("Error populating CcSubjsToken object", $e); + } + } + + /** + * Checks and repairs the internal consistency of the object. + * + * This method is executed after an already-instantiated object is re-hydrated + * from the database. It exists to check any foreign keys to make sure that + * the objects related to the current object are correct based on foreign key. + * + * You can override this method in the stub class, but you should always invoke + * the base method from the overridden method (i.e. parent::ensureConsistency()), + * in case your model changes. + * + * @throws PropelException + */ + public function ensureConsistency() + { + + if ($this->aCcSubjs !== null && $this->user_id !== $this->aCcSubjs->getDbId()) { + $this->aCcSubjs = null; + } + } // ensureConsistency + + /** + * Reloads this object from datastore based on primary key and (optionally) resets all associated objects. + * + * This will only work if the object has been saved and has a valid primary key set. + * + * @param boolean $deep (optional) Whether to also de-associated any related objects. + * @param PropelPDO $con (optional) The PropelPDO connection to use. + * @return void + * @throws PropelException - if this object is deleted, unsaved or doesn't have pk match in db + */ + public function reload($deep = false, PropelPDO $con = null) + { + if ($this->isDeleted()) { + throw new PropelException("Cannot reload a deleted object."); + } + + if ($this->isNew()) { + throw new PropelException("Cannot reload an unsaved object."); + } + + if ($con === null) { + $con = Propel::getConnection(CcSubjsTokenPeer::DATABASE_NAME, Propel::CONNECTION_READ); + } + + // We don't need to alter the object instance pool; we're just modifying this instance + // already in the pool. + + $stmt = CcSubjsTokenPeer::doSelectStmt($this->buildPkeyCriteria(), $con); + $row = $stmt->fetch(PDO::FETCH_NUM); + $stmt->closeCursor(); + if (!$row) { + throw new PropelException('Cannot find matching row in the database to reload object values.'); + } + $this->hydrate($row, 0, true); // rehydrate + + if ($deep) { // also de-associate any related objects? + + $this->aCcSubjs = null; + } // if (deep) + } + + /** + * Removes this object from datastore and sets delete attribute. + * + * @param PropelPDO $con + * @return void + * @throws PropelException + * @see BaseObject::setDeleted() + * @see BaseObject::isDeleted() + */ + public function delete(PropelPDO $con = null) + { + if ($this->isDeleted()) { + throw new PropelException("This object has already been deleted."); + } + + if ($con === null) { + $con = Propel::getConnection(CcSubjsTokenPeer::DATABASE_NAME, Propel::CONNECTION_WRITE); + } + + $con->beginTransaction(); + try { + $ret = $this->preDelete($con); + if ($ret) { + CcSubjsTokenQuery::create() + ->filterByPrimaryKey($this->getPrimaryKey()) + ->delete($con); + $this->postDelete($con); + $con->commit(); + $this->setDeleted(true); + } else { + $con->commit(); + } + } catch (PropelException $e) { + $con->rollBack(); + throw $e; + } + } + + /** + * Persists this object to the database. + * + * If the object is new, it inserts it; otherwise an update is performed. + * All modified related objects will also be persisted in the doSave() + * method. This method wraps all precipitate database operations in a + * single transaction. + * + * @param PropelPDO $con + * @return int The number of rows affected by this insert/update and any referring fk objects' save() operations. + * @throws PropelException + * @see doSave() + */ + public function save(PropelPDO $con = null) + { + if ($this->isDeleted()) { + throw new PropelException("You cannot save an object that has been deleted."); + } + + if ($con === null) { + $con = Propel::getConnection(CcSubjsTokenPeer::DATABASE_NAME, Propel::CONNECTION_WRITE); + } + + $con->beginTransaction(); + $isInsert = $this->isNew(); + try { + $ret = $this->preSave($con); + if ($isInsert) { + $ret = $ret && $this->preInsert($con); + } else { + $ret = $ret && $this->preUpdate($con); + } + if ($ret) { + $affectedRows = $this->doSave($con); + if ($isInsert) { + $this->postInsert($con); + } else { + $this->postUpdate($con); + } + $this->postSave($con); + CcSubjsTokenPeer::addInstanceToPool($this); + } else { + $affectedRows = 0; + } + $con->commit(); + return $affectedRows; + } catch (PropelException $e) { + $con->rollBack(); + throw $e; + } + } + + /** + * Performs the work of inserting or updating the row in the database. + * + * If the object is new, it inserts it; otherwise an update is performed. + * All related objects are also updated in this method. + * + * @param PropelPDO $con + * @return int The number of rows affected by this insert/update and any referring fk objects' save() operations. + * @throws PropelException + * @see save() + */ + protected function doSave(PropelPDO $con) + { + $affectedRows = 0; // initialize var to track total num of affected rows + if (!$this->alreadyInSave) { + $this->alreadyInSave = true; + + // We call the save method on the following object(s) if they + // were passed to this object by their coresponding set + // method. This object relates to these object(s) by a + // foreign key reference. + + if ($this->aCcSubjs !== null) { + if ($this->aCcSubjs->isModified() || $this->aCcSubjs->isNew()) { + $affectedRows += $this->aCcSubjs->save($con); + } + $this->setCcSubjs($this->aCcSubjs); + } + + if ($this->isNew() ) { + $this->modifiedColumns[] = CcSubjsTokenPeer::ID; + } + + // If this object has been modified, then save it to the database. + if ($this->isModified()) { + if ($this->isNew()) { + $criteria = $this->buildCriteria(); + if ($criteria->keyContainsValue(CcSubjsTokenPeer::ID) ) { + throw new PropelException('Cannot insert a value for auto-increment primary key ('.CcSubjsTokenPeer::ID.')'); + } + + $pk = BasePeer::doInsert($criteria, $con); + $affectedRows += 1; + $this->setDbId($pk); //[IMV] update autoincrement primary key + $this->setNew(false); + } else { + $affectedRows += CcSubjsTokenPeer::doUpdate($this, $con); + } + + $this->resetModified(); // [HL] After being saved an object is no longer 'modified' + } + + $this->alreadyInSave = false; + + } + return $affectedRows; + } // doSave() + + /** + * Array of ValidationFailed objects. + * @var array ValidationFailed[] + */ + protected $validationFailures = array(); + + /** + * Gets any ValidationFailed objects that resulted from last call to validate(). + * + * + * @return array ValidationFailed[] + * @see validate() + */ + public function getValidationFailures() + { + return $this->validationFailures; + } + + /** + * Validates the objects modified field values and all objects related to this table. + * + * If $columns is either a column name or an array of column names + * only those columns are validated. + * + * @param mixed $columns Column name or an array of column names. + * @return boolean Whether all columns pass validation. + * @see doValidate() + * @see getValidationFailures() + */ + public function validate($columns = null) + { + $res = $this->doValidate($columns); + if ($res === true) { + $this->validationFailures = array(); + return true; + } else { + $this->validationFailures = $res; + return false; + } + } + + /** + * This function performs the validation work for complex object models. + * + * In addition to checking the current object, all related objects will + * also be validated. If all pass then true is returned; otherwise + * an aggreagated array of ValidationFailed objects will be returned. + * + * @param array $columns Array of column names to validate. + * @return mixed true if all validations pass; array of ValidationFailed objets otherwise. + */ + protected function doValidate($columns = null) + { + if (!$this->alreadyInValidation) { + $this->alreadyInValidation = true; + $retval = null; + + $failureMap = array(); + + + // We call the validate method on the following object(s) if they + // were passed to this object by their coresponding set + // method. This object relates to these object(s) by a + // foreign key reference. + + if ($this->aCcSubjs !== null) { + if (!$this->aCcSubjs->validate($columns)) { + $failureMap = array_merge($failureMap, $this->aCcSubjs->getValidationFailures()); + } + } + + + if (($retval = CcSubjsTokenPeer::doValidate($this, $columns)) !== true) { + $failureMap = array_merge($failureMap, $retval); + } + + + + $this->alreadyInValidation = false; + } + + return (!empty($failureMap) ? $failureMap : true); + } + + /** + * Retrieves a field from the object by name passed in as a string. + * + * @param string $name name + * @param string $type The type of fieldname the $name is of: + * one of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME + * BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM + * @return mixed Value of field. + */ + public function getByName($name, $type = BasePeer::TYPE_PHPNAME) + { + $pos = CcSubjsTokenPeer::translateFieldName($name, $type, BasePeer::TYPE_NUM); + $field = $this->getByPosition($pos); + return $field; + } + + /** + * Retrieves a field from the object by Position as specified in the xml schema. + * Zero-based. + * + * @param int $pos position in xml schema + * @return mixed Value of field at $pos + */ + public function getByPosition($pos) + { + switch($pos) { + case 0: + return $this->getDbId(); + break; + case 1: + return $this->getDbUserId(); + break; + case 2: + return $this->getDbAction(); + break; + case 3: + return $this->getDbToken(); + break; + case 4: + return $this->getDbCreated(); + break; + default: + return null; + break; + } // switch() + } + + /** + * Exports the object as an array. + * + * You can specify the key type of the array by passing one of the class + * type constants. + * + * @param string $keyType (optional) One of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME, + * BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM. + * Defaults to BasePeer::TYPE_PHPNAME. + * @param boolean $includeLazyLoadColumns (optional) Whether to include lazy loaded columns. Defaults to TRUE. + * @param boolean $includeForeignObjects (optional) Whether to include hydrated related objects. Default to FALSE. + * + * @return array an associative array containing the field names (as keys) and field values + */ + public function toArray($keyType = BasePeer::TYPE_PHPNAME, $includeLazyLoadColumns = true, $includeForeignObjects = false) + { + $keys = CcSubjsTokenPeer::getFieldNames($keyType); + $result = array( + $keys[0] => $this->getDbId(), + $keys[1] => $this->getDbUserId(), + $keys[2] => $this->getDbAction(), + $keys[3] => $this->getDbToken(), + $keys[4] => $this->getDbCreated(), + ); + if ($includeForeignObjects) { + if (null !== $this->aCcSubjs) { + $result['CcSubjs'] = $this->aCcSubjs->toArray($keyType, $includeLazyLoadColumns, true); + } + } + return $result; + } + + /** + * Sets a field from the object by name passed in as a string. + * + * @param string $name peer name + * @param mixed $value field value + * @param string $type The type of fieldname the $name is of: + * one of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME + * BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM + * @return void + */ + public function setByName($name, $value, $type = BasePeer::TYPE_PHPNAME) + { + $pos = CcSubjsTokenPeer::translateFieldName($name, $type, BasePeer::TYPE_NUM); + return $this->setByPosition($pos, $value); + } + + /** + * Sets a field from the object by Position as specified in the xml schema. + * Zero-based. + * + * @param int $pos position in xml schema + * @param mixed $value field value + * @return void + */ + public function setByPosition($pos, $value) + { + switch($pos) { + case 0: + $this->setDbId($value); + break; + case 1: + $this->setDbUserId($value); + break; + case 2: + $this->setDbAction($value); + break; + case 3: + $this->setDbToken($value); + break; + case 4: + $this->setDbCreated($value); + break; + } // switch() + } + + /** + * Populates the object using an array. + * + * This is particularly useful when populating an object from one of the + * request arrays (e.g. $_POST). This method goes through the column + * names, checking to see whether a matching key exists in populated + * array. If so the setByName() method is called for that column. + * + * You can specify the key type of the array by additionally passing one + * of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME, + * BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM. + * The default key type is the column's phpname (e.g. 'AuthorId') + * + * @param array $arr An array to populate the object from. + * @param string $keyType The type of keys the array uses. + * @return void + */ + public function fromArray($arr, $keyType = BasePeer::TYPE_PHPNAME) + { + $keys = CcSubjsTokenPeer::getFieldNames($keyType); + + if (array_key_exists($keys[0], $arr)) $this->setDbId($arr[$keys[0]]); + if (array_key_exists($keys[1], $arr)) $this->setDbUserId($arr[$keys[1]]); + if (array_key_exists($keys[2], $arr)) $this->setDbAction($arr[$keys[2]]); + if (array_key_exists($keys[3], $arr)) $this->setDbToken($arr[$keys[3]]); + if (array_key_exists($keys[4], $arr)) $this->setDbCreated($arr[$keys[4]]); + } + + /** + * Build a Criteria object containing the values of all modified columns in this object. + * + * @return Criteria The Criteria object containing all modified values. + */ + public function buildCriteria() + { + $criteria = new Criteria(CcSubjsTokenPeer::DATABASE_NAME); + + if ($this->isColumnModified(CcSubjsTokenPeer::ID)) $criteria->add(CcSubjsTokenPeer::ID, $this->id); + if ($this->isColumnModified(CcSubjsTokenPeer::USER_ID)) $criteria->add(CcSubjsTokenPeer::USER_ID, $this->user_id); + if ($this->isColumnModified(CcSubjsTokenPeer::ACTION)) $criteria->add(CcSubjsTokenPeer::ACTION, $this->action); + if ($this->isColumnModified(CcSubjsTokenPeer::TOKEN)) $criteria->add(CcSubjsTokenPeer::TOKEN, $this->token); + if ($this->isColumnModified(CcSubjsTokenPeer::CREATED)) $criteria->add(CcSubjsTokenPeer::CREATED, $this->created); + + return $criteria; + } + + /** + * Builds a Criteria object containing the primary key for this object. + * + * Unlike buildCriteria() this method includes the primary key values regardless + * of whether or not they have been modified. + * + * @return Criteria The Criteria object containing value(s) for primary key(s). + */ + public function buildPkeyCriteria() + { + $criteria = new Criteria(CcSubjsTokenPeer::DATABASE_NAME); + $criteria->add(CcSubjsTokenPeer::ID, $this->id); + + return $criteria; + } + + /** + * Returns the primary key for this object (row). + * @return int + */ + public function getPrimaryKey() + { + return $this->getDbId(); + } + + /** + * Generic method to set the primary key (id column). + * + * @param int $key Primary key. + * @return void + */ + public function setPrimaryKey($key) + { + $this->setDbId($key); + } + + /** + * Returns true if the primary key for this object is null. + * @return boolean + */ + public function isPrimaryKeyNull() + { + return null === $this->getDbId(); + } + + /** + * Sets contents of passed object to values from current object. + * + * If desired, this method can also make copies of all associated (fkey referrers) + * objects. + * + * @param object $copyObj An object of CcSubjsToken (or compatible) type. + * @param boolean $deepCopy Whether to also copy all rows that refer (by fkey) to the current row. + * @throws PropelException + */ + public function copyInto($copyObj, $deepCopy = false) + { + $copyObj->setDbUserId($this->user_id); + $copyObj->setDbAction($this->action); + $copyObj->setDbToken($this->token); + $copyObj->setDbCreated($this->created); + + $copyObj->setNew(true); + $copyObj->setDbId(NULL); // this is a auto-increment column, so set to default value + } + + /** + * Makes a copy of this object that will be inserted as a new row in table when saved. + * It creates a new object filling in the simple attributes, but skipping any primary + * keys that are defined for the table. + * + * If desired, this method can also make copies of all associated (fkey referrers) + * objects. + * + * @param boolean $deepCopy Whether to also copy all rows that refer (by fkey) to the current row. + * @return CcSubjsToken Clone of current object. + * @throws PropelException + */ + public function copy($deepCopy = false) + { + // we use get_class(), because this might be a subclass + $clazz = get_class($this); + $copyObj = new $clazz(); + $this->copyInto($copyObj, $deepCopy); + return $copyObj; + } + + /** + * Returns a peer instance associated with this om. + * + * Since Peer classes are not to have any instance attributes, this method returns the + * same instance for all member of this class. The method could therefore + * be static, but this would prevent one from overriding the behavior. + * + * @return CcSubjsTokenPeer + */ + public function getPeer() + { + if (self::$peer === null) { + self::$peer = new CcSubjsTokenPeer(); + } + return self::$peer; + } + + /** + * Declares an association between this object and a CcSubjs object. + * + * @param CcSubjs $v + * @return CcSubjsToken The current object (for fluent API support) + * @throws PropelException + */ + public function setCcSubjs(CcSubjs $v = null) + { + if ($v === null) { + $this->setDbUserId(NULL); + } else { + $this->setDbUserId($v->getDbId()); + } + + $this->aCcSubjs = $v; + + // Add binding for other direction of this n:n relationship. + // If this object has already been added to the CcSubjs object, it will not be re-added. + if ($v !== null) { + $v->addCcSubjsToken($this); + } + + return $this; + } + + + /** + * Get the associated CcSubjs object + * + * @param PropelPDO Optional Connection object. + * @return CcSubjs The associated CcSubjs object. + * @throws PropelException + */ + public function getCcSubjs(PropelPDO $con = null) + { + if ($this->aCcSubjs === null && ($this->user_id !== null)) { + $this->aCcSubjs = CcSubjsQuery::create()->findPk($this->user_id, $con); + /* The following can be used additionally to + guarantee the related object contains a reference + to this object. This level of coupling may, however, be + undesirable since it could result in an only partially populated collection + in the referenced object. + $this->aCcSubjs->addCcSubjsTokens($this); + */ + } + return $this->aCcSubjs; + } + + /** + * Clears the current object and sets all attributes to their default values + */ + public function clear() + { + $this->id = null; + $this->user_id = null; + $this->action = null; + $this->token = null; + $this->created = null; + $this->alreadyInSave = false; + $this->alreadyInValidation = false; + $this->clearAllReferences(); + $this->resetModified(); + $this->setNew(true); + $this->setDeleted(false); + } + + /** + * Resets all collections of referencing foreign keys. + * + * This method is a user-space workaround for PHP's inability to garbage collect objects + * with circular references. This is currently necessary when using Propel in certain + * daemon or large-volumne/high-memory operations. + * + * @param boolean $deep Whether to also clear the references on all associated objects. + */ + public function clearAllReferences($deep = false) + { + if ($deep) { + } // if ($deep) + + $this->aCcSubjs = null; + } + + /** + * Catches calls to virtual methods + */ + public function __call($name, $params) + { + if (preg_match('/get(\w+)/', $name, $matches)) { + $virtualColumn = $matches[1]; + if ($this->hasVirtualColumn($virtualColumn)) { + return $this->getVirtualColumn($virtualColumn); + } + // no lcfirst in php<5.3... + $virtualColumn[0] = strtolower($virtualColumn[0]); + if ($this->hasVirtualColumn($virtualColumn)) { + return $this->getVirtualColumn($virtualColumn); + } + } + throw new PropelException('Call to undefined method: ' . $name); + } + +} // BaseCcSubjsToken diff --git a/airtime_mvc/application/models/airtime/om/BaseCcSubjsTokenPeer.php b/airtime_mvc/application/models/airtime/om/BaseCcSubjsTokenPeer.php new file mode 100644 index 000000000..7f08ba6a7 --- /dev/null +++ b/airtime_mvc/application/models/airtime/om/BaseCcSubjsTokenPeer.php @@ -0,0 +1,988 @@ + array ('DbId', 'DbUserId', 'DbAction', 'DbToken', 'DbCreated', ), + BasePeer::TYPE_STUDLYPHPNAME => array ('dbId', 'dbUserId', 'dbAction', 'dbToken', 'dbCreated', ), + BasePeer::TYPE_COLNAME => array (self::ID, self::USER_ID, self::ACTION, self::TOKEN, self::CREATED, ), + BasePeer::TYPE_RAW_COLNAME => array ('ID', 'USER_ID', 'ACTION', 'TOKEN', 'CREATED', ), + BasePeer::TYPE_FIELDNAME => array ('id', 'user_id', 'action', 'token', 'created', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, ) + ); + + /** + * holds an array of keys for quick access to the fieldnames array + * + * first dimension keys are the type constants + * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 + */ + private static $fieldKeys = array ( + BasePeer::TYPE_PHPNAME => array ('DbId' => 0, 'DbUserId' => 1, 'DbAction' => 2, 'DbToken' => 3, 'DbCreated' => 4, ), + BasePeer::TYPE_STUDLYPHPNAME => array ('dbId' => 0, 'dbUserId' => 1, 'dbAction' => 2, 'dbToken' => 3, 'dbCreated' => 4, ), + BasePeer::TYPE_COLNAME => array (self::ID => 0, self::USER_ID => 1, self::ACTION => 2, self::TOKEN => 3, self::CREATED => 4, ), + BasePeer::TYPE_RAW_COLNAME => array ('ID' => 0, 'USER_ID' => 1, 'ACTION' => 2, 'TOKEN' => 3, 'CREATED' => 4, ), + BasePeer::TYPE_FIELDNAME => array ('id' => 0, 'user_id' => 1, 'action' => 2, 'token' => 3, 'created' => 4, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, ) + ); + + /** + * Translates a fieldname to another type + * + * @param string $name field name + * @param string $fromType One of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME + * BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM + * @param string $toType One of the class type constants + * @return string translated name of the field. + * @throws PropelException - if the specified name could not be found in the fieldname mappings. + */ + static public function translateFieldName($name, $fromType, $toType) + { + $toNames = self::getFieldNames($toType); + $key = isset(self::$fieldKeys[$fromType][$name]) ? self::$fieldKeys[$fromType][$name] : null; + if ($key === null) { + throw new PropelException("'$name' could not be found in the field names of type '$fromType'. These are: " . print_r(self::$fieldKeys[$fromType], true)); + } + return $toNames[$key]; + } + + /** + * Returns an array of field names. + * + * @param string $type The type of fieldnames to return: + * One of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME + * BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM + * @return array A list of field names + */ + + static public function getFieldNames($type = BasePeer::TYPE_PHPNAME) + { + if (!array_key_exists($type, self::$fieldNames)) { + throw new PropelException('Method getFieldNames() expects the parameter $type to be one of the class constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME, BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM. ' . $type . ' was given.'); + } + return self::$fieldNames[$type]; + } + + /** + * Convenience method which changes table.column to alias.column. + * + * Using this method you can maintain SQL abstraction while using column aliases. + * + * $c->addAlias("alias1", TablePeer::TABLE_NAME); + * $c->addJoin(TablePeer::alias("alias1", TablePeer::PRIMARY_KEY_COLUMN), TablePeer::PRIMARY_KEY_COLUMN); + * + * @param string $alias The alias for the current table. + * @param string $column The column name for current table. (i.e. CcSubjsTokenPeer::COLUMN_NAME). + * @return string + */ + public static function alias($alias, $column) + { + return str_replace(CcSubjsTokenPeer::TABLE_NAME.'.', $alias.'.', $column); + } + + /** + * Add all the columns needed to create a new object. + * + * Note: any columns that were marked with lazyLoad="true" in the + * XML schema will not be added to the select list and only loaded + * on demand. + * + * @param Criteria $criteria object containing the columns to add. + * @param string $alias optional table alias + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function addSelectColumns(Criteria $criteria, $alias = null) + { + if (null === $alias) { + $criteria->addSelectColumn(CcSubjsTokenPeer::ID); + $criteria->addSelectColumn(CcSubjsTokenPeer::USER_ID); + $criteria->addSelectColumn(CcSubjsTokenPeer::ACTION); + $criteria->addSelectColumn(CcSubjsTokenPeer::TOKEN); + $criteria->addSelectColumn(CcSubjsTokenPeer::CREATED); + } else { + $criteria->addSelectColumn($alias . '.ID'); + $criteria->addSelectColumn($alias . '.USER_ID'); + $criteria->addSelectColumn($alias . '.ACTION'); + $criteria->addSelectColumn($alias . '.TOKEN'); + $criteria->addSelectColumn($alias . '.CREATED'); + } + } + + /** + * Returns the number of rows matching criteria. + * + * @param Criteria $criteria + * @param boolean $distinct Whether to select only distinct columns; deprecated: use Criteria->setDistinct() instead. + * @param PropelPDO $con + * @return int Number of matching rows. + */ + public static function doCount(Criteria $criteria, $distinct = false, PropelPDO $con = null) + { + // we may modify criteria, so copy it first + $criteria = clone $criteria; + + // We need to set the primary table name, since in the case that there are no WHERE columns + // it will be impossible for the BasePeer::createSelectSql() method to determine which + // tables go into the FROM clause. + $criteria->setPrimaryTableName(CcSubjsTokenPeer::TABLE_NAME); + + if ($distinct && !in_array(Criteria::DISTINCT, $criteria->getSelectModifiers())) { + $criteria->setDistinct(); + } + + if (!$criteria->hasSelectClause()) { + CcSubjsTokenPeer::addSelectColumns($criteria); + } + + $criteria->clearOrderByColumns(); // ORDER BY won't ever affect the count + $criteria->setDbName(self::DATABASE_NAME); // Set the correct dbName + + if ($con === null) { + $con = Propel::getConnection(CcSubjsTokenPeer::DATABASE_NAME, Propel::CONNECTION_READ); + } + // BasePeer returns a PDOStatement + $stmt = BasePeer::doCount($criteria, $con); + + if ($row = $stmt->fetch(PDO::FETCH_NUM)) { + $count = (int) $row[0]; + } else { + $count = 0; // no rows returned; we infer that means 0 matches. + } + $stmt->closeCursor(); + return $count; + } + /** + * Method to select one object from the DB. + * + * @param Criteria $criteria object used to create the SELECT statement. + * @param PropelPDO $con + * @return CcSubjsToken + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function doSelectOne(Criteria $criteria, PropelPDO $con = null) + { + $critcopy = clone $criteria; + $critcopy->setLimit(1); + $objects = CcSubjsTokenPeer::doSelect($critcopy, $con); + if ($objects) { + return $objects[0]; + } + return null; + } + /** + * Method to do selects. + * + * @param Criteria $criteria The Criteria object used to build the SELECT statement. + * @param PropelPDO $con + * @return array Array of selected Objects + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function doSelect(Criteria $criteria, PropelPDO $con = null) + { + return CcSubjsTokenPeer::populateObjects(CcSubjsTokenPeer::doSelectStmt($criteria, $con)); + } + /** + * Prepares the Criteria object and uses the parent doSelect() method to execute a PDOStatement. + * + * Use this method directly if you want to work with an executed statement durirectly (for example + * to perform your own object hydration). + * + * @param Criteria $criteria The Criteria object used to build the SELECT statement. + * @param PropelPDO $con The connection to use + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + * @return PDOStatement The executed PDOStatement object. + * @see BasePeer::doSelect() + */ + public static function doSelectStmt(Criteria $criteria, PropelPDO $con = null) + { + if ($con === null) { + $con = Propel::getConnection(CcSubjsTokenPeer::DATABASE_NAME, Propel::CONNECTION_READ); + } + + if (!$criteria->hasSelectClause()) { + $criteria = clone $criteria; + CcSubjsTokenPeer::addSelectColumns($criteria); + } + + // Set the correct dbName + $criteria->setDbName(self::DATABASE_NAME); + + // BasePeer returns a PDOStatement + return BasePeer::doSelect($criteria, $con); + } + /** + * Adds an object to the instance pool. + * + * Propel keeps cached copies of objects in an instance pool when they are retrieved + * from the database. In some cases -- especially when you override doSelect*() + * methods in your stub classes -- you may need to explicitly add objects + * to the cache in order to ensure that the same objects are always returned by doSelect*() + * and retrieveByPK*() calls. + * + * @param CcSubjsToken $value A CcSubjsToken object. + * @param string $key (optional) key to use for instance map (for performance boost if key was already calculated externally). + */ + public static function addInstanceToPool(CcSubjsToken $obj, $key = null) + { + if (Propel::isInstancePoolingEnabled()) { + if ($key === null) { + $key = (string) $obj->getDbId(); + } // if key === null + self::$instances[$key] = $obj; + } + } + + /** + * Removes an object from the instance pool. + * + * Propel keeps cached copies of objects in an instance pool when they are retrieved + * from the database. In some cases -- especially when you override doDelete + * methods in your stub classes -- you may need to explicitly remove objects + * from the cache in order to prevent returning objects that no longer exist. + * + * @param mixed $value A CcSubjsToken object or a primary key value. + */ + public static function removeInstanceFromPool($value) + { + if (Propel::isInstancePoolingEnabled() && $value !== null) { + if (is_object($value) && $value instanceof CcSubjsToken) { + $key = (string) $value->getDbId(); + } elseif (is_scalar($value)) { + // assume we've been passed a primary key + $key = (string) $value; + } else { + $e = new PropelException("Invalid value passed to removeInstanceFromPool(). Expected primary key or CcSubjsToken object; got " . (is_object($value) ? get_class($value) . ' object.' : var_export($value,true))); + throw $e; + } + + unset(self::$instances[$key]); + } + } // removeInstanceFromPool() + + /** + * Retrieves a string version of the primary key from the DB resultset row that can be used to uniquely identify a row in this table. + * + * For tables with a single-column primary key, that simple pkey value will be returned. For tables with + * a multi-column primary key, a serialize()d version of the primary key will be returned. + * + * @param string $key The key (@see getPrimaryKeyHash()) for this instance. + * @return CcSubjsToken Found object or NULL if 1) no instance exists for specified key or 2) instance pooling has been disabled. + * @see getPrimaryKeyHash() + */ + public static function getInstanceFromPool($key) + { + if (Propel::isInstancePoolingEnabled()) { + if (isset(self::$instances[$key])) { + return self::$instances[$key]; + } + } + return null; // just to be explicit + } + + /** + * Clear the instance pool. + * + * @return void + */ + public static function clearInstancePool() + { + self::$instances = array(); + } + + /** + * Method to invalidate the instance pool of all tables related to cc_subjs_token + * by a foreign key with ON DELETE CASCADE + */ + public static function clearRelatedInstancePool() + { + } + + /** + * Retrieves a string version of the primary key from the DB resultset row that can be used to uniquely identify a row in this table. + * + * For tables with a single-column primary key, that simple pkey value will be returned. For tables with + * a multi-column primary key, a serialize()d version of the primary key will be returned. + * + * @param array $row PropelPDO resultset row. + * @param int $startcol The 0-based offset for reading from the resultset row. + * @return string A string version of PK or NULL if the components of primary key in result array are all null. + */ + public static function getPrimaryKeyHashFromRow($row, $startcol = 0) + { + // If the PK cannot be derived from the row, return NULL. + if ($row[$startcol] === null) { + return null; + } + return (string) $row[$startcol]; + } + + /** + * Retrieves the primary key from the DB resultset row + * For tables with a single-column primary key, that simple pkey value will be returned. For tables with + * a multi-column primary key, an array of the primary key columns will be returned. + * + * @param array $row PropelPDO resultset row. + * @param int $startcol The 0-based offset for reading from the resultset row. + * @return mixed The primary key of the row + */ + public static function getPrimaryKeyFromRow($row, $startcol = 0) + { + return (int) $row[$startcol]; + } + + /** + * The returned array will contain objects of the default type or + * objects that inherit from the default. + * + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function populateObjects(PDOStatement $stmt) + { + $results = array(); + + // set the class once to avoid overhead in the loop + $cls = CcSubjsTokenPeer::getOMClass(false); + // populate the object(s) + while ($row = $stmt->fetch(PDO::FETCH_NUM)) { + $key = CcSubjsTokenPeer::getPrimaryKeyHashFromRow($row, 0); + if (null !== ($obj = CcSubjsTokenPeer::getInstanceFromPool($key))) { + // We no longer rehydrate the object, since this can cause data loss. + // See http://www.propelorm.org/ticket/509 + // $obj->hydrate($row, 0, true); // rehydrate + $results[] = $obj; + } else { + $obj = new $cls(); + $obj->hydrate($row); + $results[] = $obj; + CcSubjsTokenPeer::addInstanceToPool($obj, $key); + } // if key exists + } + $stmt->closeCursor(); + return $results; + } + /** + * Populates an object of the default type or an object that inherit from the default. + * + * @param array $row PropelPDO resultset row. + * @param int $startcol The 0-based offset for reading from the resultset row. + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + * @return array (CcSubjsToken object, last column rank) + */ + public static function populateObject($row, $startcol = 0) + { + $key = CcSubjsTokenPeer::getPrimaryKeyHashFromRow($row, $startcol); + if (null !== ($obj = CcSubjsTokenPeer::getInstanceFromPool($key))) { + // We no longer rehydrate the object, since this can cause data loss. + // See http://www.propelorm.org/ticket/509 + // $obj->hydrate($row, $startcol, true); // rehydrate + $col = $startcol + CcSubjsTokenPeer::NUM_COLUMNS; + } else { + $cls = CcSubjsTokenPeer::OM_CLASS; + $obj = new $cls(); + $col = $obj->hydrate($row, $startcol); + CcSubjsTokenPeer::addInstanceToPool($obj, $key); + } + return array($obj, $col); + } + + /** + * Returns the number of rows matching criteria, joining the related CcSubjs table + * + * @param Criteria $criteria + * @param boolean $distinct Whether to select only distinct columns; deprecated: use Criteria->setDistinct() instead. + * @param PropelPDO $con + * @param String $join_behavior the type of joins to use, defaults to Criteria::LEFT_JOIN + * @return int Number of matching rows. + */ + public static function doCountJoinCcSubjs(Criteria $criteria, $distinct = false, PropelPDO $con = null, $join_behavior = Criteria::LEFT_JOIN) + { + // we're going to modify criteria, so copy it first + $criteria = clone $criteria; + + // We need to set the primary table name, since in the case that there are no WHERE columns + // it will be impossible for the BasePeer::createSelectSql() method to determine which + // tables go into the FROM clause. + $criteria->setPrimaryTableName(CcSubjsTokenPeer::TABLE_NAME); + + if ($distinct && !in_array(Criteria::DISTINCT, $criteria->getSelectModifiers())) { + $criteria->setDistinct(); + } + + if (!$criteria->hasSelectClause()) { + CcSubjsTokenPeer::addSelectColumns($criteria); + } + + $criteria->clearOrderByColumns(); // ORDER BY won't ever affect the count + + // Set the correct dbName + $criteria->setDbName(self::DATABASE_NAME); + + if ($con === null) { + $con = Propel::getConnection(CcSubjsTokenPeer::DATABASE_NAME, Propel::CONNECTION_READ); + } + + $criteria->addJoin(CcSubjsTokenPeer::USER_ID, CcSubjsPeer::ID, $join_behavior); + + $stmt = BasePeer::doCount($criteria, $con); + + if ($row = $stmt->fetch(PDO::FETCH_NUM)) { + $count = (int) $row[0]; + } else { + $count = 0; // no rows returned; we infer that means 0 matches. + } + $stmt->closeCursor(); + return $count; + } + + + /** + * Selects a collection of CcSubjsToken objects pre-filled with their CcSubjs objects. + * @param Criteria $criteria + * @param PropelPDO $con + * @param String $join_behavior the type of joins to use, defaults to Criteria::LEFT_JOIN + * @return array Array of CcSubjsToken objects. + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function doSelectJoinCcSubjs(Criteria $criteria, $con = null, $join_behavior = Criteria::LEFT_JOIN) + { + $criteria = clone $criteria; + + // Set the correct dbName if it has not been overridden + if ($criteria->getDbName() == Propel::getDefaultDB()) { + $criteria->setDbName(self::DATABASE_NAME); + } + + CcSubjsTokenPeer::addSelectColumns($criteria); + $startcol = (CcSubjsTokenPeer::NUM_COLUMNS - CcSubjsTokenPeer::NUM_LAZY_LOAD_COLUMNS); + CcSubjsPeer::addSelectColumns($criteria); + + $criteria->addJoin(CcSubjsTokenPeer::USER_ID, CcSubjsPeer::ID, $join_behavior); + + $stmt = BasePeer::doSelect($criteria, $con); + $results = array(); + + while ($row = $stmt->fetch(PDO::FETCH_NUM)) { + $key1 = CcSubjsTokenPeer::getPrimaryKeyHashFromRow($row, 0); + if (null !== ($obj1 = CcSubjsTokenPeer::getInstanceFromPool($key1))) { + // We no longer rehydrate the object, since this can cause data loss. + // See http://www.propelorm.org/ticket/509 + // $obj1->hydrate($row, 0, true); // rehydrate + } else { + + $cls = CcSubjsTokenPeer::getOMClass(false); + + $obj1 = new $cls(); + $obj1->hydrate($row); + CcSubjsTokenPeer::addInstanceToPool($obj1, $key1); + } // if $obj1 already loaded + + $key2 = CcSubjsPeer::getPrimaryKeyHashFromRow($row, $startcol); + if ($key2 !== null) { + $obj2 = CcSubjsPeer::getInstanceFromPool($key2); + if (!$obj2) { + + $cls = CcSubjsPeer::getOMClass(false); + + $obj2 = new $cls(); + $obj2->hydrate($row, $startcol); + CcSubjsPeer::addInstanceToPool($obj2, $key2); + } // if obj2 already loaded + + // Add the $obj1 (CcSubjsToken) to $obj2 (CcSubjs) + $obj2->addCcSubjsToken($obj1); + + } // if joined row was not null + + $results[] = $obj1; + } + $stmt->closeCursor(); + return $results; + } + + + /** + * Returns the number of rows matching criteria, joining all related tables + * + * @param Criteria $criteria + * @param boolean $distinct Whether to select only distinct columns; deprecated: use Criteria->setDistinct() instead. + * @param PropelPDO $con + * @param String $join_behavior the type of joins to use, defaults to Criteria::LEFT_JOIN + * @return int Number of matching rows. + */ + public static function doCountJoinAll(Criteria $criteria, $distinct = false, PropelPDO $con = null, $join_behavior = Criteria::LEFT_JOIN) + { + // we're going to modify criteria, so copy it first + $criteria = clone $criteria; + + // We need to set the primary table name, since in the case that there are no WHERE columns + // it will be impossible for the BasePeer::createSelectSql() method to determine which + // tables go into the FROM clause. + $criteria->setPrimaryTableName(CcSubjsTokenPeer::TABLE_NAME); + + if ($distinct && !in_array(Criteria::DISTINCT, $criteria->getSelectModifiers())) { + $criteria->setDistinct(); + } + + if (!$criteria->hasSelectClause()) { + CcSubjsTokenPeer::addSelectColumns($criteria); + } + + $criteria->clearOrderByColumns(); // ORDER BY won't ever affect the count + + // Set the correct dbName + $criteria->setDbName(self::DATABASE_NAME); + + if ($con === null) { + $con = Propel::getConnection(CcSubjsTokenPeer::DATABASE_NAME, Propel::CONNECTION_READ); + } + + $criteria->addJoin(CcSubjsTokenPeer::USER_ID, CcSubjsPeer::ID, $join_behavior); + + $stmt = BasePeer::doCount($criteria, $con); + + if ($row = $stmt->fetch(PDO::FETCH_NUM)) { + $count = (int) $row[0]; + } else { + $count = 0; // no rows returned; we infer that means 0 matches. + } + $stmt->closeCursor(); + return $count; + } + + /** + * Selects a collection of CcSubjsToken objects pre-filled with all related objects. + * + * @param Criteria $criteria + * @param PropelPDO $con + * @param String $join_behavior the type of joins to use, defaults to Criteria::LEFT_JOIN + * @return array Array of CcSubjsToken objects. + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function doSelectJoinAll(Criteria $criteria, $con = null, $join_behavior = Criteria::LEFT_JOIN) + { + $criteria = clone $criteria; + + // Set the correct dbName if it has not been overridden + if ($criteria->getDbName() == Propel::getDefaultDB()) { + $criteria->setDbName(self::DATABASE_NAME); + } + + CcSubjsTokenPeer::addSelectColumns($criteria); + $startcol2 = (CcSubjsTokenPeer::NUM_COLUMNS - CcSubjsTokenPeer::NUM_LAZY_LOAD_COLUMNS); + + CcSubjsPeer::addSelectColumns($criteria); + $startcol3 = $startcol2 + (CcSubjsPeer::NUM_COLUMNS - CcSubjsPeer::NUM_LAZY_LOAD_COLUMNS); + + $criteria->addJoin(CcSubjsTokenPeer::USER_ID, CcSubjsPeer::ID, $join_behavior); + + $stmt = BasePeer::doSelect($criteria, $con); + $results = array(); + + while ($row = $stmt->fetch(PDO::FETCH_NUM)) { + $key1 = CcSubjsTokenPeer::getPrimaryKeyHashFromRow($row, 0); + if (null !== ($obj1 = CcSubjsTokenPeer::getInstanceFromPool($key1))) { + // We no longer rehydrate the object, since this can cause data loss. + // See http://www.propelorm.org/ticket/509 + // $obj1->hydrate($row, 0, true); // rehydrate + } else { + $cls = CcSubjsTokenPeer::getOMClass(false); + + $obj1 = new $cls(); + $obj1->hydrate($row); + CcSubjsTokenPeer::addInstanceToPool($obj1, $key1); + } // if obj1 already loaded + + // Add objects for joined CcSubjs rows + + $key2 = CcSubjsPeer::getPrimaryKeyHashFromRow($row, $startcol2); + if ($key2 !== null) { + $obj2 = CcSubjsPeer::getInstanceFromPool($key2); + if (!$obj2) { + + $cls = CcSubjsPeer::getOMClass(false); + + $obj2 = new $cls(); + $obj2->hydrate($row, $startcol2); + CcSubjsPeer::addInstanceToPool($obj2, $key2); + } // if obj2 loaded + + // Add the $obj1 (CcSubjsToken) to the collection in $obj2 (CcSubjs) + $obj2->addCcSubjsToken($obj1); + } // if joined row not null + + $results[] = $obj1; + } + $stmt->closeCursor(); + return $results; + } + + /** + * Returns the TableMap related to this peer. + * This method is not needed for general use but a specific application could have a need. + * @return TableMap + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function getTableMap() + { + return Propel::getDatabaseMap(self::DATABASE_NAME)->getTable(self::TABLE_NAME); + } + + /** + * Add a TableMap instance to the database for this peer class. + */ + public static function buildTableMap() + { + $dbMap = Propel::getDatabaseMap(BaseCcSubjsTokenPeer::DATABASE_NAME); + if (!$dbMap->hasTable(BaseCcSubjsTokenPeer::TABLE_NAME)) + { + $dbMap->addTableObject(new CcSubjsTokenTableMap()); + } + } + + /** + * The class that the Peer will make instances of. + * + * If $withPrefix is true, the returned path + * uses a dot-path notation which is tranalted into a path + * relative to a location on the PHP include_path. + * (e.g. path.to.MyClass -> 'path/to/MyClass.php') + * + * @param boolean $withPrefix Whether or not to return the path with the class name + * @return string path.to.ClassName + */ + public static function getOMClass($withPrefix = true) + { + return $withPrefix ? CcSubjsTokenPeer::CLASS_DEFAULT : CcSubjsTokenPeer::OM_CLASS; + } + + /** + * Method perform an INSERT on the database, given a CcSubjsToken or Criteria object. + * + * @param mixed $values Criteria or CcSubjsToken object containing data that is used to create the INSERT statement. + * @param PropelPDO $con the PropelPDO connection to use + * @return mixed The new primary key. + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function doInsert($values, PropelPDO $con = null) + { + if ($con === null) { + $con = Propel::getConnection(CcSubjsTokenPeer::DATABASE_NAME, Propel::CONNECTION_WRITE); + } + + if ($values instanceof Criteria) { + $criteria = clone $values; // rename for clarity + } else { + $criteria = $values->buildCriteria(); // build Criteria from CcSubjsToken object + } + + if ($criteria->containsKey(CcSubjsTokenPeer::ID) && $criteria->keyContainsValue(CcSubjsTokenPeer::ID) ) { + throw new PropelException('Cannot insert a value for auto-increment primary key ('.CcSubjsTokenPeer::ID.')'); + } + + + // Set the correct dbName + $criteria->setDbName(self::DATABASE_NAME); + + try { + // use transaction because $criteria could contain info + // for more than one table (I guess, conceivably) + $con->beginTransaction(); + $pk = BasePeer::doInsert($criteria, $con); + $con->commit(); + } catch(PropelException $e) { + $con->rollBack(); + throw $e; + } + + return $pk; + } + + /** + * Method perform an UPDATE on the database, given a CcSubjsToken or Criteria object. + * + * @param mixed $values Criteria or CcSubjsToken object containing data that is used to create the UPDATE statement. + * @param PropelPDO $con The connection to use (specify PropelPDO connection object to exert more control over transactions). + * @return int The number of affected rows (if supported by underlying database driver). + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function doUpdate($values, PropelPDO $con = null) + { + if ($con === null) { + $con = Propel::getConnection(CcSubjsTokenPeer::DATABASE_NAME, Propel::CONNECTION_WRITE); + } + + $selectCriteria = new Criteria(self::DATABASE_NAME); + + if ($values instanceof Criteria) { + $criteria = clone $values; // rename for clarity + + $comparison = $criteria->getComparison(CcSubjsTokenPeer::ID); + $value = $criteria->remove(CcSubjsTokenPeer::ID); + if ($value) { + $selectCriteria->add(CcSubjsTokenPeer::ID, $value, $comparison); + } else { + $selectCriteria->setPrimaryTableName(CcSubjsTokenPeer::TABLE_NAME); + } + + } else { // $values is CcSubjsToken object + $criteria = $values->buildCriteria(); // gets full criteria + $selectCriteria = $values->buildPkeyCriteria(); // gets criteria w/ primary key(s) + } + + // set the correct dbName + $criteria->setDbName(self::DATABASE_NAME); + + return BasePeer::doUpdate($selectCriteria, $criteria, $con); + } + + /** + * Method to DELETE all rows from the cc_subjs_token table. + * + * @return int The number of affected rows (if supported by underlying database driver). + */ + public static function doDeleteAll($con = null) + { + if ($con === null) { + $con = Propel::getConnection(CcSubjsTokenPeer::DATABASE_NAME, Propel::CONNECTION_WRITE); + } + $affectedRows = 0; // initialize var to track total num of affected rows + try { + // use transaction because $criteria could contain info + // for more than one table or we could emulating ON DELETE CASCADE, etc. + $con->beginTransaction(); + $affectedRows += BasePeer::doDeleteAll(CcSubjsTokenPeer::TABLE_NAME, $con, CcSubjsTokenPeer::DATABASE_NAME); + // Because this db requires some delete cascade/set null emulation, we have to + // clear the cached instance *after* the emulation has happened (since + // instances get re-added by the select statement contained therein). + CcSubjsTokenPeer::clearInstancePool(); + CcSubjsTokenPeer::clearRelatedInstancePool(); + $con->commit(); + return $affectedRows; + } catch (PropelException $e) { + $con->rollBack(); + throw $e; + } + } + + /** + * Method perform a DELETE on the database, given a CcSubjsToken or Criteria object OR a primary key value. + * + * @param mixed $values Criteria or CcSubjsToken object or primary key or array of primary keys + * which is used to create the DELETE statement + * @param PropelPDO $con the connection to use + * @return int The number of affected rows (if supported by underlying database driver). This includes CASCADE-related rows + * if supported by native driver or if emulated using Propel. + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function doDelete($values, PropelPDO $con = null) + { + if ($con === null) { + $con = Propel::getConnection(CcSubjsTokenPeer::DATABASE_NAME, Propel::CONNECTION_WRITE); + } + + if ($values instanceof Criteria) { + // invalidate the cache for all objects of this type, since we have no + // way of knowing (without running a query) what objects should be invalidated + // from the cache based on this Criteria. + CcSubjsTokenPeer::clearInstancePool(); + // rename for clarity + $criteria = clone $values; + } elseif ($values instanceof CcSubjsToken) { // it's a model object + // invalidate the cache for this single object + CcSubjsTokenPeer::removeInstanceFromPool($values); + // create criteria based on pk values + $criteria = $values->buildPkeyCriteria(); + } else { // it's a primary key, or an array of pks + $criteria = new Criteria(self::DATABASE_NAME); + $criteria->add(CcSubjsTokenPeer::ID, (array) $values, Criteria::IN); + // invalidate the cache for this object(s) + foreach ((array) $values as $singleval) { + CcSubjsTokenPeer::removeInstanceFromPool($singleval); + } + } + + // Set the correct dbName + $criteria->setDbName(self::DATABASE_NAME); + + $affectedRows = 0; // initialize var to track total num of affected rows + + try { + // use transaction because $criteria could contain info + // for more than one table or we could emulating ON DELETE CASCADE, etc. + $con->beginTransaction(); + + $affectedRows += BasePeer::doDelete($criteria, $con); + CcSubjsTokenPeer::clearRelatedInstancePool(); + $con->commit(); + return $affectedRows; + } catch (PropelException $e) { + $con->rollBack(); + throw $e; + } + } + + /** + * Validates all modified columns of given CcSubjsToken object. + * If parameter $columns is either a single column name or an array of column names + * than only those columns are validated. + * + * NOTICE: This does not apply to primary or foreign keys for now. + * + * @param CcSubjsToken $obj The object to validate. + * @param mixed $cols Column name or array of column names. + * + * @return mixed TRUE if all columns are valid or the error message of the first invalid column. + */ + public static function doValidate(CcSubjsToken $obj, $cols = null) + { + $columns = array(); + + if ($cols) { + $dbMap = Propel::getDatabaseMap(CcSubjsTokenPeer::DATABASE_NAME); + $tableMap = $dbMap->getTable(CcSubjsTokenPeer::TABLE_NAME); + + if (! is_array($cols)) { + $cols = array($cols); + } + + foreach ($cols as $colName) { + if ($tableMap->containsColumn($colName)) { + $get = 'get' . $tableMap->getColumn($colName)->getPhpName(); + $columns[$colName] = $obj->$get(); + } + } + } else { + + } + + return BasePeer::doValidate(CcSubjsTokenPeer::DATABASE_NAME, CcSubjsTokenPeer::TABLE_NAME, $columns); + } + + /** + * Retrieve a single object by pkey. + * + * @param int $pk the primary key. + * @param PropelPDO $con the connection to use + * @return CcSubjsToken + */ + public static function retrieveByPK($pk, PropelPDO $con = null) + { + + if (null !== ($obj = CcSubjsTokenPeer::getInstanceFromPool((string) $pk))) { + return $obj; + } + + if ($con === null) { + $con = Propel::getConnection(CcSubjsTokenPeer::DATABASE_NAME, Propel::CONNECTION_READ); + } + + $criteria = new Criteria(CcSubjsTokenPeer::DATABASE_NAME); + $criteria->add(CcSubjsTokenPeer::ID, $pk); + + $v = CcSubjsTokenPeer::doSelect($criteria, $con); + + return !empty($v) > 0 ? $v[0] : null; + } + + /** + * Retrieve multiple objects by pkey. + * + * @param array $pks List of primary keys + * @param PropelPDO $con the connection to use + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function retrieveByPKs($pks, PropelPDO $con = null) + { + if ($con === null) { + $con = Propel::getConnection(CcSubjsTokenPeer::DATABASE_NAME, Propel::CONNECTION_READ); + } + + $objs = null; + if (empty($pks)) { + $objs = array(); + } else { + $criteria = new Criteria(CcSubjsTokenPeer::DATABASE_NAME); + $criteria->add(CcSubjsTokenPeer::ID, $pks, Criteria::IN); + $objs = CcSubjsTokenPeer::doSelect($criteria, $con); + } + return $objs; + } + +} // BaseCcSubjsTokenPeer + +// This is the static code needed to register the TableMap for this table with the main Propel class. +// +BaseCcSubjsTokenPeer::buildTableMap(); + diff --git a/airtime_mvc/application/models/airtime/om/BaseCcSubjsTokenQuery.php b/airtime_mvc/application/models/airtime/om/BaseCcSubjsTokenQuery.php new file mode 100644 index 000000000..c2ee6f7bf --- /dev/null +++ b/airtime_mvc/application/models/airtime/om/BaseCcSubjsTokenQuery.php @@ -0,0 +1,355 @@ +setModelAlias($modelAlias); + } + if ($criteria instanceof Criteria) { + $query->mergeWith($criteria); + } + return $query; + } + + /** + * Find object by primary key + * Use instance pooling to avoid a database query if the object exists + * + * $obj = $c->findPk(12, $con); + * + * @param mixed $key Primary key to use for the query + * @param PropelPDO $con an optional connection object + * + * @return CcSubjsToken|array|mixed the result, formatted by the current formatter + */ + public function findPk($key, $con = null) + { + if ((null !== ($obj = CcSubjsTokenPeer::getInstanceFromPool((string) $key))) && $this->getFormatter()->isObjectFormatter()) { + // the object is alredy in the instance pool + return $obj; + } else { + // the object has not been requested yet, or the formatter is not an object formatter + $criteria = $this->isKeepQuery() ? clone $this : $this; + $stmt = $criteria + ->filterByPrimaryKey($key) + ->getSelectStatement($con); + return $criteria->getFormatter()->init($criteria)->formatOne($stmt); + } + } + + /** + * Find objects by primary key + * + * $objs = $c->findPks(array(12, 56, 832), $con); + * + * @param array $keys Primary keys to use for the query + * @param PropelPDO $con an optional connection object + * + * @return PropelObjectCollection|array|mixed the list of results, formatted by the current formatter + */ + public function findPks($keys, $con = null) + { + $criteria = $this->isKeepQuery() ? clone $this : $this; + return $this + ->filterByPrimaryKeys($keys) + ->find($con); + } + + /** + * Filter the query by primary key + * + * @param mixed $key Primary key to use for the query + * + * @return CcSubjsTokenQuery The current query, for fluid interface + */ + public function filterByPrimaryKey($key) + { + return $this->addUsingAlias(CcSubjsTokenPeer::ID, $key, Criteria::EQUAL); + } + + /** + * Filter the query by a list of primary keys + * + * @param array $keys The list of primary key to use for the query + * + * @return CcSubjsTokenQuery The current query, for fluid interface + */ + public function filterByPrimaryKeys($keys) + { + return $this->addUsingAlias(CcSubjsTokenPeer::ID, $keys, Criteria::IN); + } + + /** + * Filter the query on the id column + * + * @param int|array $dbId The value to use as filter. + * Accepts an associative array('min' => $minValue, 'max' => $maxValue) + * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL + * + * @return CcSubjsTokenQuery The current query, for fluid interface + */ + public function filterByDbId($dbId = null, $comparison = null) + { + if (is_array($dbId) && null === $comparison) { + $comparison = Criteria::IN; + } + return $this->addUsingAlias(CcSubjsTokenPeer::ID, $dbId, $comparison); + } + + /** + * Filter the query on the user_id column + * + * @param int|array $dbUserId The value to use as filter. + * Accepts an associative array('min' => $minValue, 'max' => $maxValue) + * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL + * + * @return CcSubjsTokenQuery The current query, for fluid interface + */ + public function filterByDbUserId($dbUserId = null, $comparison = null) + { + if (is_array($dbUserId)) { + $useMinMax = false; + if (isset($dbUserId['min'])) { + $this->addUsingAlias(CcSubjsTokenPeer::USER_ID, $dbUserId['min'], Criteria::GREATER_EQUAL); + $useMinMax = true; + } + if (isset($dbUserId['max'])) { + $this->addUsingAlias(CcSubjsTokenPeer::USER_ID, $dbUserId['max'], Criteria::LESS_EQUAL); + $useMinMax = true; + } + if ($useMinMax) { + return $this; + } + if (null === $comparison) { + $comparison = Criteria::IN; + } + } + return $this->addUsingAlias(CcSubjsTokenPeer::USER_ID, $dbUserId, $comparison); + } + + /** + * Filter the query on the action column + * + * @param string $dbAction The value to use as filter. + * Accepts wildcards (* and % trigger a LIKE) + * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL + * + * @return CcSubjsTokenQuery The current query, for fluid interface + */ + public function filterByDbAction($dbAction = null, $comparison = null) + { + if (null === $comparison) { + if (is_array($dbAction)) { + $comparison = Criteria::IN; + } elseif (preg_match('/[\%\*]/', $dbAction)) { + $dbAction = str_replace('*', '%', $dbAction); + $comparison = Criteria::LIKE; + } + } + return $this->addUsingAlias(CcSubjsTokenPeer::ACTION, $dbAction, $comparison); + } + + /** + * Filter the query on the token column + * + * @param string $dbToken The value to use as filter. + * Accepts wildcards (* and % trigger a LIKE) + * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL + * + * @return CcSubjsTokenQuery The current query, for fluid interface + */ + public function filterByDbToken($dbToken = null, $comparison = null) + { + if (null === $comparison) { + if (is_array($dbToken)) { + $comparison = Criteria::IN; + } elseif (preg_match('/[\%\*]/', $dbToken)) { + $dbToken = str_replace('*', '%', $dbToken); + $comparison = Criteria::LIKE; + } + } + return $this->addUsingAlias(CcSubjsTokenPeer::TOKEN, $dbToken, $comparison); + } + + /** + * Filter the query on the created column + * + * @param string|array $dbCreated The value to use as filter. + * Accepts an associative array('min' => $minValue, 'max' => $maxValue) + * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL + * + * @return CcSubjsTokenQuery The current query, for fluid interface + */ + public function filterByDbCreated($dbCreated = null, $comparison = null) + { + if (is_array($dbCreated)) { + $useMinMax = false; + if (isset($dbCreated['min'])) { + $this->addUsingAlias(CcSubjsTokenPeer::CREATED, $dbCreated['min'], Criteria::GREATER_EQUAL); + $useMinMax = true; + } + if (isset($dbCreated['max'])) { + $this->addUsingAlias(CcSubjsTokenPeer::CREATED, $dbCreated['max'], Criteria::LESS_EQUAL); + $useMinMax = true; + } + if ($useMinMax) { + return $this; + } + if (null === $comparison) { + $comparison = Criteria::IN; + } + } + return $this->addUsingAlias(CcSubjsTokenPeer::CREATED, $dbCreated, $comparison); + } + + /** + * Filter the query by a related CcSubjs object + * + * @param CcSubjs $ccSubjs the related object to use as filter + * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL + * + * @return CcSubjsTokenQuery The current query, for fluid interface + */ + public function filterByCcSubjs($ccSubjs, $comparison = null) + { + return $this + ->addUsingAlias(CcSubjsTokenPeer::USER_ID, $ccSubjs->getDbId(), $comparison); + } + + /** + * Adds a JOIN clause to the query using the CcSubjs relation + * + * @param string $relationAlias optional alias for the relation + * @param string $joinType Accepted values are null, 'left join', 'right join', 'inner join' + * + * @return CcSubjsTokenQuery The current query, for fluid interface + */ + public function joinCcSubjs($relationAlias = '', $joinType = Criteria::INNER_JOIN) + { + $tableMap = $this->getTableMap(); + $relationMap = $tableMap->getRelation('CcSubjs'); + + // create a ModelJoin object for this join + $join = new ModelJoin(); + $join->setJoinType($joinType); + $join->setRelationMap($relationMap, $this->useAliasInSQL ? $this->getModelAlias() : null, $relationAlias); + if ($previousJoin = $this->getPreviousJoin()) { + $join->setPreviousJoin($previousJoin); + } + + // add the ModelJoin to the current object + if($relationAlias) { + $this->addAlias($relationAlias, $relationMap->getRightTable()->getName()); + $this->addJoinObject($join, $relationAlias); + } else { + $this->addJoinObject($join, 'CcSubjs'); + } + + return $this; + } + + /** + * Use the CcSubjs relation CcSubjs object + * + * @see useQuery() + * + * @param string $relationAlias optional alias for the relation, + * to be used as main alias in the secondary query + * @param string $joinType Accepted values are null, 'left join', 'right join', 'inner join' + * + * @return CcSubjsQuery A secondary query class using the current class as primary query + */ + public function useCcSubjsQuery($relationAlias = '', $joinType = Criteria::INNER_JOIN) + { + return $this + ->joinCcSubjs($relationAlias, $joinType) + ->useQuery($relationAlias ? $relationAlias : 'CcSubjs', 'CcSubjsQuery'); + } + + /** + * Exclude object from result + * + * @param CcSubjsToken $ccSubjsToken Object to remove from the list of results + * + * @return CcSubjsTokenQuery The current query, for fluid interface + */ + public function prune($ccSubjsToken = null) + { + if ($ccSubjsToken) { + $this->addUsingAlias(CcSubjsTokenPeer::ID, $ccSubjsToken->getDbId(), Criteria::NOT_EQUAL); + } + + return $this; + } + +} // BaseCcSubjsTokenQuery diff --git a/airtime_mvc/application/views/scripts/auth/password-change.phtml b/airtime_mvc/application/views/scripts/auth/password-change.phtml new file mode 100644 index 000000000..7c0a490fd --- /dev/null +++ b/airtime_mvc/application/views/scripts/auth/password-change.phtml @@ -0,0 +1 @@ +
form ?>
\ No newline at end of file diff --git a/airtime_mvc/application/views/scripts/auth/password-restore-after.phtml b/airtime_mvc/application/views/scripts/auth/password-restore-after.phtml new file mode 100644 index 000000000..686d7cb83 --- /dev/null +++ b/airtime_mvc/application/views/scripts/auth/password-restore-after.phtml @@ -0,0 +1 @@ +
Email sent
\ No newline at end of file diff --git a/airtime_mvc/application/views/scripts/auth/password-restore.phtml b/airtime_mvc/application/views/scripts/auth/password-restore.phtml new file mode 100644 index 000000000..7c0a490fd --- /dev/null +++ b/airtime_mvc/application/views/scripts/auth/password-restore.phtml @@ -0,0 +1 @@ +
form ?>
\ No newline at end of file diff --git a/airtime_mvc/build/schema.xml b/airtime_mvc/build/schema.xml index 7baf59132..d13731256 100644 --- a/airtime_mvc/build/schema.xml +++ b/airtime_mvc/build/schema.xml @@ -325,6 +325,19 @@ + + + + + + + + + + + + +
diff --git a/airtime_mvc/build/sql/schema.sql b/airtime_mvc/build/sql/schema.sql index 580d1b742..0aa50f834 100644 --- a/airtime_mvc/build/sql/schema.sql +++ b/airtime_mvc/build/sql/schema.sql @@ -448,6 +448,28 @@ CREATE TABLE "cc_subjs" COMMENT ON TABLE "cc_subjs" IS ''; +SET search_path TO public; +----------------------------------------------------------------------------- +-- cc_subjs_token +----------------------------------------------------------------------------- + +DROP TABLE "cc_subjs_token" CASCADE; + + +CREATE TABLE "cc_subjs_token" +( + "id" serial NOT NULL, + "user_id" INTEGER NOT NULL, + "action" VARCHAR(255) NOT NULL, + "token" VARCHAR(40) NOT NULL, + "created" TIMESTAMP NOT NULL, + PRIMARY KEY ("id"), + CONSTRAINT "cc_subjs_token_idx" UNIQUE ("token") +); + +COMMENT ON TABLE "cc_subjs_token" IS ''; + + SET search_path TO public; ----------------------------------------------------------------------------- -- cc_country @@ -557,3 +579,5 @@ ALTER TABLE "cc_schedule" ADD CONSTRAINT "cc_show_inst_fkey" FOREIGN KEY ("insta ALTER TABLE "cc_schedule" ADD CONSTRAINT "cc_show_file_fkey" FOREIGN KEY ("file_id") REFERENCES "cc_files" ("id") ON DELETE CASCADE; ALTER TABLE "cc_sess" ADD CONSTRAINT "cc_sess_userid_fkey" FOREIGN KEY ("userid") REFERENCES "cc_subjs" ("id") ON DELETE CASCADE; + +ALTER TABLE "cc_subjs_token" ADD CONSTRAINT "cc_subjs_token_userid_fkey" FOREIGN KEY ("user_id") REFERENCES "cc_subjs" ("id") ON DELETE CASCADE; From 53d504f26ef9fa9ff9fc4ae998cea81b26871c87 Mon Sep 17 00:00:00 2001 From: Naomi Aro Date: Tue, 27 Dec 2011 14:33:22 -0800 Subject: [PATCH 03/29] CC-3110 : Password reset --- .../application/controllers/AuthController.php | 2 +- airtime_mvc/application/models/Auth.php | 11 +++++++---- airtime_mvc/application/models/Email.php | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/airtime_mvc/application/controllers/AuthController.php b/airtime_mvc/application/controllers/AuthController.php index cd11f9c80..ef6733383 100644 --- a/airtime_mvc/application/controllers/AuthController.php +++ b/airtime_mvc/application/controllers/AuthController.php @@ -24,7 +24,7 @@ class AuthController extends Zend_Controller_Action $auth = new Application_Model_Auth(); $auth->sendPasswordRestoreLink($user, $this->view); - //$this->_helper->redirector('password-restore-after', 'auth'); + $this->_helper->redirector('password-restore-after', 'auth'); } else { $form->email->addError($this->view->translate("Given email not found.")); diff --git a/airtime_mvc/application/models/Auth.php b/airtime_mvc/application/models/Auth.php index fa33f8555..11d0c0519 100644 --- a/airtime_mvc/application/models/Auth.php +++ b/airtime_mvc/application/models/Auth.php @@ -12,7 +12,7 @@ class Application_Model_Auth { $info = new CcSubjsToken(); $info->setDbUserId($user_id); $info->setDbAction($action); - $info->setDbToken(sha1($token + $salt)); + $info->setDbToken(sha1($token.$salt)); $info->setDbCreated(gmdate('Y-m-d H:i:s')); $info->save(); @@ -23,12 +23,15 @@ class Application_Model_Auth { { $token = $this->generateToken('password.restore', $user->getDbId()); - $e_link = $view->url(array('user_id' => $user->getDbId(), + $e_link_protocol = empty($_SERVER['HTTPS']) ? "http" : "https"; + $e_link_base = $_SERVER['SERVER_NAME']; + $e_link_path = $view->url(array('user_id' => $user->getDbId(), 'token' => $token ), 'password-change'); - $message = "Click this link: {$e_link}"; + $message = "Click this link: {$e_link_protocol}://{$e_link_base}{$e_link_path}"; + Application_Model_Email::send('Airtime Password Reset', $message, $user->getDbEmail()); } @@ -47,7 +50,7 @@ class Application_Model_Auth { $token_info = CcSubjsTokenQuery::create() ->filterByDbAction($action) ->filterByDbUserId($user_id) - ->filterByDbToken(sha1($token + $salt)) + ->filterByDbToken(sha1($token.$salt)) ->findOne(); if (empty($token_info)) { diff --git a/airtime_mvc/application/models/Email.php b/airtime_mvc/application/models/Email.php index d8d3b6746..73fd3c048 100644 --- a/airtime_mvc/application/models/Email.php +++ b/airtime_mvc/application/models/Email.php @@ -25,7 +25,7 @@ class Application_Model_Email { $mail = new Zend_Mail('utf-8'); $mail->setSubject($subject); $mail->setBodyText($message); - $mail->setFrom(isset($from) ? $from : 'naomiaro@gmail.com'); + $mail->setFrom(isset($from) ? $from : 'naomi.aro@sourcefabric.org'); foreach ((array) $tos as $to) { $mail->addTo($to); From 5fa92f3d17acefa4a1fc689d6a925d520f3be915 Mon Sep 17 00:00:00 2001 From: James Date: Wed, 4 Jan 2012 12:47:27 -0500 Subject: [PATCH 04/29] - temp commit on group action --- .../controllers/LibraryController.php | 1 + airtime_mvc/application/models/StoredFile.php | 19 +++++++-- airtime_mvc/public/css/media_library.css | 10 ++++- .../public/js/airtime/library/library.js | 41 +++++++++++-------- 4 files changed, 48 insertions(+), 23 deletions(-) diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index f0b72099d..7bad3225e 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -182,6 +182,7 @@ class LibraryController extends Zend_Controller_Action public function contentsAction() { $post = $this->getRequest()->getPost(); + Logging::log(print_r($post, true)); $datatables = Application_Model_StoredFile::searchFilesForPlaylistBuilder($post); //format clip lengh to 1 decimal diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index d48c3c420..8b6fe4a99 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -666,9 +666,8 @@ class Application_Model_StoredFile { UNION (".$fileSelect."id FROM ".$CC_CONFIG["filesTable"]." AS FILES)) AS RESULTS"; - + return Application_Model_StoredFile::searchFiles($fromTable, $datatables); - } public static function searchPlaylistsForSchedule($datatables) @@ -690,7 +689,12 @@ class Application_Model_StoredFile { $searchTerms = explode(" ", $data["sSearch"]); $selectorCount = "SELECT COUNT(*)"; - $selectorRows = "SELECT ". join("," , $columnsDisplayed); + foreach( $columnsDisplayed as $key=>$col){ + if($col == ''){ + unset($columnsDisplayed[$key]); + } + } + $selectorRows = "SELECT " . join(',', $columnsDisplayed ); $sql = $selectorCount." FROM ".$fromTable; $totalRows = $CC_DBC->getOne($sql); @@ -733,7 +737,7 @@ class Application_Model_StoredFile { // End Order By clause //ordered by integer as expected by datatables. - $CC_DBC->setFetchMode(DB_FETCHMODE_ORDERED); + //$CC_DBC->setFetchMode(DB_FETCHMODE_ORDERED); if(isset($where)) { $where = join(" AND ", $where); @@ -746,6 +750,13 @@ class Application_Model_StoredFile { } $results = $CC_DBC->getAll($sql); + // add checkbox row + foreach($results as &$row){ + $row['checkbox'] = ""; + } + //$results['checkbox'] + //$results = $CC_DBC->getAssoc($sql); + Logging::log(print_r($results, true)); //echo $results; //echo $sql; diff --git a/airtime_mvc/public/css/media_library.css b/airtime_mvc/public/css/media_library.css index dbef3052a..925baa36a 100644 --- a/airtime_mvc/public/css/media_library.css +++ b/airtime_mvc/public/css/media_library.css @@ -66,4 +66,12 @@ -moz-user-select: none; -o-user-select: none; user-select: none; -} \ No newline at end of file +} + +.datatable_checkbox { + text-align: center; +} + +.datatable_checkbox .DataTables_sort_wrapper { + text-align: center; +} diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index eefa73ccf..88fc6a9aa 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -1,13 +1,15 @@ +var dTable; + //used by jjmenu function getId() { - var tr_id = $(this.triggerElement).attr("id"); + var tr_id = $(this.triggerElement).parent().attr("id"); tr_id = tr_id.split("_"); return tr_id[1]; } function getType() { - var tr_id = $(this.triggerElement).attr("id"); + var tr_id = $(this.triggerElement).parent().attr("id"); tr_id = tr_id.split("_"); return tr_id[0]; @@ -90,7 +92,7 @@ function addLibraryItemEvents() { cursor: 'pointer' }); - $('#library_display tbody tr') + $('#library_display tbody tr td').not('[class=datatable_checkbox]') .jjmenu("click", [{get:"/Library/context-menu/format/json/id/#id#/type/#type#"}], {id: getId, type: getType}, @@ -101,20 +103,20 @@ function addLibraryItemEvents() { function dtRowCallback( nRow, aData, iDisplayIndex, iDisplayIndexFull ) { var id, type, once; - type = aData[6].substring(0,2); - id = aData[0]; + type = aData["ftype"].substring(0,2); + id = aData["id"]; if(type == "au") { - $('td:eq(5)', nRow).html( '' ); + $('td:eq(6)', nRow).html( '' ); } else if(type == "pl") { - $('td:eq(5)', nRow).html( '' ); + $('td:eq(6)', nRow).html( '' ); } $(nRow).attr("id", type+'_'+id); // insert id on lenth field - $('td:eq(4)', nRow).attr("id", "length"); + $('td:eq(5)', nRow).attr("id", "length"); return nRow; } @@ -123,6 +125,8 @@ function dtDrawCallback() { addLibraryItemEvents(); addMetadataQtip(); saveNumEntriesSetting(); + var temp = dTable.fnGetData() + console.log(temp) } function addProgressIcon(id) { @@ -298,29 +302,30 @@ function getNumEntriesPreference(data) { } function createDataTable(data) { - var dTable = $('#library_display').dataTable( { + dTable = $('#library_display').dataTable( { "bProcessing": true, "bServerSide": true, "sAjaxSource": "/Library/contents/format/json", - "fnServerData": function ( sSource, aoData, fnCallback ) { + "fnServerData": function ( sSource, aoData, testCallback ) { $.ajax( { "dataType": 'json', "type": "POST", "url": sSource, "data": aoData, - "success": fnCallback + "success": testCallback } ); }, "fnRowCallback": dtRowCallback, "fnDrawCallback": dtDrawCallback, "aoColumns": [ - /* Id */ { "sName": "id", "bSearchable": false, "bVisible": false }, - /* Title */ { "sTitle": "Title", "sName": "track_title" }, - /* Creator */ { "sTitle": "Creator", "sName": "artist_name" }, - /* Album */ { "sTitle": "Album", "sName": "album_title" }, - /* Genre */ { "sTitle": "Genre", "sName": "genre" }, - /* Length */ { "sTitle": "Length", "sName": "length" }, - /* Type */ { "sTitle": "Type", "sName": "ftype", "bSearchable": false } + /* Checkbox */ { "sTitle": "", "bSortable": false, "bSearchable": false, "mDataProp": "checkbox", "sWidth": "25px", "sClass": "datatable_checkbox" }, + /* Id */ { "sName": "id", "bSearchable": false, "bVisible": false, "mDataProp": "id" }, + /* Title */ { "sTitle": "Title", "sName": "track_title", "mDataProp": "track_title" }, + /* Creator */ { "sTitle": "Creator", "sName": "artist_name", "mDataProp": "artist_name" }, + /* Album */ { "sTitle": "Album", "sName": "album_title", "mDataProp": "album_title" }, + /* Genre */ { "sTitle": "Genre", "sName": "genre", "mDataProp": "genre" }, + /* Length */ { "sTitle": "Length", "sName": "length", "mDataProp": "length" }, + /* Type */ { "sTitle": "Type", "sName": "ftype", "bSearchable": false, "mDataProp": "ftype", "sWidth": "50px" }, ], "aaSorting": [[2,'asc']], "sPaginationType": "full_numbers", From a63d975fce1505d76e3d21930457ef41fbc91f7f Mon Sep 17 00:00:00 2001 From: Yuchen Wang Date: Wed, 4 Jan 2012 17:06:58 -0500 Subject: [PATCH 05/29] CC-2355: Repeating show should default to 'No End' Done --- airtime_mvc/application/forms/AddShowRepeats.php | 1 + 1 file changed, 1 insertion(+) diff --git a/airtime_mvc/application/forms/AddShowRepeats.php b/airtime_mvc/application/forms/AddShowRepeats.php index da8a0d306..ca20c5bae 100644 --- a/airtime_mvc/application/forms/AddShowRepeats.php +++ b/airtime_mvc/application/forms/AddShowRepeats.php @@ -52,6 +52,7 @@ class Application_Form_AddShowRepeats extends Zend_Form_SubForm $this->addElement('checkbox', 'add_show_no_end', array( 'label' => 'No End?', 'required' => false, + 'checked' => true, )); } From 476484a269ac4fde7c7c153aefc44045c8d12c46 Mon Sep 17 00:00:00 2001 From: Yuchen Wang Date: Wed, 4 Jan 2012 17:08:38 -0500 Subject: [PATCH 06/29] CC-2985: Pop-up metadata box in Playlist Builder does not show Language field Done --- .../views/scripts/library/get-file-meta-data.ajax.phtml | 1 + 1 file changed, 1 insertion(+) diff --git a/airtime_mvc/application/views/scripts/library/get-file-meta-data.ajax.phtml b/airtime_mvc/application/views/scripts/library/get-file-meta-data.ajax.phtml index 2e0bd3864..43af9afcf 100644 --- a/airtime_mvc/application/views/scripts/library/get-file-meta-data.ajax.phtml +++ b/airtime_mvc/application/views/scripts/library/get-file-meta-data.ajax.phtml @@ -15,6 +15,7 @@
Copyright:md["MDATA_KEY_COPYRIGHT"]);?>
Isrc Number:md["MDATA_KEY_ISRC"]);?>
Website:md["MDATA_KEY_URL"]);?>
+
Language:md["MDATA_KEY_LANGUAGE"]);?>
From 0df23305a08006f0b068555b3c7266073a5dd13b Mon Sep 17 00:00:00 2001 From: Yuchen Wang Date: Wed, 4 Jan 2012 17:09:16 -0500 Subject: [PATCH 07/29] CC-2237: Default fade time should be non-zero number of seconds Done --- airtime_mvc/application/forms/GeneralPreferences.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/application/forms/GeneralPreferences.php b/airtime_mvc/application/forms/GeneralPreferences.php index 1514e1460..a3da6f30a 100644 --- a/airtime_mvc/application/forms/GeneralPreferences.php +++ b/airtime_mvc/application/forms/GeneralPreferences.php @@ -11,7 +11,7 @@ class Application_Form_GeneralPreferences extends Zend_Form_SubForm $defaultFade = Application_Model_Preference::GetDefaultFade(); if($defaultFade == ""){ - $defaultFade = '00:00:00.000000'; + $defaultFade = '00:00:00.500000'; } //Station name From 1c9b134748caea699f882cb3f5a26966d583828a Mon Sep 17 00:00:00 2001 From: Yuchen Wang Date: Wed, 4 Jan 2012 17:10:14 -0500 Subject: [PATCH 08/29] CC-3183: recorder shows have extra 1ms which cause the now playing to report the show exceeding its time Done --- airtime_mvc/application/models/Nowplaying.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/application/models/Nowplaying.php b/airtime_mvc/application/models/Nowplaying.php index b59bb4e6a..95037cb00 100644 --- a/airtime_mvc/application/models/Nowplaying.php +++ b/airtime_mvc/application/models/Nowplaying.php @@ -23,8 +23,9 @@ class Application_Model_Nowplaying $showEnds = $showEndDateTime->format("Y-m-d H:i:s"); $itemStarts = $itemStartDateTime->format("Y-m-d H:i:s"); $itemEnds = $itemEndDateTime->format("Y-m-d H:i:s"); - - $status = ($dbRow['show_ends'] < $dbRow['item_ends']) ? "x" : ""; + + // Allow show to exceed 1 second per CC-3183 + $status = ($showEnds < $itemEnds) ? "x" : ""; $type = "a"; $type .= ($itemEndDateTime->getTimestamp() > $epochNow && $itemStartDateTime->getTimestamp() <= $epochNow) ? "c" : ""; From 722306928bd1fa2f9f5bf3899ecb625c3bcaa55e Mon Sep 17 00:00:00 2001 From: Yuchen Wang Date: Wed, 4 Jan 2012 17:15:15 -0500 Subject: [PATCH 09/29] CC-3114: Show Content Dialog doesn't display total time Done --- .../views/scripts/schedule/show-content-dialog.phtml | 6 ++++++ airtime_mvc/public/js/airtime/schedule/schedule.js | 6 +++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml b/airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml index 8fb4346d0..a48a41399 100644 --- a/airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml +++ b/airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml @@ -24,4 +24,10 @@
+
+
+ timeFilled; ?> +
+ showLength; ?> +
diff --git a/airtime_mvc/public/js/airtime/schedule/schedule.js b/airtime_mvc/public/js/airtime/schedule/schedule.js index 6cc8858bf..c1e3c1be1 100644 --- a/airtime_mvc/public/js/airtime/schedule/schedule.js +++ b/airtime_mvc/public/js/airtime/schedule/schedule.js @@ -219,7 +219,11 @@ function buildContentDialog(json){ alertShowErrorAndReload(); } var dialog = $(json.dialog); - + + dialog.find("#show_progressbar").progressbar({ + value: json.percentFilled + }); + var viewportwidth; var viewportheight; From 1044881666bce1d0c516763f11490a9461f45f7e Mon Sep 17 00:00:00 2001 From: Yuchen Wang Date: Thu, 5 Jan 2012 10:30:37 -0500 Subject: [PATCH 10/29] CC-3114: Show Content Dialog doesn't display total time Somehow this file didn't get committed... --- airtime_mvc/application/controllers/ScheduleController.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index c4afb1622..9895b7d57 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -443,7 +443,10 @@ class ScheduleController extends Zend_Controller_Action "Rebroadcast of show \"$originalShowName\" from " .$originalDateTime->format("l, F jS")." at ".$originalDateTime->format("G:i"); } - $this->view->showContent = $show->getShowListContent(); + $this->view->showLength = $show->getShowLength(); + $this->view->timeFilled = $show->getTimeScheduled(); + $this->view->percentFilled = $show->getPercentScheduled(); + $this->view->showContent = $show->getShowListContent(); $this->view->dialog = $this->view->render('schedule/show-content-dialog.phtml'); unset($this->view->showContent); } From 61c5355e8a490e9ce1e17f71f24e92ed5312208f Mon Sep 17 00:00:00 2001 From: James Date: Fri, 6 Jan 2012 15:47:11 -0500 Subject: [PATCH 11/29] cc-2977: getting close!!! --- .../application/controllers/ApiController.php | 14 ++- airtime_mvc/application/models/MusicDir.php | 66 +++++++++++-- airtime_mvc/application/models/StoredFile.php | 23 ++++- .../models/airtime/map/CcFilesTableMap.php | 3 +- .../airtime/map/CcMusicDirsTableMap.php | 3 +- .../models/airtime/om/BaseCcFiles.php | 92 +++++++++++++++---- .../models/airtime/om/BaseCcFilesPeer.php | 31 ++++--- .../models/airtime/om/BaseCcFilesQuery.php | 21 +++++ .../models/airtime/om/BaseCcMusicDirs.php | 77 +++++++++++++++- .../models/airtime/om/BaseCcMusicDirsPeer.php | 34 +++---- .../airtime/om/BaseCcMusicDirsQuery.php | 21 +++++ airtime_mvc/build/schema.xml | 4 +- airtime_mvc/build/sql/schema.sql | 4 +- 13 files changed, 323 insertions(+), 70 deletions(-) diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index 332a42ce0..d996d6d4c 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -560,7 +560,7 @@ class ApiController extends Zend_Controller_Action // update import timestamp Application_Model_Preference::SetImportTimestamp(); - + Logging::log("mode: ".$mode); if ($mode == "create") { $filepath = $md['MDATA_KEY_FILEPATH']; $filepath = str_replace("\\", "", $filepath); @@ -569,10 +569,18 @@ class ApiController extends Zend_Controller_Action if (is_null($file)) { $file = Application_Model_StoredFile::Insert($md); + Logging::log("file: ".print_r($file, true)); } else { - $this->view->error = "File already exists in Airtime."; - return; + // path already exist + if($file->getFileExistFlag()){ + // file marked as exists + $this->view->error = "File already exists in Airtime."; + return; + }else{ + // file marked as not exists + $file->setFileExistFlag(true); + } } } else if ($mode == "modify") { diff --git a/airtime_mvc/application/models/MusicDir.php b/airtime_mvc/application/models/MusicDir.php index 3b26c6da9..cb2a0cea2 100644 --- a/airtime_mvc/application/models/MusicDir.php +++ b/airtime_mvc/application/models/MusicDir.php @@ -40,24 +40,50 @@ class Application_Model_MusicDir { $this->_dir->save(); } + public function setRemoved($flag){ + $this->_dir->setRemoved($flag); + $this->_dir->save(); + } + + public function getRemoved(){ + return $this->_dir->getRemoved(); + } + public function remove() { global $CC_DBC; - +Logging::log("remove!!"); $music_dir_id = $this->getId(); $sql = "SELECT DISTINCT s.instance_id from cc_music_dirs as md LEFT JOIN cc_files as f on f.directory = md.id RIGHT JOIN cc_schedule as s on s.file_id = f.id WHERE md.id = $music_dir_id"; $show_instances = $CC_DBC->GetAll($sql); + + // get all the files on this dir + $sql = "SELECT f.id FROM cc_music_dirs as md LEFT JOIN cc_files as f on f.directory = md.id WHERE md.id = $music_dir_id"; + $files = $CC_DBC->GetAll($sql); + + // set file_exist flag to false + foreach( $files as $file_row ){ + Logging::log(print_r($file_row['id'], true)); + $temp_file = Application_Model_StoredFile::Recall($file_row['id']); + $temp_file->setFileExistFlag(false); + } + +Logging::log("remove!!222222"); +Logging::log(print_r($this->_dir,true)); - $this->_dir->delete(); - + // set Removed flat to true + self::setRemoved(true); + //$res = $this->_dir->delete(); + +Logging::log("remove!!44444"); foreach ($show_instances as $show_instance_row) { $temp_show = new Application_Model_ShowInstance($show_instance_row["instance_id"]); $temp_show->updateScheduledTime(); } - +Logging::log("remove end!!"); Application_Model_RabbitMq::PushSchedule(); } @@ -93,7 +119,7 @@ class Application_Model_MusicDir { public static function isPathValid($p_path){ $dirs = self::getWatchedDirs(); $dirs[] = self::getStorDir(); - +Logging::log("dirs: ".print_r($dirs, true)); foreach ($dirs as $dirObj){ $dir = $dirObj->getDirectory(); $diff = strlen($dir) - strlen($p_path); @@ -118,7 +144,21 @@ class Application_Model_MusicDir { if(!is_dir($p_path)){ return array("code"=>2, "error"=>"'$p_path' is not a valid directory."); } - $dir = new CcMusicDirs(); + $real_path = realpath($p_path)."/"; + if($real_path != "/"){ + $p_path = $real_path; + } + Logging::log("dir:".print_r($p_path, true)); + $exist_dir = self::getDirByPath($p_path); + Logging::log(print_r($exist_dir, true)); + if( $exist_dir == NULL ){ + Logging::log("new"); + $dir = new CcMusicDirs(); + }else{ + Logging::log("exist"); + $dir = $exist_dir; + } + $dir->setType($p_type); $p_path = realpath($p_path)."/"; @@ -127,9 +167,12 @@ class Application_Model_MusicDir { /* isPathValid() checks if path is a substring or a superstring of an * existing dir and if not, throws NestedDirectoryException */ self::isPathValid($p_path); + $dir->setRemoved(false); $dir->setDirectory($p_path); - - $dir->save(); + Logging::log("dir obj:".print_r($dir, true)); + if( $exist_dir == NULL ){ + $dir->save(); + } return array("code"=>0); } catch (NestedDirectoryException $nde){ $msg = $nde->getMessage(); @@ -200,6 +243,7 @@ class Application_Model_MusicDir { public static function getDirByPath($p_path) { + Logging::log($p_path); $dir = CcMusicDirsQuery::create() ->filterByDirectory($p_path) ->findOne(); @@ -219,6 +263,7 @@ class Application_Model_MusicDir { $dirs = CcMusicDirsQuery::create() ->filterByType("watched") + ->filterByRemoved(false) ->find(); foreach($dirs as $dir) { @@ -248,7 +293,6 @@ class Application_Model_MusicDir { } $dir = self::getStorDir(); // if $p_dir doesn't exist in DB - $p_dir = realpath($p_dir)."/"; $exist = $dir->getDirByPath($p_dir); if($exist == NULL){ $dir->setDirectory($p_dir); @@ -267,6 +311,7 @@ class Application_Model_MusicDir { { $dirs = CcMusicDirsQuery::create() ->filterByType(array("watched", "stor")) + ->filterByRemoved(false) ->find(); foreach($dirs as $dir) { @@ -286,6 +331,7 @@ class Application_Model_MusicDir { $p_dir = $real_path; } $dir = Application_Model_MusicDir::getDirByPath($p_dir); + Logging::log(print_r($dir,true)); if($dir == NULL){ return array("code"=>1,"error"=>"'$p_dir' doesn't exist in the watched list."); }else{ @@ -300,7 +346,7 @@ class Application_Model_MusicDir { public static function splitFilePath($p_filepath) { $mus_dir = self::getWatchedDirFromFilepath($p_filepath); - +Logging::log("mus_dir:".print_r($mus_dir, true)); if(is_null($mus_dir)) { return null; } diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index d48c3c420..48c0daa12 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -310,8 +310,13 @@ class Application_Model_StoredFile { } } - Application_Model_Playlist::DeleteFileFromAllPlaylists($this->getId()); - $this->_file->delete(); + // don't delete from the playslist. We might want to put a flag + //Application_Model_Playlist::DeleteFileFromAllPlaylists($this->getId()); + + // set file_exist falg to false + $this->_file->setDbFileExist(false); + $this->_file->save(); + //$this->_file->delete(); if (isset($res)) { return $res; @@ -426,6 +431,7 @@ class Application_Model_StoredFile { public function setFilePath($p_filepath) { $path_info = Application_Model_MusicDir::splitFilePath($p_filepath); + Logging::log("path_info:".print_r($path_info, true)); if (is_null($path_info)) { return -1; } @@ -665,7 +671,7 @@ class Application_Model_StoredFile { UNION - (".$fileSelect."id FROM ".$CC_CONFIG["filesTable"]." AS FILES)) AS RESULTS"; + (".$fileSelect."id FROM ".$CC_CONFIG["filesTable"]." AS FILES WHERE file_exist = 'TRUE')) AS RESULTS"; return Application_Model_StoredFile::searchFiles($fromTable, $datatables); @@ -744,7 +750,7 @@ class Application_Model_StoredFile { else { $sql = $selectorRows." FROM ".$fromTable." ORDER BY ".$orderby." OFFSET ".$data["iDisplayStart"]." LIMIT ".$data["iDisplayLength"]; } - + $results = $CC_DBC->getAll($sql); //echo $results; //echo $sql; @@ -955,6 +961,15 @@ class Application_Model_StoredFile { public function getSoundCloudErrorMsg(){ return $this->_file->getDbSoundCloudErrorMsg(); } + + public function setFileExistFlag($flag){ + $this->_file->setDbFileExist($flag) + ->save(); + } + + public function getFileExistFlag(){ + return $this->_file->getDbFileExist(); + } public function uploadToSoundCloud() { diff --git a/airtime_mvc/application/models/airtime/map/CcFilesTableMap.php b/airtime_mvc/application/models/airtime/map/CcFilesTableMap.php index 38d2e3955..e10bd9fab 100644 --- a/airtime_mvc/application/models/airtime/map/CcFilesTableMap.php +++ b/airtime_mvc/application/models/airtime/map/CcFilesTableMap.php @@ -93,6 +93,7 @@ class CcFilesTableMap extends TableMap { $this->addColumn('SUBJECT', 'DbSubject', 'VARCHAR', false, 512, null); $this->addColumn('CONTRIBUTOR', 'DbContributor', 'VARCHAR', false, 512, null); $this->addColumn('LANGUAGE', 'DbLanguage', 'VARCHAR', false, 512, null); + $this->addColumn('FILE_EXIST', 'DbFileExist', 'BOOLEAN', false, null, true); $this->addColumn('SOUNDCLOUD_ID', 'DbSoundcloudId', 'INTEGER', false, null, null); $this->addColumn('SOUNDCLOUD_ERROR_CODE', 'DbSoundcloudErrorCode', 'INTEGER', false, null, null); $this->addColumn('SOUNDCLOUD_ERROR_MSG', 'DbSoundcloudErrorMsg', 'VARCHAR', false, 512, null); @@ -106,7 +107,7 @@ class CcFilesTableMap extends TableMap { public function buildRelations() { $this->addRelation('CcSubjs', 'CcSubjs', RelationMap::MANY_TO_ONE, array('editedby' => 'id', ), null, null); - $this->addRelation('CcMusicDirs', 'CcMusicDirs', RelationMap::MANY_TO_ONE, array('directory' => 'id', ), 'CASCADE', null); + $this->addRelation('CcMusicDirs', 'CcMusicDirs', RelationMap::MANY_TO_ONE, array('directory' => 'id', ), null, null); $this->addRelation('CcShowInstances', 'CcShowInstances', RelationMap::ONE_TO_MANY, array('id' => 'file_id', ), 'CASCADE', null); $this->addRelation('CcPlaylistcontents', 'CcPlaylistcontents', RelationMap::ONE_TO_MANY, array('id' => 'file_id', ), 'CASCADE', null); $this->addRelation('CcSchedule', 'CcSchedule', RelationMap::ONE_TO_MANY, array('id' => 'file_id', ), 'CASCADE', null); diff --git a/airtime_mvc/application/models/airtime/map/CcMusicDirsTableMap.php b/airtime_mvc/application/models/airtime/map/CcMusicDirsTableMap.php index 022ef658c..dcd3d3ba1 100644 --- a/airtime_mvc/application/models/airtime/map/CcMusicDirsTableMap.php +++ b/airtime_mvc/application/models/airtime/map/CcMusicDirsTableMap.php @@ -41,6 +41,7 @@ class CcMusicDirsTableMap extends TableMap { $this->addPrimaryKey('ID', 'Id', 'INTEGER', true, null, null); $this->addColumn('DIRECTORY', 'Directory', 'LONGVARCHAR', false, null, null); $this->addColumn('TYPE', 'Type', 'VARCHAR', false, 255, null); + $this->addColumn('REMOVED', 'Removed', 'BOOLEAN', false, null, false); // validators } // initialize() @@ -49,7 +50,7 @@ class CcMusicDirsTableMap extends TableMap { */ public function buildRelations() { - $this->addRelation('CcFiles', 'CcFiles', RelationMap::ONE_TO_MANY, array('id' => 'directory', ), 'CASCADE', null); + $this->addRelation('CcFiles', 'CcFiles', RelationMap::ONE_TO_MANY, array('id' => 'directory', ), null, null); } // buildRelations() } // CcMusicDirsTableMap diff --git a/airtime_mvc/application/models/airtime/om/BaseCcFiles.php b/airtime_mvc/application/models/airtime/om/BaseCcFiles.php index 0882018d1..cdf394d6e 100644 --- a/airtime_mvc/application/models/airtime/om/BaseCcFiles.php +++ b/airtime_mvc/application/models/airtime/om/BaseCcFiles.php @@ -360,6 +360,13 @@ abstract class BaseCcFiles extends BaseObject implements Persistent */ protected $language; + /** + * The value for the file_exist field. + * Note: this column has a database default value of: true + * @var boolean + */ + protected $file_exist; + /** * The value for the soundcloud_id field. * @var int @@ -437,6 +444,7 @@ abstract class BaseCcFiles extends BaseObject implements Persistent $this->filepath = ''; $this->state = 'empty'; $this->currentlyaccessing = 0; + $this->file_exist = true; } /** @@ -1045,6 +1053,16 @@ abstract class BaseCcFiles extends BaseObject implements Persistent return $this->language; } + /** + * Get the [file_exist] column value. + * + * @return boolean + */ + public function getDbFileExist() + { + return $this->file_exist; + } + /** * Get the [soundcloud_id] column value. * @@ -2251,6 +2269,26 @@ abstract class BaseCcFiles extends BaseObject implements Persistent return $this; } // setDbLanguage() + /** + * Set the value of [file_exist] column. + * + * @param boolean $v new value + * @return CcFiles The current object (for fluent API support) + */ + public function setDbFileExist($v) + { + if ($v !== null) { + $v = (boolean) $v; + } + + if ($this->file_exist !== $v || $this->isNew()) { + $this->file_exist = $v; + $this->modifiedColumns[] = CcFilesPeer::FILE_EXIST; + } + + return $this; + } // setDbFileExist() + /** * Set the value of [soundcloud_id] column. * @@ -2365,6 +2403,10 @@ abstract class BaseCcFiles extends BaseObject implements Persistent return false; } + if ($this->file_exist !== true) { + return false; + } + // otherwise, everything was equal, so return TRUE return true; } // hasOnlyDefaultValues() @@ -2442,10 +2484,11 @@ abstract class BaseCcFiles extends BaseObject implements Persistent $this->subject = ($row[$startcol + 52] !== null) ? (string) $row[$startcol + 52] : null; $this->contributor = ($row[$startcol + 53] !== null) ? (string) $row[$startcol + 53] : null; $this->language = ($row[$startcol + 54] !== null) ? (string) $row[$startcol + 54] : null; - $this->soundcloud_id = ($row[$startcol + 55] !== null) ? (int) $row[$startcol + 55] : null; - $this->soundcloud_error_code = ($row[$startcol + 56] !== null) ? (int) $row[$startcol + 56] : null; - $this->soundcloud_error_msg = ($row[$startcol + 57] !== null) ? (string) $row[$startcol + 57] : null; - $this->soundcloud_link_to_file = ($row[$startcol + 58] !== null) ? (string) $row[$startcol + 58] : null; + $this->file_exist = ($row[$startcol + 55] !== null) ? (boolean) $row[$startcol + 55] : null; + $this->soundcloud_id = ($row[$startcol + 56] !== null) ? (int) $row[$startcol + 56] : null; + $this->soundcloud_error_code = ($row[$startcol + 57] !== null) ? (int) $row[$startcol + 57] : null; + $this->soundcloud_error_msg = ($row[$startcol + 58] !== null) ? (string) $row[$startcol + 58] : null; + $this->soundcloud_link_to_file = ($row[$startcol + 59] !== null) ? (string) $row[$startcol + 59] : null; $this->resetModified(); $this->setNew(false); @@ -2454,7 +2497,7 @@ abstract class BaseCcFiles extends BaseObject implements Persistent $this->ensureConsistency(); } - return $startcol + 59; // 59 = CcFilesPeer::NUM_COLUMNS - CcFilesPeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 60; // 60 = CcFilesPeer::NUM_COLUMNS - CcFilesPeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { throw new PropelException("Error populating CcFiles object", $e); @@ -3018,15 +3061,18 @@ abstract class BaseCcFiles extends BaseObject implements Persistent return $this->getDbLanguage(); break; case 55: - return $this->getDbSoundcloudId(); + return $this->getDbFileExist(); break; case 56: - return $this->getDbSoundcloudErrorCode(); + return $this->getDbSoundcloudId(); break; case 57: - return $this->getDbSoundcloudErrorMsg(); + return $this->getDbSoundcloudErrorCode(); break; case 58: + return $this->getDbSoundcloudErrorMsg(); + break; + case 59: return $this->getDbSoundcloudLinkToFile(); break; default: @@ -3108,10 +3154,11 @@ abstract class BaseCcFiles extends BaseObject implements Persistent $keys[52] => $this->getDbSubject(), $keys[53] => $this->getDbContributor(), $keys[54] => $this->getDbLanguage(), - $keys[55] => $this->getDbSoundcloudId(), - $keys[56] => $this->getDbSoundcloudErrorCode(), - $keys[57] => $this->getDbSoundcloudErrorMsg(), - $keys[58] => $this->getDbSoundcloudLinkToFile(), + $keys[55] => $this->getDbFileExist(), + $keys[56] => $this->getDbSoundcloudId(), + $keys[57] => $this->getDbSoundcloudErrorCode(), + $keys[58] => $this->getDbSoundcloudErrorMsg(), + $keys[59] => $this->getDbSoundcloudLinkToFile(), ); if ($includeForeignObjects) { if (null !== $this->aCcSubjs) { @@ -3317,15 +3364,18 @@ abstract class BaseCcFiles extends BaseObject implements Persistent $this->setDbLanguage($value); break; case 55: - $this->setDbSoundcloudId($value); + $this->setDbFileExist($value); break; case 56: - $this->setDbSoundcloudErrorCode($value); + $this->setDbSoundcloudId($value); break; case 57: - $this->setDbSoundcloudErrorMsg($value); + $this->setDbSoundcloudErrorCode($value); break; case 58: + $this->setDbSoundcloudErrorMsg($value); + break; + case 59: $this->setDbSoundcloudLinkToFile($value); break; } // switch() @@ -3407,10 +3457,11 @@ abstract class BaseCcFiles extends BaseObject implements Persistent if (array_key_exists($keys[52], $arr)) $this->setDbSubject($arr[$keys[52]]); if (array_key_exists($keys[53], $arr)) $this->setDbContributor($arr[$keys[53]]); if (array_key_exists($keys[54], $arr)) $this->setDbLanguage($arr[$keys[54]]); - if (array_key_exists($keys[55], $arr)) $this->setDbSoundcloudId($arr[$keys[55]]); - if (array_key_exists($keys[56], $arr)) $this->setDbSoundcloudErrorCode($arr[$keys[56]]); - if (array_key_exists($keys[57], $arr)) $this->setDbSoundcloudErrorMsg($arr[$keys[57]]); - if (array_key_exists($keys[58], $arr)) $this->setDbSoundcloudLinkToFile($arr[$keys[58]]); + if (array_key_exists($keys[55], $arr)) $this->setDbFileExist($arr[$keys[55]]); + if (array_key_exists($keys[56], $arr)) $this->setDbSoundcloudId($arr[$keys[56]]); + if (array_key_exists($keys[57], $arr)) $this->setDbSoundcloudErrorCode($arr[$keys[57]]); + if (array_key_exists($keys[58], $arr)) $this->setDbSoundcloudErrorMsg($arr[$keys[58]]); + if (array_key_exists($keys[59], $arr)) $this->setDbSoundcloudLinkToFile($arr[$keys[59]]); } /** @@ -3477,6 +3528,7 @@ abstract class BaseCcFiles extends BaseObject implements Persistent if ($this->isColumnModified(CcFilesPeer::SUBJECT)) $criteria->add(CcFilesPeer::SUBJECT, $this->subject); if ($this->isColumnModified(CcFilesPeer::CONTRIBUTOR)) $criteria->add(CcFilesPeer::CONTRIBUTOR, $this->contributor); if ($this->isColumnModified(CcFilesPeer::LANGUAGE)) $criteria->add(CcFilesPeer::LANGUAGE, $this->language); + if ($this->isColumnModified(CcFilesPeer::FILE_EXIST)) $criteria->add(CcFilesPeer::FILE_EXIST, $this->file_exist); if ($this->isColumnModified(CcFilesPeer::SOUNDCLOUD_ID)) $criteria->add(CcFilesPeer::SOUNDCLOUD_ID, $this->soundcloud_id); if ($this->isColumnModified(CcFilesPeer::SOUNDCLOUD_ERROR_CODE)) $criteria->add(CcFilesPeer::SOUNDCLOUD_ERROR_CODE, $this->soundcloud_error_code); if ($this->isColumnModified(CcFilesPeer::SOUNDCLOUD_ERROR_MSG)) $criteria->add(CcFilesPeer::SOUNDCLOUD_ERROR_MSG, $this->soundcloud_error_msg); @@ -3596,6 +3648,7 @@ abstract class BaseCcFiles extends BaseObject implements Persistent $copyObj->setDbSubject($this->subject); $copyObj->setDbContributor($this->contributor); $copyObj->setDbLanguage($this->language); + $copyObj->setDbFileExist($this->file_exist); $copyObj->setDbSoundcloudId($this->soundcloud_id); $copyObj->setDbSoundcloudErrorCode($this->soundcloud_error_code); $copyObj->setDbSoundcloudErrorMsg($this->soundcloud_error_msg); @@ -4254,6 +4307,7 @@ abstract class BaseCcFiles extends BaseObject implements Persistent $this->subject = null; $this->contributor = null; $this->language = null; + $this->file_exist = null; $this->soundcloud_id = null; $this->soundcloud_error_code = null; $this->soundcloud_error_msg = null; diff --git a/airtime_mvc/application/models/airtime/om/BaseCcFilesPeer.php b/airtime_mvc/application/models/airtime/om/BaseCcFilesPeer.php index e08728cfd..1eb509522 100644 --- a/airtime_mvc/application/models/airtime/om/BaseCcFilesPeer.php +++ b/airtime_mvc/application/models/airtime/om/BaseCcFilesPeer.php @@ -26,7 +26,7 @@ abstract class BaseCcFilesPeer { const TM_CLASS = 'CcFilesTableMap'; /** The total number of columns. */ - const NUM_COLUMNS = 59; + const NUM_COLUMNS = 60; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; @@ -196,6 +196,9 @@ abstract class BaseCcFilesPeer { /** the column name for the LANGUAGE field */ const LANGUAGE = 'cc_files.LANGUAGE'; + /** the column name for the FILE_EXIST field */ + const FILE_EXIST = 'cc_files.FILE_EXIST'; + /** the column name for the SOUNDCLOUD_ID field */ const SOUNDCLOUD_ID = 'cc_files.SOUNDCLOUD_ID'; @@ -224,12 +227,12 @@ abstract class BaseCcFilesPeer { * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('DbId', 'DbGunid', 'DbName', 'DbMime', 'DbFtype', 'DbDirectory', 'DbFilepath', 'DbState', 'DbCurrentlyaccessing', 'DbEditedby', 'DbMtime', 'DbMd5', 'DbTrackTitle', 'DbArtistName', 'DbBitRate', 'DbSampleRate', 'DbFormat', 'DbLength', 'DbAlbumTitle', 'DbGenre', 'DbComments', 'DbYear', 'DbTrackNumber', 'DbChannels', 'DbUrl', 'DbBpm', 'DbRating', 'DbEncodedBy', 'DbDiscNumber', 'DbMood', 'DbLabel', 'DbComposer', 'DbEncoder', 'DbChecksum', 'DbLyrics', 'DbOrchestra', 'DbConductor', 'DbLyricist', 'DbOriginalLyricist', 'DbRadioStationName', 'DbInfoUrl', 'DbArtistUrl', 'DbAudioSourceUrl', 'DbRadioStationUrl', 'DbBuyThisUrl', 'DbIsrcNumber', 'DbCatalogNumber', 'DbOriginalArtist', 'DbCopyright', 'DbReportDatetime', 'DbReportLocation', 'DbReportOrganization', 'DbSubject', 'DbContributor', 'DbLanguage', 'DbSoundcloudId', 'DbSoundcloudErrorCode', 'DbSoundcloudErrorMsg', 'DbSoundcloudLinkToFile', ), - BasePeer::TYPE_STUDLYPHPNAME => array ('dbId', 'dbGunid', 'dbName', 'dbMime', 'dbFtype', 'dbDirectory', 'dbFilepath', 'dbState', 'dbCurrentlyaccessing', 'dbEditedby', 'dbMtime', 'dbMd5', 'dbTrackTitle', 'dbArtistName', 'dbBitRate', 'dbSampleRate', 'dbFormat', 'dbLength', 'dbAlbumTitle', 'dbGenre', 'dbComments', 'dbYear', 'dbTrackNumber', 'dbChannels', 'dbUrl', 'dbBpm', 'dbRating', 'dbEncodedBy', 'dbDiscNumber', 'dbMood', 'dbLabel', 'dbComposer', 'dbEncoder', 'dbChecksum', 'dbLyrics', 'dbOrchestra', 'dbConductor', 'dbLyricist', 'dbOriginalLyricist', 'dbRadioStationName', 'dbInfoUrl', 'dbArtistUrl', 'dbAudioSourceUrl', 'dbRadioStationUrl', 'dbBuyThisUrl', 'dbIsrcNumber', 'dbCatalogNumber', 'dbOriginalArtist', 'dbCopyright', 'dbReportDatetime', 'dbReportLocation', 'dbReportOrganization', 'dbSubject', 'dbContributor', 'dbLanguage', 'dbSoundcloudId', 'dbSoundcloudErrorCode', 'dbSoundcloudErrorMsg', 'dbSoundcloudLinkToFile', ), - BasePeer::TYPE_COLNAME => array (self::ID, self::GUNID, self::NAME, self::MIME, self::FTYPE, self::DIRECTORY, self::FILEPATH, self::STATE, self::CURRENTLYACCESSING, self::EDITEDBY, self::MTIME, self::MD5, self::TRACK_TITLE, self::ARTIST_NAME, self::BIT_RATE, self::SAMPLE_RATE, self::FORMAT, self::LENGTH, self::ALBUM_TITLE, self::GENRE, self::COMMENTS, self::YEAR, self::TRACK_NUMBER, self::CHANNELS, self::URL, self::BPM, self::RATING, self::ENCODED_BY, self::DISC_NUMBER, self::MOOD, self::LABEL, self::COMPOSER, self::ENCODER, self::CHECKSUM, self::LYRICS, self::ORCHESTRA, self::CONDUCTOR, self::LYRICIST, self::ORIGINAL_LYRICIST, self::RADIO_STATION_NAME, self::INFO_URL, self::ARTIST_URL, self::AUDIO_SOURCE_URL, self::RADIO_STATION_URL, self::BUY_THIS_URL, self::ISRC_NUMBER, self::CATALOG_NUMBER, self::ORIGINAL_ARTIST, self::COPYRIGHT, self::REPORT_DATETIME, self::REPORT_LOCATION, self::REPORT_ORGANIZATION, self::SUBJECT, self::CONTRIBUTOR, self::LANGUAGE, self::SOUNDCLOUD_ID, self::SOUNDCLOUD_ERROR_CODE, self::SOUNDCLOUD_ERROR_MSG, self::SOUNDCLOUD_LINK_TO_FILE, ), - BasePeer::TYPE_RAW_COLNAME => array ('ID', 'GUNID', 'NAME', 'MIME', 'FTYPE', 'DIRECTORY', 'FILEPATH', 'STATE', 'CURRENTLYACCESSING', 'EDITEDBY', 'MTIME', 'MD5', 'TRACK_TITLE', 'ARTIST_NAME', 'BIT_RATE', 'SAMPLE_RATE', 'FORMAT', 'LENGTH', 'ALBUM_TITLE', 'GENRE', 'COMMENTS', 'YEAR', 'TRACK_NUMBER', 'CHANNELS', 'URL', 'BPM', 'RATING', 'ENCODED_BY', 'DISC_NUMBER', 'MOOD', 'LABEL', 'COMPOSER', 'ENCODER', 'CHECKSUM', 'LYRICS', 'ORCHESTRA', 'CONDUCTOR', 'LYRICIST', 'ORIGINAL_LYRICIST', 'RADIO_STATION_NAME', 'INFO_URL', 'ARTIST_URL', 'AUDIO_SOURCE_URL', 'RADIO_STATION_URL', 'BUY_THIS_URL', 'ISRC_NUMBER', 'CATALOG_NUMBER', 'ORIGINAL_ARTIST', 'COPYRIGHT', 'REPORT_DATETIME', 'REPORT_LOCATION', 'REPORT_ORGANIZATION', 'SUBJECT', 'CONTRIBUTOR', 'LANGUAGE', 'SOUNDCLOUD_ID', 'SOUNDCLOUD_ERROR_CODE', 'SOUNDCLOUD_ERROR_MSG', 'SOUNDCLOUD_LINK_TO_FILE', ), - BasePeer::TYPE_FIELDNAME => array ('id', 'gunid', 'name', 'mime', 'ftype', 'directory', 'filepath', 'state', 'currentlyaccessing', 'editedby', 'mtime', 'md5', 'track_title', 'artist_name', 'bit_rate', 'sample_rate', 'format', 'length', 'album_title', 'genre', 'comments', 'year', 'track_number', 'channels', 'url', 'bpm', 'rating', 'encoded_by', 'disc_number', 'mood', 'label', 'composer', 'encoder', 'checksum', 'lyrics', 'orchestra', 'conductor', 'lyricist', 'original_lyricist', 'radio_station_name', 'info_url', 'artist_url', 'audio_source_url', 'radio_station_url', 'buy_this_url', 'isrc_number', 'catalog_number', 'original_artist', 'copyright', 'report_datetime', 'report_location', 'report_organization', 'subject', 'contributor', 'language', 'soundcloud_id', 'soundcloud_error_code', 'soundcloud_error_msg', 'soundcloud_link_to_file', ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, ) + BasePeer::TYPE_PHPNAME => array ('DbId', 'DbGunid', 'DbName', 'DbMime', 'DbFtype', 'DbDirectory', 'DbFilepath', 'DbState', 'DbCurrentlyaccessing', 'DbEditedby', 'DbMtime', 'DbMd5', 'DbTrackTitle', 'DbArtistName', 'DbBitRate', 'DbSampleRate', 'DbFormat', 'DbLength', 'DbAlbumTitle', 'DbGenre', 'DbComments', 'DbYear', 'DbTrackNumber', 'DbChannels', 'DbUrl', 'DbBpm', 'DbRating', 'DbEncodedBy', 'DbDiscNumber', 'DbMood', 'DbLabel', 'DbComposer', 'DbEncoder', 'DbChecksum', 'DbLyrics', 'DbOrchestra', 'DbConductor', 'DbLyricist', 'DbOriginalLyricist', 'DbRadioStationName', 'DbInfoUrl', 'DbArtistUrl', 'DbAudioSourceUrl', 'DbRadioStationUrl', 'DbBuyThisUrl', 'DbIsrcNumber', 'DbCatalogNumber', 'DbOriginalArtist', 'DbCopyright', 'DbReportDatetime', 'DbReportLocation', 'DbReportOrganization', 'DbSubject', 'DbContributor', 'DbLanguage', 'DbFileExist', 'DbSoundcloudId', 'DbSoundcloudErrorCode', 'DbSoundcloudErrorMsg', 'DbSoundcloudLinkToFile', ), + BasePeer::TYPE_STUDLYPHPNAME => array ('dbId', 'dbGunid', 'dbName', 'dbMime', 'dbFtype', 'dbDirectory', 'dbFilepath', 'dbState', 'dbCurrentlyaccessing', 'dbEditedby', 'dbMtime', 'dbMd5', 'dbTrackTitle', 'dbArtistName', 'dbBitRate', 'dbSampleRate', 'dbFormat', 'dbLength', 'dbAlbumTitle', 'dbGenre', 'dbComments', 'dbYear', 'dbTrackNumber', 'dbChannels', 'dbUrl', 'dbBpm', 'dbRating', 'dbEncodedBy', 'dbDiscNumber', 'dbMood', 'dbLabel', 'dbComposer', 'dbEncoder', 'dbChecksum', 'dbLyrics', 'dbOrchestra', 'dbConductor', 'dbLyricist', 'dbOriginalLyricist', 'dbRadioStationName', 'dbInfoUrl', 'dbArtistUrl', 'dbAudioSourceUrl', 'dbRadioStationUrl', 'dbBuyThisUrl', 'dbIsrcNumber', 'dbCatalogNumber', 'dbOriginalArtist', 'dbCopyright', 'dbReportDatetime', 'dbReportLocation', 'dbReportOrganization', 'dbSubject', 'dbContributor', 'dbLanguage', 'dbFileExist', 'dbSoundcloudId', 'dbSoundcloudErrorCode', 'dbSoundcloudErrorMsg', 'dbSoundcloudLinkToFile', ), + BasePeer::TYPE_COLNAME => array (self::ID, self::GUNID, self::NAME, self::MIME, self::FTYPE, self::DIRECTORY, self::FILEPATH, self::STATE, self::CURRENTLYACCESSING, self::EDITEDBY, self::MTIME, self::MD5, self::TRACK_TITLE, self::ARTIST_NAME, self::BIT_RATE, self::SAMPLE_RATE, self::FORMAT, self::LENGTH, self::ALBUM_TITLE, self::GENRE, self::COMMENTS, self::YEAR, self::TRACK_NUMBER, self::CHANNELS, self::URL, self::BPM, self::RATING, self::ENCODED_BY, self::DISC_NUMBER, self::MOOD, self::LABEL, self::COMPOSER, self::ENCODER, self::CHECKSUM, self::LYRICS, self::ORCHESTRA, self::CONDUCTOR, self::LYRICIST, self::ORIGINAL_LYRICIST, self::RADIO_STATION_NAME, self::INFO_URL, self::ARTIST_URL, self::AUDIO_SOURCE_URL, self::RADIO_STATION_URL, self::BUY_THIS_URL, self::ISRC_NUMBER, self::CATALOG_NUMBER, self::ORIGINAL_ARTIST, self::COPYRIGHT, self::REPORT_DATETIME, self::REPORT_LOCATION, self::REPORT_ORGANIZATION, self::SUBJECT, self::CONTRIBUTOR, self::LANGUAGE, self::FILE_EXIST, self::SOUNDCLOUD_ID, self::SOUNDCLOUD_ERROR_CODE, self::SOUNDCLOUD_ERROR_MSG, self::SOUNDCLOUD_LINK_TO_FILE, ), + BasePeer::TYPE_RAW_COLNAME => array ('ID', 'GUNID', 'NAME', 'MIME', 'FTYPE', 'DIRECTORY', 'FILEPATH', 'STATE', 'CURRENTLYACCESSING', 'EDITEDBY', 'MTIME', 'MD5', 'TRACK_TITLE', 'ARTIST_NAME', 'BIT_RATE', 'SAMPLE_RATE', 'FORMAT', 'LENGTH', 'ALBUM_TITLE', 'GENRE', 'COMMENTS', 'YEAR', 'TRACK_NUMBER', 'CHANNELS', 'URL', 'BPM', 'RATING', 'ENCODED_BY', 'DISC_NUMBER', 'MOOD', 'LABEL', 'COMPOSER', 'ENCODER', 'CHECKSUM', 'LYRICS', 'ORCHESTRA', 'CONDUCTOR', 'LYRICIST', 'ORIGINAL_LYRICIST', 'RADIO_STATION_NAME', 'INFO_URL', 'ARTIST_URL', 'AUDIO_SOURCE_URL', 'RADIO_STATION_URL', 'BUY_THIS_URL', 'ISRC_NUMBER', 'CATALOG_NUMBER', 'ORIGINAL_ARTIST', 'COPYRIGHT', 'REPORT_DATETIME', 'REPORT_LOCATION', 'REPORT_ORGANIZATION', 'SUBJECT', 'CONTRIBUTOR', 'LANGUAGE', 'FILE_EXIST', 'SOUNDCLOUD_ID', 'SOUNDCLOUD_ERROR_CODE', 'SOUNDCLOUD_ERROR_MSG', 'SOUNDCLOUD_LINK_TO_FILE', ), + BasePeer::TYPE_FIELDNAME => array ('id', 'gunid', 'name', 'mime', 'ftype', 'directory', 'filepath', 'state', 'currentlyaccessing', 'editedby', 'mtime', 'md5', 'track_title', 'artist_name', 'bit_rate', 'sample_rate', 'format', 'length', 'album_title', 'genre', 'comments', 'year', 'track_number', 'channels', 'url', 'bpm', 'rating', 'encoded_by', 'disc_number', 'mood', 'label', 'composer', 'encoder', 'checksum', 'lyrics', 'orchestra', 'conductor', 'lyricist', 'original_lyricist', 'radio_station_name', 'info_url', 'artist_url', 'audio_source_url', 'radio_station_url', 'buy_this_url', 'isrc_number', 'catalog_number', 'original_artist', 'copyright', 'report_datetime', 'report_location', 'report_organization', 'subject', 'contributor', 'language', 'file_exist', 'soundcloud_id', 'soundcloud_error_code', 'soundcloud_error_msg', 'soundcloud_link_to_file', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, ) ); /** @@ -239,12 +242,12 @@ abstract class BaseCcFilesPeer { * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('DbId' => 0, 'DbGunid' => 1, 'DbName' => 2, 'DbMime' => 3, 'DbFtype' => 4, 'DbDirectory' => 5, 'DbFilepath' => 6, 'DbState' => 7, 'DbCurrentlyaccessing' => 8, 'DbEditedby' => 9, 'DbMtime' => 10, 'DbMd5' => 11, 'DbTrackTitle' => 12, 'DbArtistName' => 13, 'DbBitRate' => 14, 'DbSampleRate' => 15, 'DbFormat' => 16, 'DbLength' => 17, 'DbAlbumTitle' => 18, 'DbGenre' => 19, 'DbComments' => 20, 'DbYear' => 21, 'DbTrackNumber' => 22, 'DbChannels' => 23, 'DbUrl' => 24, 'DbBpm' => 25, 'DbRating' => 26, 'DbEncodedBy' => 27, 'DbDiscNumber' => 28, 'DbMood' => 29, 'DbLabel' => 30, 'DbComposer' => 31, 'DbEncoder' => 32, 'DbChecksum' => 33, 'DbLyrics' => 34, 'DbOrchestra' => 35, 'DbConductor' => 36, 'DbLyricist' => 37, 'DbOriginalLyricist' => 38, 'DbRadioStationName' => 39, 'DbInfoUrl' => 40, 'DbArtistUrl' => 41, 'DbAudioSourceUrl' => 42, 'DbRadioStationUrl' => 43, 'DbBuyThisUrl' => 44, 'DbIsrcNumber' => 45, 'DbCatalogNumber' => 46, 'DbOriginalArtist' => 47, 'DbCopyright' => 48, 'DbReportDatetime' => 49, 'DbReportLocation' => 50, 'DbReportOrganization' => 51, 'DbSubject' => 52, 'DbContributor' => 53, 'DbLanguage' => 54, 'DbSoundcloudId' => 55, 'DbSoundcloudErrorCode' => 56, 'DbSoundcloudErrorMsg' => 57, 'DbSoundcloudLinkToFile' => 58, ), - BasePeer::TYPE_STUDLYPHPNAME => array ('dbId' => 0, 'dbGunid' => 1, 'dbName' => 2, 'dbMime' => 3, 'dbFtype' => 4, 'dbDirectory' => 5, 'dbFilepath' => 6, 'dbState' => 7, 'dbCurrentlyaccessing' => 8, 'dbEditedby' => 9, 'dbMtime' => 10, 'dbMd5' => 11, 'dbTrackTitle' => 12, 'dbArtistName' => 13, 'dbBitRate' => 14, 'dbSampleRate' => 15, 'dbFormat' => 16, 'dbLength' => 17, 'dbAlbumTitle' => 18, 'dbGenre' => 19, 'dbComments' => 20, 'dbYear' => 21, 'dbTrackNumber' => 22, 'dbChannels' => 23, 'dbUrl' => 24, 'dbBpm' => 25, 'dbRating' => 26, 'dbEncodedBy' => 27, 'dbDiscNumber' => 28, 'dbMood' => 29, 'dbLabel' => 30, 'dbComposer' => 31, 'dbEncoder' => 32, 'dbChecksum' => 33, 'dbLyrics' => 34, 'dbOrchestra' => 35, 'dbConductor' => 36, 'dbLyricist' => 37, 'dbOriginalLyricist' => 38, 'dbRadioStationName' => 39, 'dbInfoUrl' => 40, 'dbArtistUrl' => 41, 'dbAudioSourceUrl' => 42, 'dbRadioStationUrl' => 43, 'dbBuyThisUrl' => 44, 'dbIsrcNumber' => 45, 'dbCatalogNumber' => 46, 'dbOriginalArtist' => 47, 'dbCopyright' => 48, 'dbReportDatetime' => 49, 'dbReportLocation' => 50, 'dbReportOrganization' => 51, 'dbSubject' => 52, 'dbContributor' => 53, 'dbLanguage' => 54, 'dbSoundcloudId' => 55, 'dbSoundcloudErrorCode' => 56, 'dbSoundcloudErrorMsg' => 57, 'dbSoundcloudLinkToFile' => 58, ), - BasePeer::TYPE_COLNAME => array (self::ID => 0, self::GUNID => 1, self::NAME => 2, self::MIME => 3, self::FTYPE => 4, self::DIRECTORY => 5, self::FILEPATH => 6, self::STATE => 7, self::CURRENTLYACCESSING => 8, self::EDITEDBY => 9, self::MTIME => 10, self::MD5 => 11, self::TRACK_TITLE => 12, self::ARTIST_NAME => 13, self::BIT_RATE => 14, self::SAMPLE_RATE => 15, self::FORMAT => 16, self::LENGTH => 17, self::ALBUM_TITLE => 18, self::GENRE => 19, self::COMMENTS => 20, self::YEAR => 21, self::TRACK_NUMBER => 22, self::CHANNELS => 23, self::URL => 24, self::BPM => 25, self::RATING => 26, self::ENCODED_BY => 27, self::DISC_NUMBER => 28, self::MOOD => 29, self::LABEL => 30, self::COMPOSER => 31, self::ENCODER => 32, self::CHECKSUM => 33, self::LYRICS => 34, self::ORCHESTRA => 35, self::CONDUCTOR => 36, self::LYRICIST => 37, self::ORIGINAL_LYRICIST => 38, self::RADIO_STATION_NAME => 39, self::INFO_URL => 40, self::ARTIST_URL => 41, self::AUDIO_SOURCE_URL => 42, self::RADIO_STATION_URL => 43, self::BUY_THIS_URL => 44, self::ISRC_NUMBER => 45, self::CATALOG_NUMBER => 46, self::ORIGINAL_ARTIST => 47, self::COPYRIGHT => 48, self::REPORT_DATETIME => 49, self::REPORT_LOCATION => 50, self::REPORT_ORGANIZATION => 51, self::SUBJECT => 52, self::CONTRIBUTOR => 53, self::LANGUAGE => 54, self::SOUNDCLOUD_ID => 55, self::SOUNDCLOUD_ERROR_CODE => 56, self::SOUNDCLOUD_ERROR_MSG => 57, self::SOUNDCLOUD_LINK_TO_FILE => 58, ), - BasePeer::TYPE_RAW_COLNAME => array ('ID' => 0, 'GUNID' => 1, 'NAME' => 2, 'MIME' => 3, 'FTYPE' => 4, 'DIRECTORY' => 5, 'FILEPATH' => 6, 'STATE' => 7, 'CURRENTLYACCESSING' => 8, 'EDITEDBY' => 9, 'MTIME' => 10, 'MD5' => 11, 'TRACK_TITLE' => 12, 'ARTIST_NAME' => 13, 'BIT_RATE' => 14, 'SAMPLE_RATE' => 15, 'FORMAT' => 16, 'LENGTH' => 17, 'ALBUM_TITLE' => 18, 'GENRE' => 19, 'COMMENTS' => 20, 'YEAR' => 21, 'TRACK_NUMBER' => 22, 'CHANNELS' => 23, 'URL' => 24, 'BPM' => 25, 'RATING' => 26, 'ENCODED_BY' => 27, 'DISC_NUMBER' => 28, 'MOOD' => 29, 'LABEL' => 30, 'COMPOSER' => 31, 'ENCODER' => 32, 'CHECKSUM' => 33, 'LYRICS' => 34, 'ORCHESTRA' => 35, 'CONDUCTOR' => 36, 'LYRICIST' => 37, 'ORIGINAL_LYRICIST' => 38, 'RADIO_STATION_NAME' => 39, 'INFO_URL' => 40, 'ARTIST_URL' => 41, 'AUDIO_SOURCE_URL' => 42, 'RADIO_STATION_URL' => 43, 'BUY_THIS_URL' => 44, 'ISRC_NUMBER' => 45, 'CATALOG_NUMBER' => 46, 'ORIGINAL_ARTIST' => 47, 'COPYRIGHT' => 48, 'REPORT_DATETIME' => 49, 'REPORT_LOCATION' => 50, 'REPORT_ORGANIZATION' => 51, 'SUBJECT' => 52, 'CONTRIBUTOR' => 53, 'LANGUAGE' => 54, 'SOUNDCLOUD_ID' => 55, 'SOUNDCLOUD_ERROR_CODE' => 56, 'SOUNDCLOUD_ERROR_MSG' => 57, 'SOUNDCLOUD_LINK_TO_FILE' => 58, ), - BasePeer::TYPE_FIELDNAME => array ('id' => 0, 'gunid' => 1, 'name' => 2, 'mime' => 3, 'ftype' => 4, 'directory' => 5, 'filepath' => 6, 'state' => 7, 'currentlyaccessing' => 8, 'editedby' => 9, 'mtime' => 10, 'md5' => 11, 'track_title' => 12, 'artist_name' => 13, 'bit_rate' => 14, 'sample_rate' => 15, 'format' => 16, 'length' => 17, 'album_title' => 18, 'genre' => 19, 'comments' => 20, 'year' => 21, 'track_number' => 22, 'channels' => 23, 'url' => 24, 'bpm' => 25, 'rating' => 26, 'encoded_by' => 27, 'disc_number' => 28, 'mood' => 29, 'label' => 30, 'composer' => 31, 'encoder' => 32, 'checksum' => 33, 'lyrics' => 34, 'orchestra' => 35, 'conductor' => 36, 'lyricist' => 37, 'original_lyricist' => 38, 'radio_station_name' => 39, 'info_url' => 40, 'artist_url' => 41, 'audio_source_url' => 42, 'radio_station_url' => 43, 'buy_this_url' => 44, 'isrc_number' => 45, 'catalog_number' => 46, 'original_artist' => 47, 'copyright' => 48, 'report_datetime' => 49, 'report_location' => 50, 'report_organization' => 51, 'subject' => 52, 'contributor' => 53, 'language' => 54, 'soundcloud_id' => 55, 'soundcloud_error_code' => 56, 'soundcloud_error_msg' => 57, 'soundcloud_link_to_file' => 58, ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, ) + BasePeer::TYPE_PHPNAME => array ('DbId' => 0, 'DbGunid' => 1, 'DbName' => 2, 'DbMime' => 3, 'DbFtype' => 4, 'DbDirectory' => 5, 'DbFilepath' => 6, 'DbState' => 7, 'DbCurrentlyaccessing' => 8, 'DbEditedby' => 9, 'DbMtime' => 10, 'DbMd5' => 11, 'DbTrackTitle' => 12, 'DbArtistName' => 13, 'DbBitRate' => 14, 'DbSampleRate' => 15, 'DbFormat' => 16, 'DbLength' => 17, 'DbAlbumTitle' => 18, 'DbGenre' => 19, 'DbComments' => 20, 'DbYear' => 21, 'DbTrackNumber' => 22, 'DbChannels' => 23, 'DbUrl' => 24, 'DbBpm' => 25, 'DbRating' => 26, 'DbEncodedBy' => 27, 'DbDiscNumber' => 28, 'DbMood' => 29, 'DbLabel' => 30, 'DbComposer' => 31, 'DbEncoder' => 32, 'DbChecksum' => 33, 'DbLyrics' => 34, 'DbOrchestra' => 35, 'DbConductor' => 36, 'DbLyricist' => 37, 'DbOriginalLyricist' => 38, 'DbRadioStationName' => 39, 'DbInfoUrl' => 40, 'DbArtistUrl' => 41, 'DbAudioSourceUrl' => 42, 'DbRadioStationUrl' => 43, 'DbBuyThisUrl' => 44, 'DbIsrcNumber' => 45, 'DbCatalogNumber' => 46, 'DbOriginalArtist' => 47, 'DbCopyright' => 48, 'DbReportDatetime' => 49, 'DbReportLocation' => 50, 'DbReportOrganization' => 51, 'DbSubject' => 52, 'DbContributor' => 53, 'DbLanguage' => 54, 'DbFileExist' => 55, 'DbSoundcloudId' => 56, 'DbSoundcloudErrorCode' => 57, 'DbSoundcloudErrorMsg' => 58, 'DbSoundcloudLinkToFile' => 59, ), + BasePeer::TYPE_STUDLYPHPNAME => array ('dbId' => 0, 'dbGunid' => 1, 'dbName' => 2, 'dbMime' => 3, 'dbFtype' => 4, 'dbDirectory' => 5, 'dbFilepath' => 6, 'dbState' => 7, 'dbCurrentlyaccessing' => 8, 'dbEditedby' => 9, 'dbMtime' => 10, 'dbMd5' => 11, 'dbTrackTitle' => 12, 'dbArtistName' => 13, 'dbBitRate' => 14, 'dbSampleRate' => 15, 'dbFormat' => 16, 'dbLength' => 17, 'dbAlbumTitle' => 18, 'dbGenre' => 19, 'dbComments' => 20, 'dbYear' => 21, 'dbTrackNumber' => 22, 'dbChannels' => 23, 'dbUrl' => 24, 'dbBpm' => 25, 'dbRating' => 26, 'dbEncodedBy' => 27, 'dbDiscNumber' => 28, 'dbMood' => 29, 'dbLabel' => 30, 'dbComposer' => 31, 'dbEncoder' => 32, 'dbChecksum' => 33, 'dbLyrics' => 34, 'dbOrchestra' => 35, 'dbConductor' => 36, 'dbLyricist' => 37, 'dbOriginalLyricist' => 38, 'dbRadioStationName' => 39, 'dbInfoUrl' => 40, 'dbArtistUrl' => 41, 'dbAudioSourceUrl' => 42, 'dbRadioStationUrl' => 43, 'dbBuyThisUrl' => 44, 'dbIsrcNumber' => 45, 'dbCatalogNumber' => 46, 'dbOriginalArtist' => 47, 'dbCopyright' => 48, 'dbReportDatetime' => 49, 'dbReportLocation' => 50, 'dbReportOrganization' => 51, 'dbSubject' => 52, 'dbContributor' => 53, 'dbLanguage' => 54, 'dbFileExist' => 55, 'dbSoundcloudId' => 56, 'dbSoundcloudErrorCode' => 57, 'dbSoundcloudErrorMsg' => 58, 'dbSoundcloudLinkToFile' => 59, ), + BasePeer::TYPE_COLNAME => array (self::ID => 0, self::GUNID => 1, self::NAME => 2, self::MIME => 3, self::FTYPE => 4, self::DIRECTORY => 5, self::FILEPATH => 6, self::STATE => 7, self::CURRENTLYACCESSING => 8, self::EDITEDBY => 9, self::MTIME => 10, self::MD5 => 11, self::TRACK_TITLE => 12, self::ARTIST_NAME => 13, self::BIT_RATE => 14, self::SAMPLE_RATE => 15, self::FORMAT => 16, self::LENGTH => 17, self::ALBUM_TITLE => 18, self::GENRE => 19, self::COMMENTS => 20, self::YEAR => 21, self::TRACK_NUMBER => 22, self::CHANNELS => 23, self::URL => 24, self::BPM => 25, self::RATING => 26, self::ENCODED_BY => 27, self::DISC_NUMBER => 28, self::MOOD => 29, self::LABEL => 30, self::COMPOSER => 31, self::ENCODER => 32, self::CHECKSUM => 33, self::LYRICS => 34, self::ORCHESTRA => 35, self::CONDUCTOR => 36, self::LYRICIST => 37, self::ORIGINAL_LYRICIST => 38, self::RADIO_STATION_NAME => 39, self::INFO_URL => 40, self::ARTIST_URL => 41, self::AUDIO_SOURCE_URL => 42, self::RADIO_STATION_URL => 43, self::BUY_THIS_URL => 44, self::ISRC_NUMBER => 45, self::CATALOG_NUMBER => 46, self::ORIGINAL_ARTIST => 47, self::COPYRIGHT => 48, self::REPORT_DATETIME => 49, self::REPORT_LOCATION => 50, self::REPORT_ORGANIZATION => 51, self::SUBJECT => 52, self::CONTRIBUTOR => 53, self::LANGUAGE => 54, self::FILE_EXIST => 55, self::SOUNDCLOUD_ID => 56, self::SOUNDCLOUD_ERROR_CODE => 57, self::SOUNDCLOUD_ERROR_MSG => 58, self::SOUNDCLOUD_LINK_TO_FILE => 59, ), + BasePeer::TYPE_RAW_COLNAME => array ('ID' => 0, 'GUNID' => 1, 'NAME' => 2, 'MIME' => 3, 'FTYPE' => 4, 'DIRECTORY' => 5, 'FILEPATH' => 6, 'STATE' => 7, 'CURRENTLYACCESSING' => 8, 'EDITEDBY' => 9, 'MTIME' => 10, 'MD5' => 11, 'TRACK_TITLE' => 12, 'ARTIST_NAME' => 13, 'BIT_RATE' => 14, 'SAMPLE_RATE' => 15, 'FORMAT' => 16, 'LENGTH' => 17, 'ALBUM_TITLE' => 18, 'GENRE' => 19, 'COMMENTS' => 20, 'YEAR' => 21, 'TRACK_NUMBER' => 22, 'CHANNELS' => 23, 'URL' => 24, 'BPM' => 25, 'RATING' => 26, 'ENCODED_BY' => 27, 'DISC_NUMBER' => 28, 'MOOD' => 29, 'LABEL' => 30, 'COMPOSER' => 31, 'ENCODER' => 32, 'CHECKSUM' => 33, 'LYRICS' => 34, 'ORCHESTRA' => 35, 'CONDUCTOR' => 36, 'LYRICIST' => 37, 'ORIGINAL_LYRICIST' => 38, 'RADIO_STATION_NAME' => 39, 'INFO_URL' => 40, 'ARTIST_URL' => 41, 'AUDIO_SOURCE_URL' => 42, 'RADIO_STATION_URL' => 43, 'BUY_THIS_URL' => 44, 'ISRC_NUMBER' => 45, 'CATALOG_NUMBER' => 46, 'ORIGINAL_ARTIST' => 47, 'COPYRIGHT' => 48, 'REPORT_DATETIME' => 49, 'REPORT_LOCATION' => 50, 'REPORT_ORGANIZATION' => 51, 'SUBJECT' => 52, 'CONTRIBUTOR' => 53, 'LANGUAGE' => 54, 'FILE_EXIST' => 55, 'SOUNDCLOUD_ID' => 56, 'SOUNDCLOUD_ERROR_CODE' => 57, 'SOUNDCLOUD_ERROR_MSG' => 58, 'SOUNDCLOUD_LINK_TO_FILE' => 59, ), + BasePeer::TYPE_FIELDNAME => array ('id' => 0, 'gunid' => 1, 'name' => 2, 'mime' => 3, 'ftype' => 4, 'directory' => 5, 'filepath' => 6, 'state' => 7, 'currentlyaccessing' => 8, 'editedby' => 9, 'mtime' => 10, 'md5' => 11, 'track_title' => 12, 'artist_name' => 13, 'bit_rate' => 14, 'sample_rate' => 15, 'format' => 16, 'length' => 17, 'album_title' => 18, 'genre' => 19, 'comments' => 20, 'year' => 21, 'track_number' => 22, 'channels' => 23, 'url' => 24, 'bpm' => 25, 'rating' => 26, 'encoded_by' => 27, 'disc_number' => 28, 'mood' => 29, 'label' => 30, 'composer' => 31, 'encoder' => 32, 'checksum' => 33, 'lyrics' => 34, 'orchestra' => 35, 'conductor' => 36, 'lyricist' => 37, 'original_lyricist' => 38, 'radio_station_name' => 39, 'info_url' => 40, 'artist_url' => 41, 'audio_source_url' => 42, 'radio_station_url' => 43, 'buy_this_url' => 44, 'isrc_number' => 45, 'catalog_number' => 46, 'original_artist' => 47, 'copyright' => 48, 'report_datetime' => 49, 'report_location' => 50, 'report_organization' => 51, 'subject' => 52, 'contributor' => 53, 'language' => 54, 'file_exist' => 55, 'soundcloud_id' => 56, 'soundcloud_error_code' => 57, 'soundcloud_error_msg' => 58, 'soundcloud_link_to_file' => 59, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, ) ); /** @@ -371,6 +374,7 @@ abstract class BaseCcFilesPeer { $criteria->addSelectColumn(CcFilesPeer::SUBJECT); $criteria->addSelectColumn(CcFilesPeer::CONTRIBUTOR); $criteria->addSelectColumn(CcFilesPeer::LANGUAGE); + $criteria->addSelectColumn(CcFilesPeer::FILE_EXIST); $criteria->addSelectColumn(CcFilesPeer::SOUNDCLOUD_ID); $criteria->addSelectColumn(CcFilesPeer::SOUNDCLOUD_ERROR_CODE); $criteria->addSelectColumn(CcFilesPeer::SOUNDCLOUD_ERROR_MSG); @@ -431,6 +435,7 @@ abstract class BaseCcFilesPeer { $criteria->addSelectColumn($alias . '.SUBJECT'); $criteria->addSelectColumn($alias . '.CONTRIBUTOR'); $criteria->addSelectColumn($alias . '.LANGUAGE'); + $criteria->addSelectColumn($alias . '.FILE_EXIST'); $criteria->addSelectColumn($alias . '.SOUNDCLOUD_ID'); $criteria->addSelectColumn($alias . '.SOUNDCLOUD_ERROR_CODE'); $criteria->addSelectColumn($alias . '.SOUNDCLOUD_ERROR_MSG'); diff --git a/airtime_mvc/application/models/airtime/om/BaseCcFilesQuery.php b/airtime_mvc/application/models/airtime/om/BaseCcFilesQuery.php index 36c5f71ed..86119f733 100644 --- a/airtime_mvc/application/models/airtime/om/BaseCcFilesQuery.php +++ b/airtime_mvc/application/models/airtime/om/BaseCcFilesQuery.php @@ -61,6 +61,7 @@ * @method CcFilesQuery orderByDbSubject($order = Criteria::ASC) Order by the subject column * @method CcFilesQuery orderByDbContributor($order = Criteria::ASC) Order by the contributor column * @method CcFilesQuery orderByDbLanguage($order = Criteria::ASC) Order by the language column + * @method CcFilesQuery orderByDbFileExist($order = Criteria::ASC) Order by the file_exist column * @method CcFilesQuery orderByDbSoundcloudId($order = Criteria::ASC) Order by the soundcloud_id column * @method CcFilesQuery orderByDbSoundcloudErrorCode($order = Criteria::ASC) Order by the soundcloud_error_code column * @method CcFilesQuery orderByDbSoundcloudErrorMsg($order = Criteria::ASC) Order by the soundcloud_error_msg column @@ -121,6 +122,7 @@ * @method CcFilesQuery groupByDbSubject() Group by the subject column * @method CcFilesQuery groupByDbContributor() Group by the contributor column * @method CcFilesQuery groupByDbLanguage() Group by the language column + * @method CcFilesQuery groupByDbFileExist() Group by the file_exist column * @method CcFilesQuery groupByDbSoundcloudId() Group by the soundcloud_id column * @method CcFilesQuery groupByDbSoundcloudErrorCode() Group by the soundcloud_error_code column * @method CcFilesQuery groupByDbSoundcloudErrorMsg() Group by the soundcloud_error_msg column @@ -208,6 +210,7 @@ * @method CcFiles findOneByDbSubject(string $subject) Return the first CcFiles filtered by the subject column * @method CcFiles findOneByDbContributor(string $contributor) Return the first CcFiles filtered by the contributor column * @method CcFiles findOneByDbLanguage(string $language) Return the first CcFiles filtered by the language column + * @method CcFiles findOneByDbFileExist(boolean $file_exist) Return the first CcFiles filtered by the file_exist column * @method CcFiles findOneByDbSoundcloudId(int $soundcloud_id) Return the first CcFiles filtered by the soundcloud_id column * @method CcFiles findOneByDbSoundcloudErrorCode(int $soundcloud_error_code) Return the first CcFiles filtered by the soundcloud_error_code column * @method CcFiles findOneByDbSoundcloudErrorMsg(string $soundcloud_error_msg) Return the first CcFiles filtered by the soundcloud_error_msg column @@ -268,6 +271,7 @@ * @method array findByDbSubject(string $subject) Return CcFiles objects filtered by the subject column * @method array findByDbContributor(string $contributor) Return CcFiles objects filtered by the contributor column * @method array findByDbLanguage(string $language) Return CcFiles objects filtered by the language column + * @method array findByDbFileExist(boolean $file_exist) Return CcFiles objects filtered by the file_exist column * @method array findByDbSoundcloudId(int $soundcloud_id) Return CcFiles objects filtered by the soundcloud_id column * @method array findByDbSoundcloudErrorCode(int $soundcloud_error_code) Return CcFiles objects filtered by the soundcloud_error_code column * @method array findByDbSoundcloudErrorMsg(string $soundcloud_error_msg) Return CcFiles objects filtered by the soundcloud_error_msg column @@ -1649,6 +1653,23 @@ abstract class BaseCcFilesQuery extends ModelCriteria return $this->addUsingAlias(CcFilesPeer::LANGUAGE, $dbLanguage, $comparison); } + /** + * Filter the query on the file_exist column + * + * @param boolean|string $dbFileExist The value to use as filter. + * Accepts strings ('false', 'off', '-', 'no', 'n', and '0' are false, the rest is true) + * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL + * + * @return CcFilesQuery The current query, for fluid interface + */ + public function filterByDbFileExist($dbFileExist = null, $comparison = null) + { + if (is_string($dbFileExist)) { + $file_exist = in_array(strtolower($dbFileExist), array('false', 'off', '-', 'no', 'n', '0')) ? false : true; + } + return $this->addUsingAlias(CcFilesPeer::FILE_EXIST, $dbFileExist, $comparison); + } + /** * Filter the query on the soundcloud_id column * diff --git a/airtime_mvc/application/models/airtime/om/BaseCcMusicDirs.php b/airtime_mvc/application/models/airtime/om/BaseCcMusicDirs.php index 8458eed2f..62dc92a81 100644 --- a/airtime_mvc/application/models/airtime/om/BaseCcMusicDirs.php +++ b/airtime_mvc/application/models/airtime/om/BaseCcMusicDirs.php @@ -42,6 +42,13 @@ abstract class BaseCcMusicDirs extends BaseObject implements Persistent */ protected $type; + /** + * The value for the removed field. + * Note: this column has a database default value of: false + * @var boolean + */ + protected $removed; + /** * @var array CcFiles[] Collection to store aggregation of CcFiles objects. */ @@ -61,6 +68,27 @@ abstract class BaseCcMusicDirs extends BaseObject implements Persistent */ protected $alreadyInValidation = false; + /** + * Applies default values to this object. + * This method should be called from the object's constructor (or + * equivalent initialization method). + * @see __construct() + */ + public function applyDefaultValues() + { + $this->removed = false; + } + + /** + * Initializes internal state of BaseCcMusicDirs object. + * @see applyDefaults() + */ + public function __construct() + { + parent::__construct(); + $this->applyDefaultValues(); + } + /** * Get the [id] column value. * @@ -91,6 +119,16 @@ abstract class BaseCcMusicDirs extends BaseObject implements Persistent return $this->type; } + /** + * Get the [removed] column value. + * + * @return boolean + */ + public function getRemoved() + { + return $this->removed; + } + /** * Set the value of [id] column. * @@ -151,6 +189,26 @@ abstract class BaseCcMusicDirs extends BaseObject implements Persistent return $this; } // setType() + /** + * Set the value of [removed] column. + * + * @param boolean $v new value + * @return CcMusicDirs The current object (for fluent API support) + */ + public function setRemoved($v) + { + if ($v !== null) { + $v = (boolean) $v; + } + + if ($this->removed !== $v || $this->isNew()) { + $this->removed = $v; + $this->modifiedColumns[] = CcMusicDirsPeer::REMOVED; + } + + return $this; + } // setRemoved() + /** * Indicates whether the columns in this object are only set to default values. * @@ -161,6 +219,10 @@ abstract class BaseCcMusicDirs extends BaseObject implements Persistent */ public function hasOnlyDefaultValues() { + if ($this->removed !== false) { + return false; + } + // otherwise, everything was equal, so return TRUE return true; } // hasOnlyDefaultValues() @@ -186,6 +248,7 @@ abstract class BaseCcMusicDirs extends BaseObject implements Persistent $this->id = ($row[$startcol + 0] !== null) ? (int) $row[$startcol + 0] : null; $this->directory = ($row[$startcol + 1] !== null) ? (string) $row[$startcol + 1] : null; $this->type = ($row[$startcol + 2] !== null) ? (string) $row[$startcol + 2] : null; + $this->removed = ($row[$startcol + 3] !== null) ? (boolean) $row[$startcol + 3] : null; $this->resetModified(); $this->setNew(false); @@ -194,7 +257,7 @@ abstract class BaseCcMusicDirs extends BaseObject implements Persistent $this->ensureConsistency(); } - return $startcol + 3; // 3 = CcMusicDirsPeer::NUM_COLUMNS - CcMusicDirsPeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 4; // 4 = CcMusicDirsPeer::NUM_COLUMNS - CcMusicDirsPeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { throw new PropelException("Error populating CcMusicDirs object", $e); @@ -520,6 +583,9 @@ abstract class BaseCcMusicDirs extends BaseObject implements Persistent case 2: return $this->getType(); break; + case 3: + return $this->getRemoved(); + break; default: return null; break; @@ -546,6 +612,7 @@ abstract class BaseCcMusicDirs extends BaseObject implements Persistent $keys[0] => $this->getId(), $keys[1] => $this->getDirectory(), $keys[2] => $this->getType(), + $keys[3] => $this->getRemoved(), ); return $result; } @@ -586,6 +653,9 @@ abstract class BaseCcMusicDirs extends BaseObject implements Persistent case 2: $this->setType($value); break; + case 3: + $this->setRemoved($value); + break; } // switch() } @@ -613,6 +683,7 @@ abstract class BaseCcMusicDirs extends BaseObject implements Persistent if (array_key_exists($keys[0], $arr)) $this->setId($arr[$keys[0]]); if (array_key_exists($keys[1], $arr)) $this->setDirectory($arr[$keys[1]]); if (array_key_exists($keys[2], $arr)) $this->setType($arr[$keys[2]]); + if (array_key_exists($keys[3], $arr)) $this->setRemoved($arr[$keys[3]]); } /** @@ -627,6 +698,7 @@ abstract class BaseCcMusicDirs extends BaseObject implements Persistent if ($this->isColumnModified(CcMusicDirsPeer::ID)) $criteria->add(CcMusicDirsPeer::ID, $this->id); if ($this->isColumnModified(CcMusicDirsPeer::DIRECTORY)) $criteria->add(CcMusicDirsPeer::DIRECTORY, $this->directory); if ($this->isColumnModified(CcMusicDirsPeer::TYPE)) $criteria->add(CcMusicDirsPeer::TYPE, $this->type); + if ($this->isColumnModified(CcMusicDirsPeer::REMOVED)) $criteria->add(CcMusicDirsPeer::REMOVED, $this->removed); return $criteria; } @@ -690,6 +762,7 @@ abstract class BaseCcMusicDirs extends BaseObject implements Persistent { $copyObj->setDirectory($this->directory); $copyObj->setType($this->type); + $copyObj->setRemoved($this->removed); if ($deepCopy) { // important: temporarily setNew(false) because this affects the behavior of @@ -889,9 +962,11 @@ abstract class BaseCcMusicDirs extends BaseObject implements Persistent $this->id = null; $this->directory = null; $this->type = null; + $this->removed = null; $this->alreadyInSave = false; $this->alreadyInValidation = false; $this->clearAllReferences(); + $this->applyDefaultValues(); $this->resetModified(); $this->setNew(true); $this->setDeleted(false); diff --git a/airtime_mvc/application/models/airtime/om/BaseCcMusicDirsPeer.php b/airtime_mvc/application/models/airtime/om/BaseCcMusicDirsPeer.php index 5d06e270d..11363ec59 100644 --- a/airtime_mvc/application/models/airtime/om/BaseCcMusicDirsPeer.php +++ b/airtime_mvc/application/models/airtime/om/BaseCcMusicDirsPeer.php @@ -26,7 +26,7 @@ abstract class BaseCcMusicDirsPeer { const TM_CLASS = 'CcMusicDirsTableMap'; /** The total number of columns. */ - const NUM_COLUMNS = 3; + const NUM_COLUMNS = 4; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; @@ -40,6 +40,9 @@ abstract class BaseCcMusicDirsPeer { /** the column name for the TYPE field */ const TYPE = 'cc_music_dirs.TYPE'; + /** the column name for the REMOVED field */ + const REMOVED = 'cc_music_dirs.REMOVED'; + /** * An identiy map to hold any loaded instances of CcMusicDirs objects. * This must be public so that other peer classes can access this when hydrating from JOIN @@ -56,12 +59,12 @@ abstract class BaseCcMusicDirsPeer { * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('Id', 'Directory', 'Type', ), - BasePeer::TYPE_STUDLYPHPNAME => array ('id', 'directory', 'type', ), - BasePeer::TYPE_COLNAME => array (self::ID, self::DIRECTORY, self::TYPE, ), - BasePeer::TYPE_RAW_COLNAME => array ('ID', 'DIRECTORY', 'TYPE', ), - BasePeer::TYPE_FIELDNAME => array ('id', 'directory', 'type', ), - BasePeer::TYPE_NUM => array (0, 1, 2, ) + BasePeer::TYPE_PHPNAME => array ('Id', 'Directory', 'Type', 'Removed', ), + BasePeer::TYPE_STUDLYPHPNAME => array ('id', 'directory', 'type', 'removed', ), + BasePeer::TYPE_COLNAME => array (self::ID, self::DIRECTORY, self::TYPE, self::REMOVED, ), + BasePeer::TYPE_RAW_COLNAME => array ('ID', 'DIRECTORY', 'TYPE', 'REMOVED', ), + BasePeer::TYPE_FIELDNAME => array ('id', 'directory', 'type', 'removed', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, ) ); /** @@ -71,12 +74,12 @@ abstract class BaseCcMusicDirsPeer { * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('Id' => 0, 'Directory' => 1, 'Type' => 2, ), - BasePeer::TYPE_STUDLYPHPNAME => array ('id' => 0, 'directory' => 1, 'type' => 2, ), - BasePeer::TYPE_COLNAME => array (self::ID => 0, self::DIRECTORY => 1, self::TYPE => 2, ), - BasePeer::TYPE_RAW_COLNAME => array ('ID' => 0, 'DIRECTORY' => 1, 'TYPE' => 2, ), - BasePeer::TYPE_FIELDNAME => array ('id' => 0, 'directory' => 1, 'type' => 2, ), - BasePeer::TYPE_NUM => array (0, 1, 2, ) + BasePeer::TYPE_PHPNAME => array ('Id' => 0, 'Directory' => 1, 'Type' => 2, 'Removed' => 3, ), + BasePeer::TYPE_STUDLYPHPNAME => array ('id' => 0, 'directory' => 1, 'type' => 2, 'removed' => 3, ), + BasePeer::TYPE_COLNAME => array (self::ID => 0, self::DIRECTORY => 1, self::TYPE => 2, self::REMOVED => 3, ), + BasePeer::TYPE_RAW_COLNAME => array ('ID' => 0, 'DIRECTORY' => 1, 'TYPE' => 2, 'REMOVED' => 3, ), + BasePeer::TYPE_FIELDNAME => array ('id' => 0, 'directory' => 1, 'type' => 2, 'removed' => 3, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, ) ); /** @@ -151,10 +154,12 @@ abstract class BaseCcMusicDirsPeer { $criteria->addSelectColumn(CcMusicDirsPeer::ID); $criteria->addSelectColumn(CcMusicDirsPeer::DIRECTORY); $criteria->addSelectColumn(CcMusicDirsPeer::TYPE); + $criteria->addSelectColumn(CcMusicDirsPeer::REMOVED); } else { $criteria->addSelectColumn($alias . '.ID'); $criteria->addSelectColumn($alias . '.DIRECTORY'); $criteria->addSelectColumn($alias . '.TYPE'); + $criteria->addSelectColumn($alias . '.REMOVED'); } } @@ -348,9 +353,6 @@ abstract class BaseCcMusicDirsPeer { */ public static function clearRelatedInstancePool() { - // Invalidate objects in CcFilesPeer instance pool, - // since one or more of them may be deleted by ON DELETE CASCADE/SETNULL rule. - CcFilesPeer::clearInstancePool(); } /** diff --git a/airtime_mvc/application/models/airtime/om/BaseCcMusicDirsQuery.php b/airtime_mvc/application/models/airtime/om/BaseCcMusicDirsQuery.php index 71b5f0f57..5cd9149bd 100644 --- a/airtime_mvc/application/models/airtime/om/BaseCcMusicDirsQuery.php +++ b/airtime_mvc/application/models/airtime/om/BaseCcMusicDirsQuery.php @@ -9,10 +9,12 @@ * @method CcMusicDirsQuery orderById($order = Criteria::ASC) Order by the id column * @method CcMusicDirsQuery orderByDirectory($order = Criteria::ASC) Order by the directory column * @method CcMusicDirsQuery orderByType($order = Criteria::ASC) Order by the type column + * @method CcMusicDirsQuery orderByRemoved($order = Criteria::ASC) Order by the removed column * * @method CcMusicDirsQuery groupById() Group by the id column * @method CcMusicDirsQuery groupByDirectory() Group by the directory column * @method CcMusicDirsQuery groupByType() Group by the type column + * @method CcMusicDirsQuery groupByRemoved() Group by the removed column * * @method CcMusicDirsQuery leftJoin($relation) Adds a LEFT JOIN clause to the query * @method CcMusicDirsQuery rightJoin($relation) Adds a RIGHT JOIN clause to the query @@ -28,10 +30,12 @@ * @method CcMusicDirs findOneById(int $id) Return the first CcMusicDirs filtered by the id column * @method CcMusicDirs findOneByDirectory(string $directory) Return the first CcMusicDirs filtered by the directory column * @method CcMusicDirs findOneByType(string $type) Return the first CcMusicDirs filtered by the type column + * @method CcMusicDirs findOneByRemoved(boolean $removed) Return the first CcMusicDirs filtered by the removed column * * @method array findById(int $id) Return CcMusicDirs objects filtered by the id column * @method array findByDirectory(string $directory) Return CcMusicDirs objects filtered by the directory column * @method array findByType(string $type) Return CcMusicDirs objects filtered by the type column + * @method array findByRemoved(boolean $removed) Return CcMusicDirs objects filtered by the removed column * * @package propel.generator.airtime.om */ @@ -202,6 +206,23 @@ abstract class BaseCcMusicDirsQuery extends ModelCriteria return $this->addUsingAlias(CcMusicDirsPeer::TYPE, $type, $comparison); } + /** + * Filter the query on the removed column + * + * @param boolean|string $removed The value to use as filter. + * Accepts strings ('false', 'off', '-', 'no', 'n', and '0' are false, the rest is true) + * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL + * + * @return CcMusicDirsQuery The current query, for fluid interface + */ + public function filterByRemoved($removed = null, $comparison = null) + { + if (is_string($removed)) { + $removed = in_array(strtolower($removed), array('false', 'off', '-', 'no', 'n', '0')) ? false : true; + } + return $this->addUsingAlias(CcMusicDirsPeer::REMOVED, $removed, $comparison); + } + /** * Filter the query by a related CcFiles object * diff --git a/airtime_mvc/build/schema.xml b/airtime_mvc/build/schema.xml index d13731256..44cbdd05d 100644 --- a/airtime_mvc/build/schema.xml +++ b/airtime_mvc/build/schema.xml @@ -28,6 +28,7 @@ + @@ -88,6 +89,7 @@ + @@ -95,7 +97,7 @@ - + diff --git a/airtime_mvc/build/sql/schema.sql b/airtime_mvc/build/sql/schema.sql index 0aa50f834..a1ecefe7d 100644 --- a/airtime_mvc/build/sql/schema.sql +++ b/airtime_mvc/build/sql/schema.sql @@ -42,6 +42,7 @@ CREATE TABLE "cc_music_dirs" "id" serial NOT NULL, "directory" TEXT, "type" VARCHAR(255), + "removed" BOOLEAN default 'f', PRIMARY KEY ("id"), CONSTRAINT "cc_music_dir_unique" UNIQUE ("directory") ); @@ -114,6 +115,7 @@ CREATE TABLE "cc_files" "subject" VARCHAR(512), "contributor" VARCHAR(512), "language" VARCHAR(512), + "file_exist" BOOLEAN default 't', "soundcloud_id" INTEGER, "soundcloud_error_code" INTEGER, "soundcloud_error_msg" VARCHAR(512), @@ -548,7 +550,7 @@ ALTER TABLE "cc_access" ADD CONSTRAINT "cc_access_owner_fkey" FOREIGN KEY ("owne ALTER TABLE "cc_files" ADD CONSTRAINT "cc_files_editedby_fkey" FOREIGN KEY ("editedby") REFERENCES "cc_subjs" ("id"); -ALTER TABLE "cc_files" ADD CONSTRAINT "cc_music_dirs_folder_fkey" FOREIGN KEY ("directory") REFERENCES "cc_music_dirs" ("id") ON DELETE CASCADE; +ALTER TABLE "cc_files" ADD CONSTRAINT "cc_music_dirs_folder_fkey" FOREIGN KEY ("directory") REFERENCES "cc_music_dirs" ("id"); ALTER TABLE "cc_perms" ADD CONSTRAINT "cc_perms_subj_fkey" FOREIGN KEY ("subj") REFERENCES "cc_subjs" ("id") ON DELETE CASCADE; From 6597f6701ad169a0ad84ac9c865566bb8092a2e3 Mon Sep 17 00:00:00 2001 From: Yuchen Wang Date: Sat, 7 Jan 2012 10:03:54 -0500 Subject: [PATCH 12/29] CC-1986: Configurable columns for media search Adding ColVis plugin for datatable, this plugin can be used to Show/Hide columns --- .../js/datatables/plugin/dataTables.ColVis.js | 871 ++++++++++++++++++ 1 file changed, 871 insertions(+) create mode 100644 airtime_mvc/public/js/datatables/plugin/dataTables.ColVis.js diff --git a/airtime_mvc/public/js/datatables/plugin/dataTables.ColVis.js b/airtime_mvc/public/js/datatables/plugin/dataTables.ColVis.js new file mode 100644 index 000000000..d6d1bcfd4 --- /dev/null +++ b/airtime_mvc/public/js/datatables/plugin/dataTables.ColVis.js @@ -0,0 +1,871 @@ +/* + * File: ColVis.js + * Version: 1.0.6 + * CVS: $Id$ + * Description: Controls for column visiblity in DataTables + * Author: Allan Jardine (www.sprymedia.co.uk) + * Created: Wed Sep 15 18:23:29 BST 2010 + * Modified: $Date$ by $Author$ + * Language: Javascript + * License: GPL v2 or BSD 3 point style + * Project: Just a little bit of fun :-) + * Contact: www.sprymedia.co.uk/contact + * + * Copyright 2010-2011 Allan Jardine, all rights reserved. + * + * This source file is free software, under either the GPL v2 license or a + * BSD style license, available at: + * http://datatables.net/license_gpl2 + * http://datatables.net/license_bsd + */ + +(function($) { + +/** + * ColVis provides column visiblity control for DataTables + * @class ColVis + * @constructor + * @param {object} DataTables settings object + */ +ColVis = function( oDTSettings, oInit ) +{ + /* Santiy check that we are a new instance */ + if ( !this.CLASS || this.CLASS != "ColVis" ) + { + alert( "Warning: ColVis must be initialised with the keyword 'new'" ); + } + + if ( typeof oInit == 'undefined' ) + { + oInit = {}; + } + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Public class variables + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + + /** + * @namespace Settings object which contains customisable information for ColVis instance + */ + this.s = { + /** + * DataTables settings object + * @property dt + * @type Object + * @default null + */ + "dt": null, + + /** + * Customisation object + * @property oInit + * @type Object + * @default passed in + */ + "oInit": oInit, + + /** + * Callback function to tell the user when the state has changed + * @property fnStateChange + * @type function + * @default null + */ + "fnStateChange": null, + + /** + * Mode of activation. Can be 'click' or 'mouseover' + * @property activate + * @type String + * @default click + */ + "activate": "click", + + /** + * Position of the collection menu when shown - align "left" or "right" + * @property sAlign + * @type String + * @default right + */ + "sAlign": "left", + + /** + * Text used for the button + * @property buttonText + * @type String + * @default Show / hide columns + */ + "buttonText": "Show / hide columns", + + /** + * Flag to say if the collection is hidden + * @property hidden + * @type boolean + * @default true + */ + "hidden": true, + + /** + * List of columns (integers) which should be excluded from the list + * @property aiExclude + * @type Array + * @default [] + */ + "aiExclude": [], + + /** + * Store the original viisbility settings so they could be restored + * @property abOriginal + * @type Array + * @default [] + */ + "abOriginal": [], + + /** + * Show restore button + * @property bRestore + * @type Array + * @default [] + */ + "bRestore": false, + + /** + * Restore button text + * @property sRestore + * @type String + * @default Restore original + */ + "sRestore": "Restore original", + + /** + * Overlay animation duration in mS + * @property iOverlayFade + * @type Integer + * @default 500 + */ + "iOverlayFade": 500, + + /** + * Label callback for column names. Takes three parameters: 1. the column index, 2. the column + * title detected by DataTables and 3. the TH node for the column + * @property fnLabel + * @type Function + * @default null + */ + "fnLabel": null, + + /** + * Indicate if ColVis should automatically calculate the size of buttons or not. The default + * is for it to do so. Set to "css" to disable the automatic sizing + * @property sSize + * @type String + * @default auto + */ + "sSize": "auto" + }; + + + /** + * @namespace Common and useful DOM elements for the class instance + */ + this.dom = { + /** + * Wrapper for the button - given back to DataTables as the node to insert + * @property wrapper + * @type Node + * @default null + */ + "wrapper": null, + + /** + * Activation button + * @property button + * @type Node + * @default null + */ + "button": null, + + /** + * Collection list node + * @property collection + * @type Node + * @default null + */ + "collection": null, + + /** + * Background node used for shading the display and event capturing + * @property background + * @type Node + * @default null + */ + "background": null, + + /** + * Element to position over the activation button to catch mouse events when using mouseover + * @property catcher + * @type Node + * @default null + */ + "catcher": null, + + /** + * List of button elements + * @property buttons + * @type Array + * @default [] + */ + "buttons": [], + + /** + * Restore button + * @property restore + * @type Node + * @default null + */ + "restore": null + }; + + /* Store global reference */ + ColVis.aInstances.push( this ); + + /* Constructor logic */ + this.s.dt = oDTSettings; + this._fnConstruct(); + return this; +}; + + + +ColVis.prototype = { + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Public methods + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + + /** + * Rebuild the list of buttons for this instance (i.e. if there is a column header update) + * @method fnRebuild + * @returns void + */ + "fnRebuild": function () + { + /* Remove the old buttons */ + for ( var i=this.dom.buttons.length-1 ; i>=0 ; i-- ) + { + if ( this.dom.buttons[i] !== null ) + { + this.dom.collection.removeChild( this.dom.buttons[i] ); + } + } + this.dom.buttons.splice( 0, this.dom.buttons.length ); + + if ( this.dom.restore ) + { + this.dom.restore.parentNode( this.dom.restore ); + } + + /* Re-add them (this is not the optimal way of doing this, it is fast and effective) */ + this._fnAddButtons(); + + /* Update the checkboxes */ + this._fnDrawCallback(); + }, + + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Private methods (they are of course public in JS, but recommended as private) + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + + /** + * Constructor logic + * @method _fnConstruct + * @returns void + * @private + */ + "_fnConstruct": function () + { + this._fnApplyCustomisation(); + + var that = this; + this.dom.wrapper = document.createElement('div'); + this.dom.wrapper.className = "ColVis TableTools"; + + this.dom.button = this._fnDomBaseButton( this.s.buttonText ); + this.dom.button.className += " ColVis_MasterButton"; + this.dom.wrapper.appendChild( this.dom.button ); + + this.dom.catcher = this._fnDomCatcher(); + this.dom.collection = this._fnDomCollection(); + this.dom.background = this._fnDomBackground(); + + this._fnAddButtons(); + + /* Store the original visbility information */ + for ( var i=0, iLen=this.s.dt.aoColumns.length ; i'+this.s.sRestore+'' ); + + $(nButton).click( function (e) { + for ( var i=0, iLen=that.s.abOriginal.length ; i'+ + ''+sTitle+'' ); + + $(nButton).click( function (e) { + var showHide = !$('input', this).is(":checked"); + if ( e.target.nodeName.toLowerCase() == "input" ) + { + showHide = $('input', this).is(":checked"); + } + + /* Need to consider the case where the initialiser created more than one table - change the + * API index that DataTables is using + */ + var oldIndex = $.fn.dataTableExt.iApiIndex; + $.fn.dataTableExt.iApiIndex = that._fnDataTablesApiIndex.call(that); + that.s.dt.oInstance.fnSetColumnVis( i, showHide ); + $.fn.dataTableExt.iApiIndex = oldIndex; /* Restore */ + + if ( that.s.fnStateChange !== null ) + { + that.s.fnStateChange.call( that, i, showHide ); + } + } ); + + return nButton; + }, + + + /** + * Get the position in the DataTables instance array of the table for this instance of ColVis + * @method _fnDataTablesApiIndex + * @returns {int} Index + * @private + */ + "_fnDataTablesApiIndex": function () + { + for ( var i=0, iLen=this.s.dt.oInstance.length ; i