Overview

Packages

  • Core
    • Authentication
    • Backend
    • Cache
    • CEC
    • Chain
    • ContentType
    • Database
    • Datatype
    • Debug
    • Exception
    • Frontend
      • Search
      • URI
      • Util
    • GenericDB
      • Model
    • GUI
      • HTML
    • I18N
    • LayoutHandler
    • Log
    • Security
    • Session
    • Util
    • Validation
    • Versioning
    • XML
  • Module
    • ContentSitemapHtml
    • ContentSitemapXml
    • ContentUserForum
    • NavigationTop
  • mpAutoloaderClassMap
  • None
  • Plugin
    • ContentAllocation
    • CronjobOverview
    • FormAssistant
    • FrontendLogic
    • FrontendUsers
    • Linkchecker
    • ModRewrite
    • Newsletter
    • Repository
      • FrontendNavigation
      • KeywordDensity
    • SearchSolr
    • SmartyWrapper
    • UrlShortener
    • UserForum
    • Workflow
  • PluginManager
  • Setup
    • Form
    • GUI
    • Helper
      • Environment
      • Filesystem
      • MySQL
      • PHP
    • UpgradeJob

Classes

  • cApiAction
  • cApiActionCollection
  • cApiActionlog
  • cApiActionlogCollection
  • cApiArea
  • cApiAreaCollection
  • cApiArticle
  • cApiArticleCollection
  • cApiArticleLanguage
  • cApiArticleLanguageCollection
  • cApiArticleSpecification
  • cApiArticleSpecificationCollection
  • cApiCategory
  • cApiCategoryArticle
  • cApiCategoryArticleCollection
  • cApiCategoryCollection
  • cApiCategoryLanguage
  • cApiCategoryLanguageCollection
  • cApiCategoryTree
  • cApiCategoryTreeCollection
  • cApiClient
  • cApiClientCollection
  • cApiClientLanguage
  • cApiClientLanguageCollection
  • cApiCommunication
  • cApiCommunicationCollection
  • cApiContainer
  • cApiContainerCollection
  • cApiContainerConfiguration
  • cApiContainerConfigurationCollection
  • cApiContent
  • cApiContentCollection
  • cApiDbfs
  • cApiDbfsCollection
  • cApiFile
  • cApiFileCollection
  • cApiFileInformation
  • cApiFileInformationCollection
  • cApiFrameFile
  • cApiFrameFileCollection
  • cApiFrontendGroup
  • cApiFrontendGroupCollection
  • cApiFrontendGroupMember
  • cApiFrontendGroupMemberCollection
  • cApiFrontendPermission
  • cApiFrontendPermissionCollection
  • cApiFrontendUser
  • cApiFrontendUserCollection
  • cApiGroup
  • cApiGroupCollection
  • cApiGroupMember
  • cApiGroupMemberCollection
  • cApiGroupProperty
  • cApiGroupPropertyCollection
  • cApiInUse
  • cApiInUseCollection
  • cApiIso3166
  • cApiIso3166Collection
  • cApiIso6392
  • cApiIso6392Collection
  • cApiKeyword
  • cApiKeywordCollection
  • cApiLanguage
  • cApiLanguageCollection
  • cApiLayout
  • cApiLayoutCollection
  • cApiMailLog
  • cApiMailLogCollection
  • cApiMailLogSuccess
  • cApiMailLogSuccessCollection
  • cApiMetaTag
  • cApiMetaTagCollection
  • cApiMetaType
  • cApiMetaTypeCollection
  • cApiModule
  • cApiModuleCollection
  • cApiNavMain
  • cApiNavMainCollection
  • cApiNavSub
  • cApiNavSubCollection
  • cApiOnlineUser
  • cApiOnlineUserCollection
  • cApiPathresolveCache
  • cApiPathresolveCacheCollection
  • cApiProperty
  • cApiPropertyCollection
  • cApiRight
  • cApiRightCollection
  • cApiSearchTracking
  • cApiSearchTrackingCollection
  • cApiStat
  • cApiStatCollection
  • cApiSystemProperty
  • cApiSystemPropertyCollection
  • cApiTemplate
  • cApiTemplateCollection
  • cApiTemplateConfiguration
  • cApiTemplateConfigurationCollection
  • cApiType
  • cApiTypeCollection
  • cApiUpload
  • cApiUploadCollection
  • cApiUploadMeta
  • cApiUploadMetaCollection
  • cApiUser
  • cApiUserCollection
  • cApiUserProperty
  • cApiUserPropertyCollection
  • NoteCollection
  • NoteItem
  • TODOCollection
  • TODOItem
  • Overview
  • Package
  • Class
  • Tree
  • Deprecated
  • Todo
  1: <?php
  2: /**
  3:  * This file contains the article language collection and item class.
  4:  *
  5:  * @package Core
  6:  * @subpackage GenericDB_Model
  7:  * @version SVN Revision $Rev:$
  8:  *
  9:  * @author Bjoern Behrens
 10:  * @copyright four for business AG <www.4fb.de>
 11:  * @license http://www.contenido.org/license/LIZENZ.txt
 12:  * @link http://www.4fb.de
 13:  * @link http://www.contenido.org
 14:  */
 15: 
 16: defined('CON_FRAMEWORK') || die('Illegal call: Missing framework initialization - request aborted.');
 17: 
 18: /**
 19:  * Article language collection
 20:  *
 21:  * @package Core
 22:  * @subpackage GenericDB_Model
 23:  */
 24: class cApiArticleLanguageCollection extends ItemCollection {
 25: 
 26:     /**
 27:      * Create a new collection of items.
 28:      *
 29:      * @param string $select where clause to use for selection (see
 30:      *        ItemCollection::select())
 31:      */
 32:     public function __construct($select = false) {
 33:         global $cfg;
 34:         parent::__construct($cfg['tab']['art_lang'], 'idartlang');
 35:         $this->_setItemClass('cApiArticleLanguage');
 36: 
 37:         // set the join partners so that joins can be used via link() method
 38:         $this->_setJoinPartner('cApiArticleCollection');
 39:         $this->_setJoinPartner('cApiLanguageCollection');
 40:         $this->_setJoinPartner('cApiTemplateConfigurationCollection');
 41: 
 42:         if ($select !== false) {
 43:             $this->select($select);
 44:         }
 45:     }
 46: 
 47:     /**
 48:      * Creates an article language item entry.
 49:      *
 50:      * @global object $auth
 51:      * @param int $idart
 52:      * @param int $idlang
 53:      * @param string $title
 54:      * @param string $urlname
 55:      * @param string $pagetitle
 56:      * @param string $summary
 57:      * @param int $artspec
 58:      * @param string $created
 59:      * @param string $author
 60:      * @param string $lastmodified
 61:      * @param string $modifiedby
 62:      * @param string $published
 63:      * @param string $publishedby
 64:      * @param int $online
 65:      * @param int $redirect
 66:      * @param string $redirect_url
 67:      * @param int $external_redirect
 68:      * @param int $artsort
 69:      * @param int $timemgmt
 70:      * @param string $datestart
 71:      * @param string $dateend
 72:      * @param int $status
 73:      * @param int $time_move_cat
 74:      * @param int $time_target_cat
 75:      * @param int $time_online_move
 76:      * @param int $locked
 77:      * @param mixed $free_use_01
 78:      * @param mixed $free_use_02
 79:      * @param mixed $free_use_03
 80:      * @param int $searchable
 81:      * @param float $sitemapprio
 82:      * @param string $changefreq
 83:      * @return cApiArticleLanguage
 84:      */
 85:     public function create($idart, $idlang, $title, $urlname, $pagetitle, $summary, $artspec = 0, $created = '', $author = '', $lastmodified = '', $modifiedby = '', $published = '', $publishedby = '', $online = 0, $redirect = 0, $redirect_url = '', $external_redirect = 0, $artsort = 0, $timemgmt = 0, $datestart = '', $dateend = '', $status = 0, $time_move_cat = 0, $time_target_cat = 0, $time_online_move = 0, $locked = 0, $free_use_01 = '', $free_use_02 = '', $free_use_03 = '', $searchable = 1, $sitemapprio = 0.5, $changefreq = '') {
 86:         global $auth;
 87: 
 88:         if (empty($author)) {
 89:             $author = $auth->auth['uname'];
 90:         }
 91:         if (empty($created)) {
 92:             $created = date('Y-m-d H:i:s');
 93:         }
 94:         if (empty($lastmodified)) {
 95:             $lastmodified = date('Y-m-d H:i:s');
 96:         }
 97: 
 98:         $urlname = (trim($urlname) == '') ? trim($title) : trim($urlname);
 99: 
100:         $item = parent::createNewItem();
101: 
102:         $item->set('idart', $idart);
103:         $item->set('idlang', $idlang);
104:         $item->set('title', $title);
105:         $item->set('urlname', $urlname);
106:         $item->set('pagetitle', $pagetitle);
107:         $item->set('summary', $summary);
108:         $item->set('artspec', $artspec);
109:         $item->set('created', $created);
110:         $item->set('author', $author);
111:         $item->set('lastmodified', $lastmodified);
112:         $item->set('modifiedby', $modifiedby);
113:         $item->set('published', $published);
114:         $item->set('publishedby', $publishedby);
115:         $item->set('online', $online);
116:         $item->set('redirect', $redirect);
117:         $item->set('redirect_url', $redirect_url);
118:         $item->set('external_redirect', $external_redirect);
119:         $item->set('artsort', $artsort);
120:         $item->set('timemgmt', $timemgmt);
121:         $item->set('datestart', $datestart);
122:         $item->set('dateend', $dateend);
123:         $item->set('status', $status);
124:         $item->set('time_move_cat', $time_move_cat);
125:         $item->set('time_target_cat', $time_target_cat);
126:         $item->set('time_online_move', $time_online_move);
127:         $item->set('locked', $locked);
128:         $item->set('free_use_01', $free_use_01);
129:         $item->set('free_use_02', $free_use_02);
130:         $item->set('free_use_03', $free_use_03);
131:         $item->set('searchable', $searchable);
132:         $item->set('sitemapprio', $sitemapprio);
133:         $item->set('changefreq', $changefreq);
134: 
135:         $item->store();
136: 
137:         return $item;
138:     }
139: 
140:     /**
141:      * Returns id (idartlang) of articlelanguage by article id and language id
142:      *
143:      * @param int $idcat
144:      * @param int $idlang
145:      * @return int
146:      */
147:     public function getIdByArticleIdAndLanguageId($idart, $idlang) {
148:         $sql = "SELECT idartlang FROM `%s` WHERE idart = %d AND idlang = %d";
149:         $this->db->query($sql, $this->table, $idart, $idlang);
150:         return ($this->db->nextRecord()) ? $this->db->f('idartlang') : 0;
151:     }
152: 
153: }
154: 
155: /**
156:  * CONTENIDO API - Article Object
157:  *
158:  * This object represents a CONTENIDO article
159:  *
160:  * Create object with
161:  * $obj = new cApiArticleLanguage(idartlang);
162:  * or with
163:  * $obj = new cApiArticleLanguage();
164:  * $obj->loadByArticleAndLanguageId(idart, lang);
165:  *
166:  * You can now read the article properties with
167:  * $obj->getField(property);
168:  *
169:  * List of article properties:
170:  *
171:  * idartlang - Language dependant article id
172:  * idart - Language indepenant article id
173:  * idclient - Id of the client
174:  * idtplcfg - Template configuration id
175:  * title - Internal Title
176:  * pagetitle - HTML Title
177:  * summary - Article summary
178:  * created - Date created
179:  * lastmodified - Date lastmodiefied
180:  * author - Article author (username)
181:  * online - On-/offline
182:  * redirect - Redirect
183:  * redirect_url - Redirect URL
184:  * artsort - Article sort key
185:  * timemgmt - Time management
186:  * datestart - Time management start date
187:  * dateend - Time management end date
188:  * status - Article status
189:  * free_use_01 - Free to use
190:  * free_use_02 - Free to use
191:  * free_use_03 - Free to use
192:  * time_move_cat - Move category after time management
193:  * time_target_cat - Move category to this cat after time management
194:  * time_online_move - Set article online after move
195:  * external_redirect - Open article in new window
196:  * locked - Article is locked for editing
197:  * searchable - Whether article should be found via search
198:  * sitemapprio - The priority for the sitemap
199:  *
200:  * You can extract article content with the
201:  * $obj->getContent(contype [, number]) method.
202:  *
203:  * To extract the first headline you can use:
204:  *
205:  * $headline = $obj->getContent("htmlhead", 1);
206:  *
207:  * If the second parameter is ommitted the method returns an array with all
208:  * available
209:  * content of this type. The array has the following schema:
210:  *
211:  * array(number => content);
212:  *
213:  * $headlines = $obj->getContent("htmlhead");
214:  *
215:  * $headlines[1] First headline
216:  * $headlines[2] Second headline
217:  * $headlines[6] Sixth headline
218:  *
219:  * Legal content type string are defined in the CONTENIDO system table
220:  * 'con_type'.
221:  * Default content types are:
222:  *
223:  * NOTE: This parameter is case insesitive, you can use html or cms_HTML or
224:  * CmS_HtMl.
225:  * Your don't need start with cms, but it won't crash if you do so.
226:  *
227:  * htmlhead - HTML Headline
228:  * html - HTML Text
229:  * headline - Headline (no HTML)
230:  * text - Text (no HTML)
231:  * img - Upload id of the element
232:  * imgdescr - Image description
233:  * link - Link (URL)
234:  * linktarget - Linktarget (_self, _blank, _top ...)
235:  * linkdescr - Linkdescription
236:  * swf - Upload id of the element
237:  *
238:  * @package Core
239:  * @subpackage GenericDB_Model
240:  */
241: class cApiArticleLanguage extends Item {
242: 
243:     /**
244:      * Config array
245:      *
246:      * @var array
247:      */
248:     public $tab;
249: 
250:     /**
251:      * Article content
252:      *
253:      * @var array
254:      */
255:     public $content = NULL;
256: 
257:     /**
258:      * Constructor Function
259:      *
260:      * @param mixed $mId Specifies the ID of item to load
261:      * @param bool $fetchContent Flag to fetch content
262:      */
263:     public function __construct($mId = false, $fetchContent = false) {
264:         global $cfg;
265:         parent::__construct($cfg['tab']['art_lang'], 'idartlang');
266:         $this->setFilters(array(), array());
267:         if ($mId !== false) {
268:             $this->loadByPrimaryKey($mId);
269:             if (true === $fetchContent) {
270:                 $this->_getArticleContent();
271:             }
272:         }
273:     }
274: 
275:     /**
276:      * Load data by article and language id
277:      *
278:      * @param int $idart Article id
279:      * @param int $idlang Language id
280:      * @param bool $fetchContent Flag to fetch content
281:      * @return bool true on success, otherwhise false
282:      */
283:     public function loadByArticleAndLanguageId($idart, $idlang, $fetchContent = false) {
284:         $result = true;
285:         if (!$this->isLoaded()) {
286:             $aProps = array(
287:                 'idart' => $idart,
288:                 'idlang' => $idlang
289:             );
290:             $aRecordSet = $this->_oCache->getItemByProperties($aProps);
291:             if ($aRecordSet) {
292:                 // entry in cache found, load entry from cache
293:                 $this->loadByRecordSet($aRecordSet);
294:             } else {
295:                 $idartlang = $this->_getIdArtLang($idart, $idlang);
296:                 $result = $this->loadByPrimaryKey($idartlang);
297:             }
298:         }
299: 
300:         if (true === $fetchContent) {
301:             $this->_getArticleContent();
302:         }
303: 
304:         return $result;
305:     }
306: 
307:     /**
308:      * Extract 'idartlang' for a specified 'idart' and 'idlang'
309:      *
310:      * @param int $idart Article id
311:      * @param int $idlang Language id
312:      * @return int Language dependant article id
313:      */
314:     protected function _getIdArtLang($idart, $idlang) {
315:         global $cfg;
316: 
317:         $sql = 'SELECT idartlang FROM `%s` WHERE idart = %d AND idlang = %d';
318:         $this->db->query($sql, $cfg['tab']['art_lang'], $idart, $idlang);
319:         $this->db->nextRecord();
320: 
321:         return $this->db->f('idartlang');
322:     }
323: 
324:     /**
325:      * Load the articles content and stores it in the 'content' property of the
326:      * article object.
327:      *
328:      * $article->content[type][number] = value;
329:      */
330:     public function loadArticleContent() {
331:         $this->_getArticleContent();
332:     }
333: 
334:     /**
335:      * Load the articles content and stores it in the 'content' property of the
336:      * article object.
337:      *
338:      * $article->content[type][number] = value;
339:      */
340:     protected function _getArticleContent() {
341:         global $cfg;
342: 
343:         if (NULL !== $this->content) {
344:             return;
345:         }
346: 
347:         $sql = 'SELECT b.type, a.typeid, a.value FROM `%s` AS a, `%s` AS b ' . 'WHERE a.idartlang = %d AND b.idtype = a.idtype ORDER BY a.idtype, a.typeid';
348: 
349:         $this->db->query($sql, $cfg['tab']['content'], $cfg['tab']['type'], $this->get('idartlang'));
350: 
351:         $this->content = array();
352:         while ($this->db->nextRecord()) {
353:             $this->content[strtolower($this->db->f('type'))][$this->db->f('typeid')] = $this->db->f('value');
354:         }
355:     }
356: 
357:     /**
358:      * Get the value of an article property
359:      *
360:      * List of article properties:
361:      *
362:      * idartlang - Language dependant article id
363:      * idart - Language indepenant article id
364:      * idclient - Id of the client
365:      * idtplcfg - Template configuration id
366:      * title - Internal Title
367:      * pagetitle - HTML Title
368:      * summary - Article summary
369:      * created - Date created
370:      * lastmodified - Date lastmodiefied
371:      * author - Article author (username)
372:      * online - On-/offline
373:      * redirect - Redirect
374:      * redirect_url - Redirect URL
375:      * artsort - Article sort key
376:      * timemgmt - Time management
377:      * datestart - Time management start date
378:      * dateend - Time management end date
379:      * status - Article status
380:      * free_use_01 - Free to use
381:      * free_use_02 - Free to use
382:      * free_use_03 - Free to use
383:      * time_move_cat - Move category after time management
384:      * time_target_cat - Move category to this cat after time management
385:      * time_online_move - Set article online after move
386:      * external_redirect - Open article in new window
387:      * locked - Article is locked for editing
388:      * searchable - Whether article should be found via search
389:      * sitemapprio - The priority for the sitemap
390:      *
391:      * @param string $name
392:      * @param bool $bSafe Flag to run defined outFilter on passed value
393:      *        NOTE: It's not used ATM!
394:      * @return string Value of property
395:      */
396:     public function getField($name, $bSafe = true) {
397:         return $this->values[$name];
398:     }
399: 
400:     /**
401:      * Userdefined setter for article language fields.
402:      *
403:      * @param string $name
404:      * @param mixed $value
405:      * @param bool $bSafe Flag to run defined inFilter on passed value
406:      * @todo should return return value of overloaded method
407:      */
408:     public function setField($name, $value, $bSafe = true) {
409:         switch ($name) {
410:             case 'urlname':
411:                 $value = conHtmlSpecialChars(cApiStrCleanURLCharacters($value), ENT_QUOTES);
412:                 break;
413:             case 'timemgmt':
414:             case 'time_move_cat':
415:             case 'time_online_move':
416:             case 'redirect':
417:             case 'external_redirect':
418:             case 'locked':
419:                 $value = ($value == 1) ? 1 : 0;
420:                 break;
421:             case 'idart':
422:             case 'idlang':
423:             case 'artspec':
424:             case 'online':
425:             case 'searchable':
426:             case 'artsort':
427:             case 'status':
428:                 $value = (int) $value;
429:                 break;
430:             case 'redirect_url':
431:                 $value = ($value == 'http://' || $value == '') ? '0' : $value;
432:                 break;
433:         }
434: 
435:         parent::setField($name, $value, $bSafe);
436:     }
437: 
438:     /**
439:      * Get content(s) from an article.
440:      *
441:      * Returns the specified content element or an array("id"=>"value") if the
442:      * second parameter is omitted.
443:      *
444:      * Legal content type string are defined in the CONTENIDO system table
445:      * 'con_type'.
446:      * Default content types are:
447:      *
448:      * NOTE: Parameter is case insesitive, you can use html or cms_HTML or
449:      * CmS_HtMl.
450:      * Your don't need start with cms, but it won't crash if you do so.
451:      *
452:      * htmlhead - HTML Headline
453:      * html - HTML Text
454:      * headline - Headline (no HTML)
455:      * text - Text (no HTML)
456:      * img - Upload id of the element
457:      * imgdescr - Image description
458:      * link - Link (URL)
459:      * linktarget - Linktarget (_self, _blank, _top ...)
460:      * linkdescr - Linkdescription
461:      * swf - Upload id of the element
462:      *
463:      * @param string $type CMS_TYPE - Legal cms type string
464:      * @param int|NULL $id Id of the content
465:      * @return string array data
466:      */
467:     public function getContent($type, $id = NULL) {
468:         if (NULL === $this->content) {
469:             $this->_getArticleContent();
470:         }
471: 
472:         if (empty($this->content)) {
473:             return '';
474:         }
475: 
476:         if ($type == '') {
477:             return 'Class ' . get_class($this) . ': content-type must be specified!';
478:         }
479: 
480:         $type = strtolower($type);
481: 
482:         if (!strstr($type, 'cms_')) {
483:             $type = 'cms_' . $type;
484:         }
485: 
486:         if (is_null($id)) {
487:             // return Array
488:             return $this->content[$type];
489:         }
490: 
491:         // return String
492:         return (isset($this->content[$type][$id])) ? $this->content[$type][$id] : '';
493:     }
494: 
495:     /**
496:      * Similar to getContent this function returns the cContentType object
497:      *
498:      * @param string $type Name of the content type
499:      * @param int $id Id of the content type in this article
500:      * @return boolean|cContenType Returns false if the name was invalid
501:      */
502:     public function getContentObject($type, $id) {
503:         $typeClassName = 'cContentType' . ucfirst(strtolower(str_replace('CMS_', '', $type)));
504: 
505:         if (!class_exists($typeClassName)) {
506:             return false;
507:         }
508: 
509:         return new $typeClassName($this->getContent($type, $id), $id, $this->content);
510:     }
511: 
512:     /**
513:      * Similar to getContent this function returns the view voce of the cContentType object
514:      * @param string $type Name of the content type
515:      * @param int  $id Id of the content type in this article
516:      * @return string
517:      */
518:     public function getContentViewCode($type, $id) {
519:         $object = $this->getContentObject($type, $id);
520:         if ($object === false) {
521:             return "";
522:         }
523: 
524:         return $object->generateViewCode();
525:     }
526: 
527:     /**
528:      * Returns all available content types
529:      *
530:      * @throws cException if no content has been loaded
531:      * @return array
532:      */
533:     public function getContentTypes() {
534:         if (empty($this->content)) {
535:             throw new cException('getContentTypes() No content loaded');
536:         }
537:         return array_keys($this->content);
538:     }
539: 
540:     /**
541:      * Returns the link to the current object.
542:      *
543:      * @param int $changeLangId change language id for URL (optional)
544:      * @return string link
545:      */
546:     public function getLink($changeLangId = 0) {
547:         if ($this->isLoaded() === false) {
548:             return '';
549:         }
550: 
551:         $options = array();
552:         $options['idart'] = $this->get('idart');
553:         $options['lang'] = ($changeLangId == 0) ? $this->get('idlang') : $changeLangId;
554:         if ($changeLangId > 0) {
555:             $options['changelang'] = $changeLangId;
556:         }
557: 
558:         return cUri::getInstance()->build($options);
559:     }
560: 
561: }
562: 
CMS CONTENIDO 4.9.4 API documentation generated by ApiGen 2.8.0