/** * find elements * * @param Charcoal_String|string $selector * @param Charcoal_Integer|integer $index */ public function find($selector, $index = NULL) { Charcoal_ParamTrait::validateString(1, $selector); Charcoal_ParamTrait::validateInteger(2, $index, TRUE); if (!$this->simple_html_dom) { _throw(new SimpleHtmlDomComponentException("SimpleHtmlDom object is not created")); } $selector = us($selector); log_debug("debug", "index:{$index}"); if ($index !== NULL) { // returns single element $index = ui($index); log_debug("debug", "returns single element"); $result = $this->simple_html_dom->find($selector, $index); log_debug("debug", "result: " . print_r($result, true)); return $result ? new Charcoal_SimpleHtmlDomElement($result) : NULL; } // returns all elements log_debug("debug", "selector:" . print_r($selector, true)); $result = $this->simple_html_dom->find($selector); log_debug("debug", "result: " . print_r($result, true)); $elements = array(); foreach ($result as $e) { $elements[] = new Charcoal_SimpleHtmlDomElement($e); } return $result ? $elements : array(); }
/** * find elements * * @param Charcoal_String|string $selector * @param Charcoal_Integer|integer $index */ public function find($selector, $index = NULL) { Charcoal_ParamTrait::validateString(1, $selector); Charcoal_ParamTrait::validateInteger(2, $index, TRUE); $selector = us($selector); if ($index !== NULL) { // returns single element $index = ui($index); $result = $this->element->find($selector, $index); return $result ? new Charcoal_SimpleHtmlDomElement($result) : NULL; } // returns all elements $result = $this->element->find($selector); $elements = array(); foreach ($result as $e) { $elements[] = new Charcoal_SimpleHtmlDomElement($e); } return $result ? $elements : array(); }
public function createFile($file_path, $contents, $overwrite = TRUE, $mode = 0777) { Charcoal_ParamTrait::validateString(1, $file_path); Charcoal_ParamTrait::validateString(2, $contents); Charcoal_ParamTrait::validateBoolean(3, $overwrite); Charcoal_ParamTrait::validateInteger(4, $mode); $obj = new Charcoal_File($file_path, $this->_base_dir_obj); if ($overwrite) { if ($obj->exists() && !$obj->canWrite()) { _throw(new Charcoal_FileSystemComponentException('specified file is not writeable.')); } } elseif ($obj->exists()) { _throw(new Charcoal_FileSystemComponentException('specified file is already exists.')); } try { // create file with parent directory $obj->makeFile($mode, $contents, TRUE); return $obj; } catch (Exception $e) { _catch($e); _throw(new Charcoal_FileSystemComponentException(s('creating file failed.'), $e)); } }
/** * set option * * @param Charcoal_Integer|integer $option XML_OPTION_CASE_FOLDING or XML_OPTION_TARGET_ENCODING * @param mixed $value XML_OPTION_CASE_FOLDING or XML_OPTION_TARGET_ENCODING */ public function setRawOption($option, $value) { Charcoal_ParamTrait::validateInteger(1, $option); if (!$this->parser) { _throw(new PhpXmlParserComponentException('parser object is not created')); } return xml_parser_set_option($this->parser, ui($option), $value); }
/** * real implementation of Charcoal_SmartGateway::updateField() * * @param Charcoal_String|string $comment comment text * @param Charcoal_QueryTarget $query_target description about target model, alias, or joins * @param Charcoal_Integer|int $data_id identify database entity * @param Charcoal_String|string $field field name to update * @param Charcoal_Scalar $value scalar primitive data to update */ public function updateField($comment, $query_target, $data_id, $field, $value) { Charcoal_ParamTrait::validateString(1, $comment, TRUE); Charcoal_ParamTrait::validateIsA(2, 'Charcoal_QueryTarget', $query_target); Charcoal_ParamTrait::validateInteger(3, $data_id); Charcoal_ParamTrait::validateString(4, $field); Charcoal_ParamTrait::validateScalar(5, $value); $model = $this->getModel($query_target->getModelName()); $alias = $query_target->getAlias(); $dto = $model->createDTO(); $dto->{$field} = $value instanceof Charcoal_Scalar ? $value->unbox() : $value; // log_debug( "debug,smart_gateway,sql", "dto:" . print_r($dto,true) ); // log_debug( "debug,smart_gateway,sql", "sql:$sql", self::TAG ); // log_debug( "debug,smart_gateway,sql", "params:" . print_r($params,true), self::TAG ); $pk = $model->getPrimaryKey(); $where = "{$pk} = ?"; $params = array(ui($data_id)); $criteria = new Charcoal_SQLCriteria($where, $params); list($sql, $params) = $this->sql_builder->buildUpdateSQL($model, $alias, $dto, $criteria); $sql = !empty($comment) ? $this->sql_builder->prependComment($sql, $comment) : $sql; // log_debug( "debug,smart_gateway,sql", "sql:$sql", self::TAG ); // log_debug( "debug,smart_gateway,sql", "params:" . print_r($params,true), self::TAG ); $this->data_source->prepareExecute($sql, $params); }
/** * Generate RDBMS-specific SQL for MIN/MAX/SUM/COUNT/AVG * * @param Charcoal_ITableModel $model table model object related with th query * @param string $alias table model alias which is specified by $model * @param int $aggregate_func specify aggregate function which is defined in Charcoal_EnumSQLAggregateFunc * @param Charcoal_SQLCriteria $criteria criteria which should be used in WHERE clause * @param array $joins list of join(list of Charcoal_QueryJoin object) * @param array $fields list of fields which will be returned in query result * * @return string SQL */ public function buildAggregateSQL($model, $alias, $aggregate_func, $criteria, $joins, $fields = NULL) { Charcoal_ParamTrait::validateIsA(1, 'Charcoal_ITableModel', $model); Charcoal_ParamTrait::validateString(2, $alias, TRUE); Charcoal_ParamTrait::validateInteger(3, $aggregate_func); Charcoal_ParamTrait::validateIsA(4, 'Charcoal_SQLCriteria', $criteria); Charcoal_ParamTrait::validateVector(5, $joins); Charcoal_ParamTrait::validateVector(6, $fields, TRUE); $table_name = $model->getTableName(); /** @var int $aggregate_func */ $aggregate_func = ui($aggregate_func); $aggregate_func_map = array(Charcoal_EnumSQLAggregateFunc::FUNC_MIN => 'MIN', Charcoal_EnumSQLAggregateFunc::FUNC_MAX => 'MAX', Charcoal_EnumSQLAggregateFunc::FUNC_SUM => 'SUM', Charcoal_EnumSQLAggregateFunc::FUNC_COUNT => 'COUNT', Charcoal_EnumSQLAggregateFunc::FUNC_AVG => 'AVG'); $func = $aggregate_func_map[$aggregate_func]; $fields = v($fields)->join(","); $sql = "SELECT {$func}({$fields}) FROM " . us($table_name); if ($alias && !empty($alias)) { $sql .= ' AS ' . $alias; } foreach ($joins as $join) { /** @var Charcoal_QueryJoin $join */ $join_type = $join->getJoinType(); $join_model_name = $join->getModelName(); $join_alias = $join->getAlias(); $join_cond = $join->getCondition(); $join_model = $this->getSandbox()->createObject($join_model_name, 'table_model'); /** @var Charcoal_ITableModel $join_model */ /** @var Charcoal_String $join_alias */ /** @var Charcoal_String $join_cond */ switch ($join_type) { case Charcoal_EnumSQLJoinType::INNER_JOIN: $sql .= ' INNER JOIN ' . $join_model->getTableName(); break; case Charcoal_EnumSQLJoinType::LEFT_JOIN: $sql .= ' LEFT JOIN ' . $join_model->getTableName(); break; case Charcoal_EnumSQLJoinType::RIGHT_JOIN: $sql .= ' RIGHT JOIN ' . $join_model->getTableName(); break; } if ($join_alias && !$join_alias->isEmpty()) { $sql .= ' AS ' . $join_alias; } if ($join_cond && !$join_cond->isEmpty()) { $sql .= ' ON ' . $join_cond; } } $where_clause = $criteria->getWhere(); $limit = $criteria->getLimit(); $offset = $criteria->getOffset(); $group_by = $criteria->getGroupBy(); if (!empty($where_clause)) { $sql .= ' WHERE ' . $where_clause; } if (!empty($limit)) { $sql .= ' LIMIT ' . $limit; } if (!empty($offset)) { $sql .= ' OFFSET ' . $offset; } if (!empty($group_by)) { $sql .= ' GROUP BY ' . $group_by; } return $sql; }
/** * Load bitmap */ public function create($src_file, $dest_file, $thumb_max_width, $thumb_max_height, $image_format = IMG_JPG) { Charcoal_ParamTrait::validateString(1, $src_file); Charcoal_ParamTrait::validateString(2, $dest_file); Charcoal_ParamTrait::validateInteger(3, $thumb_max_width); Charcoal_ParamTrait::validateInteger(4, $thumb_max_height); Charcoal_ParamTrait::validateInteger(5, $image_format); $src_file = us($src_file); $dest_file = us($dest_file); $thumb_max_width = ui($thumb_max_width); $thumb_max_height = ui($thumb_max_height); $info = @getimagesize($src_file); if ($info === false) { _throw(new ThumbnailComponentException(s("failed to get image info:[{$src_file}]"))); } // MimeTypeを調べる $mime = $info['mime']; switch ($mime) { case 'image/gif': $mime = $ext = 'gif'; break; case 'image/png': $mime = $ext = 'png'; break; case 'image/jpeg': $mime = 'jpeg'; $ext = 'jpg'; break; default: _throw(new ThumbnailComponentException(s("invalid image type:[{$mime}]"))); } // 元の画像の幅と高さ $width = $info[0]; $height = $info[1]; // 元の画像のアスペクト比 $aspect = $width / $height; // 幅・高さに0が指定された場合は元画像のサイズを使用 if ($thumb_max_width == 0) { $thumb_max_width = $width; } if ($thumb_max_height == 0) { $thumb_max_height = $height; } // 変換先サイズのアスペクト比 $max_aspect = $thumb_max_width / $thumb_max_height; // 画像リソースを生成 $img = @call_user_func("imagecreatefrom{$mime}", $src_file); if ($img === FALSE || !is_resource($img)) { _throw(new ThumbnailComponentException(s("failed to imagecreate{$mime}({$src_file})"))); } // 最大幅・高さを超過していないかチェック・縦横比を維持して新しいサイズを定義 if ($aspect > $max_aspect) { $thumb_width = $thumb_max_width; $thumb_height = intval($thumb_width / $aspect); } else { $thumb_height = $thumb_max_height; $thumb_width = intval($thumb_height * $aspect); } // サムネイルを作成 $thumb = imagecreatetruecolor($thumb_width, $thumb_height); imagecopyresampled($thumb, $img, 0, 0, 0, 0, $thumb_width, $thumb_height, $width, $height); switch ($image_format) { case IMG_GIF: $res = imagegif($thumb, $dest_file); break; case IMG_PNG: $res = imagepng($thumb, $dest_file); break; case IMG_JPG: $res = imagejpeg($thumb, $dest_file); break; default: _throw(new ThumbnailComponentException("invalid image image format:[{$image_format}]")); } return array($thumb_width, $thumb_height); }
/** * Set OFFSET clause * * @param int $offset OFFSET clause */ public function setOffset($offset) { Charcoal_ParamTrait::validateInteger(1, $offset); $this->offset = ui($offset); }
/** * Touch internal * */ public function _touch($filter, $duration) { Charcoal_ParamTrait::validateImplements(1, 'Charcoal_IFileFilter', $filter); Charcoal_ParamTrait::validateInteger(2, $duration, TRUE); $expire_date = date('Y-m-d H:i:s', strtotime("+{$duration} seconds")); // meta suffix $suffix = '.' . CACHE_FILE_EXT_META; // select files and delete them all $files = $this->_cache_root_dir->listFiles($meta_filter); if ($files && is_array($files)) { foreach ($files as $file) { $key = basename($file, $suffix); // read cache meta file $meta = $this->_readMeta($meta_file); if ($meta === FALSE) { $meta = $this->_buildMeta($key); if ($meta === FALSE) { continue; } } // save meta file $meta['expire_date'] = $expire_date; $this->_writeMeta($meta_file, p($meta)); } } }